Gioco dello Snake

Transcript

Gioco dello Snake
 Gioco dello Snake
Alessandro Tanasi
[email protected]
http://www.tanasi.it
Lo Snake
Lo snake e' un video gioco della fine anni '70 che imita il movimento di un serpente su un piano.
Il giocatore controlla la direzione del movimento del serpente facendo in modo che questo possa cibarsi delle prelibatezze disposte sul piano di gioco.
Ogni volta che il serpente mangia ingrassa e quindi si allunga.
Lo scopo del gioco e' riuscire a mangiare tutto il cibo senza uccidere il serpente.
Requisiti
Simulazione del gioco dello snake
Movimento nelle quattro direzioni dello snake (destra, sinistra, giu', su)
Le gemme vengono disposte sul campo di battaglia
Lo snake si allunga quando mangia una gemma
Il gioco finisce se:
Lo snake esce dal campo di battaglia
Lo snake si mangia la coda
Implementazione
Mia personale interpretazione dello snake:
lo snake puo' muoversi in 4 direzioni (destra, sinistra, su, giu)
muore se urta le pareti del campo
il serpente e' velenoso quindi muore se si mangia la coda
non puo' tornare sui propri passi, i serpenti camminano solo avanti o di lato
ogni gemma che mangia lo ingrassa (si allunga)
Loop del gioco
Alla partenza del gioco avviene un'inizializzazione del gioco
Il gioco vive all'interno di un loop “infinito”
viene disegnato lo snake e il cibo
viene mosso lo snake
vengono applicate le regole di gioco La pressione del tasto ESC o Inizializzazione Pulisci schermo Disegna cibo
Disegna snake Muovi lo snake Regole Disegno del cibo
In un array sono contenute le coordinate delle gemme di cibo
Le gemme vengono disegnate sullo schermo
Se una gemma viene mangiata viene tolta la coordinata dall'array e quindi questa non viene piu' disegnata
Quando l'array e' vuoto la partita e' vinta
Disegno dello snake
Le coordinate di ogni singolo elemento dello snake sono memorizzate in un array
Periodicamente una procedura disegna ogni singolo elemento sullo schermo prendendo le coordinate dall'array
Movimento snake
Lo snake deve scorrere
Ci sono quattro routine di movimento, una per direzione
Una routine di movimento generica in base ai tasti premuti dall'utente chiama la procedura di movimento corretta
Ogni volta che lo snake si muove in cima all'array viene inserita la nuova coordinata e le altre vengono scalate buttando via l'ultima
Nuova coordinata
Gettata via
Mangia gemma
Ogni volta che lo snake mangia una gemma in cima all'array viene messa la nuova coordinata e le altre vengono scalate (si allunga quindi l'array di un elemento)
Prima di mangiare
Nuova coordinata
Dopo mangiato
Regole
Ad ogni movimento dello snake vengono applicate le regole
Viene verificato se e' in posizione errata, e quindi se la partita e' da ritenere persa
Viene verificato il numero di gemme rimanenti, e quindi se la partita puo' essere ritenuta vinta
Controllo sull'uscita dallo schermo e se si mangia la coda
Controllo se le gemme sono
finite
Partita
persa
Partita
vinta
Regole
Implementazione delle regole:
controllo costante tra la posizione dello snake e i bordi dello schermo in base alle coordinate della testa dello snake
controllo costante se lo snake si mangia la coda (la coordinata della testa dello snake coincide con quelle di una parte di corpo)
controllo su quante gemme rimangono da mangiare, se non ne rimangono la partita e' vinta (contatore di gemme rimanenti)
Modo testo
Il gioco utilizza la modalita' testo per simulare gli oggetti grafici.
La modalita' viene chiamata attraverso la int 10h, con il modo grafico 3 che pevede una risoluzione di 25 righe per 80 colonne.
Per disegnare un singolo carattere prima viene posizionato il cursore nella posizione voluta poi viene disegnato il carattere
Gestione tastiera
La tastiera viene gestita usando l' int 16h
Viene periodicamente verificato se e' stato premuto un tasto e nel caso di una pressione viene prelevato il relativo codice ascii
; controlla se e' stato premuto un tasto
mov ah, 01h
int 16h
jz no_tasto
; se e' stato premuto quindi acquisisci
mov ah, 00h
int 16h
Controlla se viene premuto
un tasto
no
se
si
Preleva il codice ascii
Conclusioni
Implementazione non completa di un videogioco (mancano livelli ecc.)
Si potrebbero introdurre migliorie per farlo sembrare un gioco reale (punteggi, classifiche, ecc..)
Il codice non e' scritto per essere prestazionale ma per essere leggibile e facilmente comprensibile
Licenza
Questo documento viene rilasciato sotto licenza Alcoolware, la quale non è altro che una normale licenza Creative Commons Attribute­NonCommercial­ShareALike [1] ma con l'aggiunta che se mi incontrate dobbiamo andare a bere qualcosa.
In sintesi è liberamente distribuibile per usi non commerciali, copiabile e modificabile purchè citiate l'autore e la fonte.
Se volete distribuire questo documento sul vostro sito siete pregati per favore di [1] http://creativecommons.org/licenses/by­nc­sa/2.0/
comunicarmelo in modo che possa spedirvi le