È ora di sminare il campo

Era un po’ che volevo mettermi a studiare Python: tenevo appoggiato lì da una parte Dive Into Python di Mark Pilgrim (relativo al ramo 2.x), ma non mi ero mai deciso a leggerlo. Durante le ultime vacanze di Natale, avendo del tempo libero, ho pensato di cimentarmi nell’impresa di realizzare in Python un clone decentemente giocabile dell’arcinoto gioco Campo minato di Windows, partendo praticamente da zero (programmo in C/C++ da una vita, ma non mi ero mai avvicinato al “pitone”). Python si è rivelato un linguaggio facile, divertente, ma anche estremamente versatile e potente, grazie al paradigma della programmazione “orientata ai dati” e alla ricca libreria di moduli fornita a corredo.

Il motore del gioco alla prova del terminale

Come primo passo, giusto per fare amicizia con il linguaggio, ho messo su una versione di “Campo minato” per il terminale alfanumerico:

I comandi sono:

  • Q per uscire
  • B i j per segnalare una bomba (mettere la bandierina) nelle coordinate i, j
  • ? i j per mettere un punto interrogativo in posizione i, j
  • R i j per rivelare la casella i j

Carino, vero? Però, giocare sulla punta del mouse è tutta un’altra cosa.

Dagli di mouse con Tcl/Tk!

Volendo passare all’interfaccia grafica c’era da scegliere quale toolkit utilizzare. Le opzioni disponibili sono, nella pratica, queste quattro: Tcl/Tk, PyGTK, PyQt, wxPython. Non volendo sbattermi troppo in installazioni varie, ho optato per quello che arriva preinstallato con Python: Tk, il toolkit grafico di Tcl. Tk si è rivelato un toolkit intuitivo (perché orientato agli oggetti), facile ed efficiente.

Incrociando la documentazione ufficiale di Tcl/Tk con quella di Python (http://docs.python.org/library/tk.html) e con l’ottimo TkDocs, si riesce ad avere una panoramica esauriente dei concetti del toolkit e delle procedure atte ad affrontare i problemi più comuni in cui ci si può imbattere durante la realizzazione di un programma ad interfaccia grafica.

Scaricare, installare, giocare

Essendo sia Python che Tcl/Tk multipiattaforma, ho potuto realizzare dei pacchetti per Windows e Macintosh, oltre che il tarball che va bene su tutti i sistemi operativi, Linux incluso:

L’archivio per Windows (non ho fatto, per pigrizia, un pacchetto di installazione…) è molto più grande degli altri due perché contiene una versione “ritagliata” dell’interprete Python, in modo da poter girare senza dover installare null’altro (d’altra parte Windows è l’unico sistema operativo della triade che esce senza Python preinstallato di serie…). Questa distribuzione “standalone” è stata realizzata con py2exe che, come fa intuire il nome, è un tool che converte un qualsiasi script Python (portandosi dietro, come si vede, buona parte dell’interprete…) in eseguibile per Windows. Dopo aver esploso il file ZIP, è sufficiente fare doppio click sul file Minesweeptk.exe e iniziare a giocare.

Su Macintosh, dopo aver montato l’archivio DMG, si deve copiare l’application bundle Minesweeptk nella propria cartella Applicazioni e lanciarlo con il classico doppio click (testato su Mac OS X Lion 10.7.2).
Nota per i curiosi: l’app bundle è stato creato con py2app (analogo a py2exe, ma in salsa Mac). Facendo Control+Click (oppure click con il tasto destro del mouse) sull’applicazione e scegliendo Mostra contenuto pacchetto dal menù contestuale è possibile dare una sbirciata all’interno: meglio non toccare nulla, se non si vuole fare danni! In questo caso la roba più interessante (gli script e i file grafici) sta tutta nella cartella Contents/Resources.

Il tarball contiene esclusivamente gli script Python e i file GIF utilizzati per disegnare l’interfaccia. Dopo aver esploso l’archivio .tar.gz, aprire un terminale, spostarsi nella cartella Minesweeptk e lanciare il comando ‘python minesweeper.py‘ per il gioco in modalità testo, oppure il comando ‘python Minesweeptk.py‘ per quello in modalità grafica. Ovviamente occorre avere Python – completo di Tcl/Tk – installato sul proprio computer (già a posto su Linux e Mac OS X; da installare per proprio conto su Windows) e aver inserito la cartella di Python nel path di sistema. Attenzione: Python deve essere in versione 2.x in quanto non ho ancora fatto il port su Python 3. [Per la cronaca, ho sviluppato tutto sulla 2.7.2.]

Bene: buon divertimento!

Annunci

Un pensiero su &Idquo;È ora di sminare il campo

  1. Pingback: Localizzazione “che funziona” in Python « gpz500′s Weblog

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...