Imparare a programmare... Giocando!

Cinema, Peperoncini, Navi Spaziali, Barbecue, Fisica Quantistica… TUTTO!
Post Reply
User avatar
Lysor_o.O
Veteran
Veteran
Posts: 2448
Joined: 12/12/2002 00:31
Location: Milano

Imparare a programmare... Giocando!

Post by Lysor_o.O » 07/05/2009 01:30

Un videogioco può insegnare a programmare? Beh, in senso stretto, no, ma a livello di mentalità, RoboZZle ci va veramente vicino. Se per voi la programmazione è un mondo oscuro e misterioso, e vi piacerebbe capire come funziona, oppure se sapete già programmare e volete mettervi alla prova, RoboZZle è il gioco che fa per voi, e ha talmente tanti livelli che ce n'è davvero per tutti i gusti: si spazia dal banalissimo al quasi impossibile.

E' un gioco da fare online, tramite browser. Avete presente i soliti giochini in Flash? Ecco, questo non è in Flash, è in Silverlight, che è una tecnologia concorrente, sviluppata dalla Microsoft anziché dalla Adobe. Ma è completamente gratuita e funziona un po' su tutti i browser: Explorer 7, Explorer 8, Firefox... Si scarica e installa in un attimo, basta aprire il sito del gioco e se non lo avete già vi chiede se volete installarlo. Tranquilli, è un download sicuro.

Il sito del gioco è http://www.robozzle.com/

Lo scopo del gioco è controllare un robottino, visto dall'alto, dandogli ordini sul percorso da seguire. Gli ordini sono molto semplici: avanti, gira a destra, gira a sinistra. Ogni comando va inserito in una casella, e il robot li esegue in sequenza. Non solo: ogni "sequenza" (o, per meglio dire, "funzione") ha un nome (F1, F2, F3, ecc), e un ordine può coincidere con il nome di una funzione: il che significa che verranno eseguiti tutti quegli ordini, in sequenza. E' più facile da vedere che da spiegare. Se volete, l'autore ha preparato un video (in inglese) in cui illustra il gioco: http://www.youtube.com/watch?v=MmqBVWi_Pc0

Altrimenti...Immagine d'esempio (l'ho ritagliata un po', ma c'è tutto quello che conta):

Image

