-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathalgorithm.txt
10 lines (7 loc) · 1.79 KB
/
algorithm.txt
1
2
3
4
5
6
7
8
9
10
Ho spezzato il problema in 3 funzioni, la funzione generale "generate_snake", una funzione per verificare se il serpente rimanga all'interno dell'immagine senza "sbordare" (definita come "check bordeless"), ed una funzione per verificare che il serpente non si mangi da solo (definita come "check_diagonal_cross").
funzione generate_snake: dopo aver caricato l'immagine di partenza, finchè non vengono esaurite le mosse, o finchè il serpente non si mangia da solo, o finchè il serpente non incontra un ostacolo, muovo il serpente in modo sequenziale rispettando l'ordine dei comandi.
l'approccio che ho usato per muovere il serpente è qualcosa che si avvicina molto allo sliding window, difatto registrando ogni suo spostamento coloro di verde la nuova posizione della testa del serpente e di grigio il pixel dove prima di trovava la coda del serpente.
chiaramente dovessi incontrare un frutto, coloro di verde sia la testa che la coda del serpente, e aggiorno la posizione della coda del serpente (che è anche la sua attuale lunghezza, sarà poi il valore del return della funzione).
ad ogni iterazione, verifico che il serpente non si mangi da solo in diagonale, e che non si "sbordi" dall'immagine, mediante le funzioni definite sopra e delle quali approfondirò qua sotto.
funzione check_bordeless: verifico che la nuova posizione dove si muoverà il serpente non si trovi al di fuori dell'immagine, facendo un controllo su ogni angolo, modificando appropriataente in caso la-le coordinate.
funzione check_diagonal_cross: la richiamo ogni qual volta il serpente stia per fare una mossa in diagonale, e servendomi di un dizionario controllo che i 2 pixel che si trovano adiacenti alla diagonale non siano già stati colorati di verde, coprendo cosi ogni direzione diagonale che possa prendere il serpente (NW, NE, SW, SE).