Pac Go, clone Pac Man in Go

Non che non esistano cloni dello storico videogioco datato 1980 della Nipponica NAMCO, ma questo ha una particolarità poco comune e forse potremmo scrivere anche rara con poche possibilità di essere smentiti.

La sviluppatrice Daniela Petruzalek (danicat in GitHub) ha riportato ogni singolo passo che lei stessa si è trovata ad affrontare nell’approcciare la creazione del clone utilizzando il linguaggio Go.

In sostanza viene illustrato passo dopo passo come arrivare alla versione finale attualmente presente nel repositorio. In questo modo spera di invogliare persone a imparare il linguaggio Go e al tempo stesso che qualcuno poi contribuisca a terminare il gioco, ad oggi effettivamente in uno stato embrionale.

Annunciato ufficialmente nel 2009, Go è un linguaggio di programmazione che soddisfa il paradigma della programmazione concorrente con soluzioni per evitare le problematiche tipiche (e.g. dead lock, starvation ecc). Solo un po’ di curiosità permetterà di seguire il percorso illustrato da danicat.

Si inizi con lo scaricare Pac Go e per farlo possiamo seguire due strade. La prima, puntare il browser all’indirizzo che ospita i sorgenti e sul lato destro cliccare sul menù a discesa Clone or download decidendo così di scaricare il repositorio in formato compresso Zip cliccando sull’apposito link Download ZIP. La seconda strada vede l’utilizzo del client Git (eventualmente da installare nella distribuzione in uso) per clonare il repositorio utilizzando il comando:

git clone https://github.com/danicat/pacgo.git

Si decomprima il file pacgo-master.zip qualora venisse scelta la prima strada, e ad ogni modo nell’una o nell’altra scelta alla fine avremo sempre una cartella di nome pacgo-master nel percorso che è stato scelto per la prova. Entrando con un qualsiasi file manager in tale cartella è possibile trovare il file README.md; un click su di esso (o due click a seconda delle impostazioni dell’ambiente desktop in uso) per aprirlo nell’apposito lettore – figura in basso – e se il contenuto non dovesse essere riconosciuto in modo automatico al click, è possibile sempre aprirlo  con un lettore di file PDF (e.g. Okular o analoghi in altri ambienti desktop).

Tre osservazioni prima di continuare. La prima, il contenuto dei file è solo in Inglese. La seconda, come visibile dall’immagine i file sono in formato md ovvero in markdown un linguaggio di markup (a cui diede un notevole contributo per la sua creazione anche Aaaron Swartz).

La terza, un lettore PDF non è l’unica possibilità per leggere i file md, ma lo si può fare con qualsiasi editor di testi (perdendo però la formattazione dei link, ad esempio) oppure con utility come pandoc (scritto in Haskell) e un browser testuale come Lynx. Redirigendo l’output di pandoc sullo standard input di Lynx – ad esempio con:

 pandoc nome_file.md | lynx stdin 

si ha la visualizzazione di tutte le caratteristiche implementate nel file md. Altra possibilità, utilizzare lo strumento Grip che permette di ottenere un output uguale a quello leggibile su Github (da non confondere con il tool grip che permette di convertire un Cd Audio in file audio nei formati Mp3, Ogg e Wav). Ancora, aprire il file con editor dedicati come Typora, ReText, ghostwriter o editR. In  ambito open source si hanno diverse strade per raggiungere lo stesso risultato e quelle elencate, probabilmente, non sono nemmeno esaustive!

Dalla precedente immagine si può osservare come i sorgenti siano suddivisi in cartelle di nome step (i.e. step01, step 02 ecc.). Nel documento README.md precedentemente aperto dopo una fase introduttiva verrà insegnato come scrivere il classico “Salve mondo” in Go, sul come lanciarlo e la spiegazione delle righe per la comprensione del programma. Per il lancio – e relativa esecuzione – dobbiamo assicurarci di aver installato il pacchetto golang con tutte le dipendenze che si tirerà dietro (immagine in basso, installazione sulla distribuzione GNU/Linux Mageia 7).

Di preciso al termine del file README.md precedentemente lanciato sarà presente un link Take to step01! (prima immagine in basso) cliccando sul quale verrà aperto il file README.md presente nella cartella step01, e così via a seguire. Ad esempio nello step01 verrà insegnato come creare i labirinti del gioco da un semplice file di testo (seconda immagine in basso).

Alla fine della lezione vi sarà il link Take to step02! cliccando sul quale verrà aperto il file README.md presente nella cartella step02 e così via a seguire. Questo fino allo step09 nel quale alla fine del tutorial il risultato sarà quello di aver capito come interagire in Go con un utente (tasti freccia) e diverse altre cosa. Lo step09 in questo momento è l’ultimo disponibile e giocabile poiché lo step0xx deve essere completato. Se qualcuno vuole partecipare allo sviluppo del gioco non ha che da accodarsi alla sviluppatrice danicat.

Va da se che chi vorrà provare solo il gioco  senza interessarsi a Go potrà saltare tutti i passi fin qui riportati. Ora, prima di lanciare l’ultima versione rilasciata dovrà essere scaricato il file simpleansi e installato. Aprendo il file main.go presente nella cartella step09 si può vedere (figura in basso) come il file simpleansi venga cercato nel percorso github.com/danicat/simpleansi e di preciso in /usr/lib/golang/src/github.com/danicat/simpleansi/ per la variabile d’ambiente Go di nome GOROOT e /home/nome_utente/go/src/github.com/danicat/simpleansi/ per la variabile d’ambiente Go di nome GOPATH. Quest’ultima, se non assegnata (come in genere avviene e verificandolo con echo $GOPATH), implica il percorso di default /home/nome_utente/go. Allora è sufficiente creare nella home utente il percorso go/src/github.com/danicat/simpleansi/ e copiare in esso il file simpleansi, tutto qui.

A questo punto è possibile lanciare il gioco aprendo un terminale nella cartella step09 e impartendo il comando:

 go run main.go 

Apparirà quanto visibile in basso. Il controllo lo si attua con i tasti freccia. Come anticipato il gioco è solo all’inizio dello sviluppo, c’è un solo livello e il movimento non è per nulla fluido. Chi vuole può dare una mano per raggiungere gli obiettivi (i.e. aggiunta nuovi livelli, audio, interfaccia grafica ecc).

Potrebbero interessarti anche...