Il progetto consiste nel realizzare un programma Python che implementa il "Gioco della vita'' di Conway, più comunemente noto col nome inglese di Life. Vi invito a leggere la pagina italiana di del gioco su Wikipedia prima di procedere con il resto.

Breve spiegazione del gioco

Life simula, in modo del tutto inventato, vita e morte di organismi unicellulari. Il mondo è costituito da una griglia di celle. Ogni cella può essere viva o morta. Per esempio, nell'immagine qui sotto le celle nere sono quelle vive, quelle bianche sono morte.


Ogni cella interagisce con le sue vicine, ovvero quelle che sono adiacenti orizzontalmente, verticalmente o diagonalmente, secondo regole precise. Queste regole determinano se la cella, all'istante di tempo successivo, sarà viva o morta. Le regole sono

  1. cella viva con meno di due celle vive adiacenti: muore, come per effetto d'isolamento;
  2. cella viva con due o tre celle vive adiacenti: sopravvive alla generazione successiva;
  3. cella viva con più di tre celle vive adiacenti: muore, come per effetto di sovrappopolazione;
  4. cella morta con esattamente tre celle vive adiacenti: diventa una cella viva, come per effetto di riproduzione.

Consideriamo ad esempio questa configurazione:


Alla generazione successiva:

  • la cella 1 muore perché ha soltanto una cella viva adiacente (la cella 2)
  • stessa cosa accade alla cella 3
  • la cella 2 sopravvive, perché ha due celle vive adiacenti (la 1 e la 3)
  • le due celle etichettate con 4 diventano vive, perché hanno tre celle vive adiacenti (la 1, la 2 e la 3)

Si ottiene quindi questa configurazione:

Da qui si può procedere con le stesse regole, ottenendo una nuova configurazione di celle vive/morte al tempo successivo.

Notare che queste modifiche devono avvenire in contemporanea. Cioè, quando si analizza la sorte di una cella (diciamo la 2) lo si deve fare rispetto alla configurazione di partenza, ignorando eventuali modifiche già avvenute ad altre celle. Se così non fosse, nell'esempio di prima, tutte le celle morirebbero: infatti la 1 morirebbe perché ha solo una cella viva adiacente, e a questo punto morirebbero anche tutte le altre.

Per ulteriori informazioni rimando alla pagina inglese del gioco su Wikipedia.

Cosa dovete fare

Dovete realizzare un programma che usa la libreria ezgraphics per mostrare una configurazione del gioco e la sua evoluzione. Dall'interfaccia grafica dovete essere in grado di

  1. Simulare l'avanzamento del tempo: tutta la griglia va ridisegnata sulla base delle regole viste sopra.
  2. Cancellare la griglia (tutte le celle diventano morte).
  3. Modificare manualmente lo stato di una singola cella da viva a morta e viceversa.
  4. Piazzare velocemente sulla griglia alcune figure note, quale ad esempio l'aliante (glider in inglese).

Trovate qui sotto un video che mostra una implementazione dimostrativa del progetto.


Preciso il fatto che si tratta solo di un esempio, siete liberi di discostarvi da questa interfaccia, purché:

  • siano implementate le funzioni di cui sopra
  • l'interfaccia sia di tipo grafico e non testuale (non usa il terminale)
Ultime modifiche: giovedì, 1 febbraio 2024, 10:07