Fondamenti di Informatica - Ingegneria per l'Ambiente e il Territorio - A.A. 97/98

- Quinta esercitazione in laboratorio -

Si consideri il gioco denominato Life (Gioco della Vita). In Life il giocatore colloca un insieme di individui su una scacchiera toroidale di M righe e N colonne (ogni casella può contenere al più un individuo). Con il passare del tempo, in ogni casella, possono nascere o morire individui, in accordo con le seguenti regole:

  1. ogni casella ha esattamente 8 caselle adiacenti;
  2. se il numero di vicini di un individuo è 0 o 1, l’individuo muore per solitudine;
  3. se il numero di vicini di un individuo è 4 o più, l’individuo muore per sovraffollamento;
  4. se attorno una casella vuota ci sono esattamente 3 individui, nella casella nasce un nuovo individuo.

Ciò premesso, scrivere un programma in C, che fa anche uso di funzioni e di alcune variabili globali, che illustri graficamente sullo schermo l’evoluzione di Life. A tal scopo può essere usata la funzione gotoxy(int x, int y) (richiede l’inclusione di <conio.h>) del TurboC, che modifica la posizione della prossima stampa facendo in modo che essa avvenga sulla riga y e sulla colonna x dello schermo. Si noti che tale funzione non è prevista dallo standard ANSI C.

Il programma dà inizialmente all’utente la possibilità di collocare individui sulla scacchiera, ma consente allo stesso tempo, per velocizzare l’interazione, anche di avvalersi di una eventuale matrice inizializzata direttamente nel sorgente. Il programma quindi effettua un numero imprecisato di iterazioni, in ciascuna delle quali si provvede ad aggiornare e visualizzare la scacchiera, chiedendo poi all’utente se egli intenda continuare o terminare l’elaborazione.

Si consiglia di utilizzare i tipi e le funzioni deducibili dallo schema che segue (notare che è comunque utile definire anche altre funzioni):

typedef char MatriceLife[M][N];

main() {

printf("Benvenuti a LIFE\n\n");

Inizio();

Gioca();

Fine();

return 0;

}