albianchi1 / albert

esame
0 stars 0 forks source link

Progetto pysnake

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:

Crossing attempt

Il campo da 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.

Il file di gioco

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.

L'obiettivo

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.