(Se volete giocare questo livello, usate questo link: http://robozzle.com/index.aspx?puzzle=45&program=a)

Voi siete quel cosino grigio a forma di freccia. La mappa in cui bisogna muoversi è costituita, in questo caso, da sole caselle blu: ce ne potrebbero essere anche rosse o verdi, ma non in questo caso. Notare che le caselle nere non sono un muro, ma il vuoto: se ci si va sopra, è game over, e bisogna provare con un'altra sequenza di ordini.

Veniamo, appunto, agli ordini. In basso a sinistra ci sono F1 e F2: in F1 ho messo 4 volte avanti, poi una chiamata a F2, poi girare a destra, e poi ancora 4 volte avanti. In F2, invece, si gira 2 volte a sinistra e poi si avanza 4 volte. Cliccando su "Go!" che cosa succede? Semplice, si parte da F1: avanti, avanti, avanti, avanti, ed ecco che il robot si troverà sulla prima stellina, nell'angolo in basso a sinistra della mappa. Poi viene chiamata F2: a quel punto si interrompe momentaneamente la sequenza corrente, cioè F1, e si passa a F2. F2 ci fa ruotare 2 volte su noi stessi (il comando indica una rotazione sul posto, non "avanti e a sinistra"! Non ci si può muovere in diagonale!), quindi ci ritroveremo a puntare verso l'alto. Poi si eseguono i 4 comandi "avanti", e si ritorna al punto di partenza. A questo punto in F2 non c'è più nulla, e si ritorna ad eseguire i comandi rimanenti di F1: per prima cosa giriamo a destra, e poi andiamo avanti 4 volte. Ecco che abbiamo preso anche la 2° stella. A questo punto... Beh, il programma è finito. Non c'è più spazio per altri comandi. Questo significa che ho sbagliato, e devo provare a usare un'altra sequenza.

Due ulteriori precisazioni. E' perfettamente possibile che una funzione chiami se stessa: in questo caso ripartirà dall'inizio. Se per esempio in fondo a F2 avessi messo il comando "F2", cosa sarebbe successo? Che il robot sarebbe ruotato su se stesso 2 volte, sarebbe andato avanti 4 volte, poi si sarebbe girato di nuovo, sarebbe andato avanti 4 volte, si sarebbe girato, e via così, all'infinito. Infine, nella colonna di destra vedete delle caselle colorate: una rossa, una verde, una blu. Con quelle, si può mettere uno sfondo ad un comando, e il comando verrà eseguito solo se il robot, in quel momento, si trova su una casella di quel colore.

TUTTO QUA. Potete andare avanti, a destra, e a sinistra; potete raggruppare un po' di ordini in funzioni, potete chiamare le funzioni, una funzione può anche chiamare se stessa (è quella che si chiama "ricorsione"), ed è possibile dare uno sfondo colorato ad ogni comando, che verrà eseguito solo se il robot si troverà su una casella di quel colore. TUTTO QUA.

(In realtà, in alcuni puzzle viene data la possibilità di cambiare il colore della casella in cui ci si trova, ma è una cosa che capita raramente, e che personalmente neanche mi piace...)

Il gioco consiste nel trovare una sequenza di comandi che vi porti a raccogliere tutte le stelle, e, soprattutto, nel farcela stare nelle caselle che avete a disposizione. Facile, dite?

Ebbene, RoboZZle è S-T-U-P-E-N-D-O perché è uno di quei giochini che sembrano facili, facilissimi, addirittura banali, che ti viene da dire "Ma cosa ci può essere di difficile in un gioco del genere?". E invece ci sono dei livelli di una difficoltà paurosa. Voi non avete idea di cosa richiedono alcuni livelli, non ve lo potete neppure sognare, ma nemmeno lontanamente! Ve ne mostro alcuni...

Cominciamo da Spinning Propeller (http://robozzle.com/index.aspx?puzzle=400&program=a): siete SICURI che lo sapreste risolvere?
Image
Esempi di cose fuori di melone:
Il puzzle Wrong Turn (http://robozzle.com/index.aspx?puzzle=153&program=a)
Image
sembra facile da risolvere: basta dirgli di andare avanti e di girare a sinistra quando è sul verde. Sì... E l'ultima curva come la fate? :wink:

Il puzzle chiamato "Square" (http://robozzle.com/index.aspx?puzzle=391&program=a) si presenta così:
Image
e, come dice l'autore nella descrizione, in ogni riga bisogna muoversi verso destra su un certo numero di blocchi rossi e blu, dove i rossi sono il quadrato dei blu! Quindi se ci sono 3 blu ci sono poi 9 rossi. Tenendo presente che non si può "andare lunghi" (si cade giù, game over), come fate a contare? Come fate con quei pochi comandi che vi ho illustrato a calcolare un quadrato? Ma questo è niente...

In "Square Root" (http://robozzle.com/index.aspx?puzzle=393&program=a)
Image

il concetto è simile, ma al contrario: dovete calcolare una radice quadrata! Infatti il numero di blocchi rossi è la radice quadrata di quelli blu!

E cosa mi dite del logaritmo in base 2? E le potenze di 2? Perché ci sono anche quelli... :wink:


Ma non voglio che pensiate che sia solo un gioco matematico. Piuttosto, voglio convincervi che le possibilità sono davvero MOLTE più di quelle che si può pensare. Quanti di voi avrebbero detto che questi puzzle sono risolvibili? Eppure lo sono... E ora vi spiego perché:

Come dice l'autore del gioco, si tratta di un social puzzle. I puzzle non li crea solo lui: c'è un editor che permette a chiunque di creare il proprio puzzle, FORNIRE UNA SOLUZIONE (in modo da dimostrare che è risolvibile!), e pubblicarlo. Io stesso ne ho pubblicati un paio. E la parte "social" non finisce qui: chi stabilisce se un puzzle è bello o brutto, facile o difficile? Gli utenti! Quando si risolve un puzzle si può dare un voto alla difficoltà (da 1 a 5) e dire se è piaciuto o meno. Il gioco calcola la media tra tutti gli utenti e quindi classifica i puzzle sulla base di questo.

Non solo: è possibile vedere, per ogni puzzle, chi è stato a risolverlo e, soprattutto, quanto è lunga la sua soluzione. Lunga non nel senso di passi del robot, ma nel senso di numero di istruzioni totali utilizzate. La sfida è trovare la soluzione più corta. A volte qualcuno ne trova una più corta di quella dell'autore del puzzle!

Per esempio: ci credereste che questo puzzle, USSR (http://robozzle.com/index.aspx?puzzle=70&program=a)
Image

si risolve in solo 4 (QUATTRO) comandi? Eppure si può, e, fidatevi, è pure facile!

Questo gioco mi ha letteralmente stregato. Per intenderci, sono nella Top40 mondiale (su oltre 2000 giocatori), con oltre 150 puzzle risolti. Vi sfido a raggiungermi... E vedrete che, sia che ci riusciate, sia che non ci riusciate, il gioco vi piacerà! :wink:

P.S.: registrarsi non è obbligatorio, ma se il gioco vi piace, fatelo, ne vale la pena! Oltre tutto, non bisogna nemmeno fare login ogni volta...
P.P.S: se volete avere il link diretto ad un puzzle, comprensivo anche della vostra soluzione (utilissimo per salvarla), schiacciate L e copiate il link.
Image
Tu vedi delle cose e chiedi: perché? Ma io sogno di cose che non ci sono mai state, e che forse non ci saranno mai, e dico: perché no?
--- Wolfgang Güllich

User avatar
PiChan_o.O
oO Team
oO Team
Posts: 792
Joined: 12/06/2007 10:52
Blizzard BattleTag: Pichan#2941
Location: Sovigliana-Spicchio

Post by PiChan_o.O » 22/05/2009 14:28

simpatico è simpatico......ma bisogna essere fulminati ( :lol: ) come i programmatori per risolverli.......

User avatar
mader_o.O
oO Team
oO Team
Posts: 2204
Joined: 28/11/2004 19:40
Location: Oltre la barriera

Post by mader_o.O » 22/05/2009 17:50

a me pare una ciofeca di gioco e pare non solo a me :asd:

mmm, mi pareva di aver già postato qui...

User avatar
Lysor_o.O
Veteran
Veteran
Posts: 2448
Joined: 12/12/2002 00:31
Location: Milano

Post by Lysor_o.O » 22/05/2009 22:14

PiChan_o.O wrote:simpatico è simpatico......ma bisogna essere fulminati ( :lol: ) come i programmatori per risolverli.......
In realtà, i puzzle classificati come molto facili o facili sono più o meno alla portata di tutti... Solo ogni tanto capita che lì in mezzo ne finisca uno difficile, ma è raro.

Io ormai sono a quota 235 puzzle risolti, sono tra i primi 30 al mondo (28°, in questo momento), per restare tra i primi 30 devo lottare con il coltello tra i denti, le prime posizioni della classifica sono ormai irraggiungibili (i primi 14 sono tutti oltre i 300 puzzle, i primi 6 addirittura oltre 400!), ma il gioco continua a divertirmi.
Tra parentesi, tutti i puzzle di cui ho mostrato la figura li ho già risolti (ovviamente... Altrimenti mica li avrei postati!!! :lol: ), secondo me sono in realtà più facili di quello che sembrano, e sono convinto che vedendo la soluzione direste "tutto qua?". Per intenderci: in quello dei quadrati e quello delle radici quadrate... Ovviamente, NON bisogna VERAMENTE trovare il modo di calcolare un quadrato o una radice quadrata con questi comandi!

Mader, confessa: c'hai provato, non sei riuscito ad andare oltre il tutorial (NOOOOOOOOOB!!!!), e ora te la prendi col gioco... :asd:
Image
Tu vedi delle cose e chiedi: perché? Ma io sogno di cose che non ci sono mai state, e che forse non ci saranno mai, e dico: perché no?
--- Wolfgang Güllich

User avatar
mader_o.O
oO Team
oO Team
Posts: 2204
Joined: 28/11/2004 19:40
Location: Oltre la barriera

Post by mader_o.O » 23/05/2009 12:29

In verità da tutta quella pappardella che hai scritto non ho manco capito quale fosse il link giusto :nod:

User avatar
Lysor_o.O
Veteran
Veteran
Posts: 2448
Joined: 12/12/2002 00:31
Location: Milano

Post by Lysor_o.O » 23/05/2009 15:13

Questo deve essere quello che si chiama EPIC FAIL; devo ancora capire, però, se il fallimento è mio o tuo... Comunque
Lysor_o.O wrote:Il sito del gioco è http://www.robozzle.com/
Image
Tu vedi delle cose e chiedi: perché? Ma io sogno di cose che non ci sono mai state, e che forse non ci saranno mai, e dico: perché no?
--- Wolfgang Güllich

Post Reply

Who is online

Users browsing this forum: Google [Bot] and 23 guests