created with NetLogo
view/download model file: mine.nlogo
Campo minato (in ingl. Minesweeper) e' un gioco, celebre nella sua versione Microsoft (Campo fiorito nelle versioni piu' recenti di Windows), inventato da Robert Donner e Curt Johnson nel 1981.
In realta' e' un discendente del famoso Cube, gioco creato nel 1973 per PDP-11.
Nelle versioni piu' recenti di Windows, il titolo e' stato rinominato in Prato Fiorito.
L'obiettivo del gioco e' scoprire tutto il territorio senza far esplodere le mine nel minor tempo possibile.
Ogni quadrato viene scoperto clickando su di esso se il flag Bandiera e' impostato ad <Off>. Se quest'ultimo e' sull'opzione <Pianta> il giocatore puo' segnare ogni quadrato in cui crede che sia presente una mina con una bandiera.
Impostazioni come il numero di mine o le dimensioni del territorio possono essere cambiate solo prima dell'inizio della partita. Non si garantisce alcun comportamento corretto del programma nel caso esse siano modificate a partita in corso.
Il codice che da' vita al gioco puo' essere suddiviso in due sezioni principali: la prima e' una fase di setup in cui viene preparato il quadro, la seconda prevede invece l'interazione con il giocatore.
Nella fase di setup viene creato un numero di tartarughe di razza "mine" (da qui in poi chiamate solo mine) pari al valore indicato dallo slider. Ad ognuna di esse viene richiesto di disporsi in una posizione casuale sul campo. Per garantire che in ogni casella ci sia al massimo una mina viene costruita una lista che contiene, in modo casuale, tutte le posizioni possibili del campo. Le mine accedono alla lista estrapolando il primo elemento in alcune istruzioni racchiuse in un blocco
without-interruption
Questo comando crea un lock sulla struttura dati, poiche' l'agente che esegue comandi nel blocco non puo' essere "interrotto" da altri agenti, i quali nel frattempo sono "sospesi".
Una volta che le mine si sono disposte in campo, ognuna di esse genera un figlio (tartarughe di razza "turtlec") per ogni casella circostante. Appena il "parto" e' completato si chiede alle turtlec di assumere una forma ed un colore corrispondente al numero di tartarughe che convivono sulla stessa patch.
A questo punto il setup, che avviene ovviamente a tartarughe "nascoste", e' completato.
Inizia quindi il ciclo che gestisce gli eventi generati dal giocatore con il mouse.
Supponiamo a questo punto che il flag Bandiera sia impostato ad <Off>.
Ad ogni click, la procedura gestisci-mouse controlla innanzitutto se a quelle coordinate corrisponde una mina: in tal caso dichiara la partita conclusa. Se invece, nella casella corrispondente non ci sono mine, si "apre" il campo (mostrando le tartarughe sottostanti) fino alla frontiera, ovvero fino a trovare caselle in cui ci sono solo tartarughe di razza "turtlec". Quando queste vengono mostrate, il giocatore puo' vedere il numerino corrispondente alla casella.
L'esplorazione del territorio scoperto viene gestito dalla semplice procedura ricorsiva
apri [mxcor mycor]
Per gestire la terminazione, viene mantenuta una variabile (cwin) che e' decrementata ogni volta che viene scoperta una parte di campo. Se cwin diviene uguale a 0 la partita viene dichirata vinta.
Il valore del timer visualizzato sul pannello di output indica la durata della partita.
Dopo una prima implementazione in StarLogo, il porting in NetLogo e' stato necessario
per rendere piu' reattiva l'interazione con l'utente e per l'esistenza di un comando di "lock" sulle strutture dati (vedi sez. Implementazione).
http://it.wikipedia.org/wiki/Campo_minato
http://www.planet-minesweeper.com/