[Python] Un videogioco fatto con la standard library

Francesco Maida dev a cesco.it
Sab 10 Dic 2011 11:34:36 CET


Salve, mentre cercavo cose da studiare su Python in rete mi sono
imbattuto in un videogioco scritto in Python attraverso l'ausilio
della libreria "curses" che dovrebbe far parte della standard library.

Personalmente sono rimasto veramente impressionato, con appena 26
righe di codice (15 nella versione compressa) ha scritto il classico
videogioco "snake" con il serpente che vaga per un labirinto mangiando
e finisce per allungarsi ad ogni oggetto che mangia, chi ha avuto un
vecchio home computer negli anni settanta/ottanta oppure un telefonino
Nokia sa di cosa sto parlando :-)

Qui il filmato:
http://www.youtube.com/watch?v=Bj-H9uPEa5U

Qui il codice sorgente:
http://snake-1526l.googlecode.com/files/snake2615l.tar.bz2


Mi potreste aiutare a capire come funziona per favore?


1) Curses. Per fare un'analogia con qualcosa a me più familiare, mi
sembra di aver capito che questa "curses" fra le altre cose funziona
come il vecchio comando LOCATE del Basic: il terminale viene diviso
per caratteri in una griglia, e poi uno indica una coordinata X e una
Y dello schermo ed il carattere da stamparci sopra. Quello che una
volta si faceva con un LOCATE 5, 4 : PRINT "CIAO" con questa libreria
si fa con un Curses.addstr(5, 4, 'CIAO'). E' corretto ?

2) Se non ho capito male curses funziona solo da terminale. Questo
significa che il codice funzionerebbe solo da Unix / Linux e Mac OS X
? Niente Windows?

3) Per come l'ho interpretato io leggendolo il programma farebbe questo:

[Finchè l'utente non preme il tasto ESC per terminare la partita...]
...[Scrive il punteggio sullo schermo]
...[Attende un certo numero di millisecondi]
...[Controlla se è stato premuto un tasto]
...[Modifica l'array di tuple che contiene le posizioni di ogni
segmento del serpente]
...[Il serpente si è spostato sopra un carattere "O" ?]
......[Si: allunga di una unità l'array che rappresenta il serpente]
......[No: Si è spostato su di un carattere di spazio?]
.........[Si: elimina la "coda" del serpente, ovvero l'ultimo elemento
dell'array]
.........[No: vuol dire che ha cozzato contro un muro o contro se
stesso: GAME OVER!]
...[Ridisegna la "testa" del serpente, utilizzando le coordinate X e Y
indicate nella tupla che rappresenta il primo elemento dell'array]

Secondo voi è corretta questa analisi? In particolare mi riesce
difficile capire esattamente cosa fa il codice fra le righe 17 e 22.


Maggiori informazioni sulla lista Python