Nel gioco dello Snake, un serpente si muove su un campo rettangolare costituito da NxM quadratini. Il serpente all’inizio del gioco è costituito da un unico quadratino. Ogni quadratino del campo può:
Valgono le seguenti regole di gioco:
Il campo da gioco iniziale può essere rappresentato secondo due diversi formati:
Nel caso di file Json, la rappresentazione può essere simile alla seguente.
{
"rows": 4,
"cols": 6,
"food": [
[0, 4],
[2, 2],
[3, 2]
],
"blocks": [
[0, 2],
[1, 1],
[3, 1]
]
}
I quadratini vuoti non sono rappresentati nel file Json.
Una partita è descritta da un file Json. Di seguito ve ne è un esempio.
{
"field_in": "field_in_01.png",
"start": [5, 3],
"moves": "N N N E SE SE SE E E N N N W W W W W W W S S S S S S SW SW SW",
"field_out": "field_out_01.png"
}
L'attributo field_in
indica il file contenente il campo di gioco iniziale. L'estensione del campo può essere .png
nel caso di formato bitmap o .json
nel caso di file Json. L'attributo start
contiene la posizione iniziale della testa del serpente. L'attributo moves
contiene l'elenco delle mosse compiute dalla testa del serpente. Durante il suo movimento il serpente deve rispettare le regole precedentemente indicate. Il gioco termina quando si esauriscono le mosse elencate oppure, prematuramente, in caso di scontro. Il campo field_out
contiene il nome del file sul quale deve essere salvato il campo di gioco nel suo stato finale.
Obiettivo del progetto è implementare la funzione
def play(game_file: str) -> int:
pass
che accetta in ingresso il nome di un file di gioco e restituisce in uscita la dimensione finale del corpo del serpente al termine del gioco. Come effetto collaterale, la funzione deve salvare su disco il file con lo stato finale del campo di gioco. Oltre agli ostacoli ed al cibo residuo, il campo di gioco contiene anche il corpo del serpente e, in un diverso colore, tutta la scia lasciata dal serpente durante la partita. Tutto il codice realizzato dallo studente deve essere contenuto nell'unico file main.py
.
I quadratini del campo di gioco sono colorati secondo la seguente tabella.