Ho scritto questo codice del gioco Game of Life ma non sono sicuro sia giusto anche se dovrebbe funzionare, per non riesco a fare un main che mi permetta di controllarlo
#include <stdio.h>
#include <stdlib.h>
#define N 5
void genera(int mondo[][N]) {
int i, j;
for(i=0; i<N; i++) {
for(j=0;j<N;j++){
mondo[i][j] = rand()%2;
if(mondo[i][j] == 1)
mondo[i][j] = 'X';
else if(mondo[i][j] == 0)
mondo[i][j] = ' ';
}
}
}
void mostra(int mondo[][N]) {
int i, j;
for(i=0; i<N; i++){
for(j=0; j<N; j++) {
printf("%3c", mondo[i][j]);
}
printf("\n");
}
}
void evolvi(int mondo[][N]) {
int count;
int mat[N][N];
int i, j, t, k;
for(i=0; i<N; i++) {
for(j=0; j<N; j++) {
count = 0;
for(k=-1; k<-2; k++) {
for(t=-1; j<2; j++) {
if(mondo[i+k][j+t] == 'X' && i+k>0 && j+t>0 && i+k<N && j+t<N)
count++;
}
}
if(mondo[i][j] == 'X') {
if(count<2 || count>3)
mat[i][j] = ' ';
else if(count == 2 || count == 3)
mat[i][j] = 'X';
}
else{
if(count == 3)
mat[i][j] = 'X';
else
mat[i][j] = ' ';
}
}
}
for(i=0; i<N; i++) {
for(j=0; j<N; j++) {
mondo[i][j] = mat[i][j];
}
}
}
int main() {
int end;
int mondo [N][N];
genera(mondo);
printf("Mondo: \n");
mostra(mondo);
end = 0;
while(end<8) {
evolvi(mondo);
printf("\nMondo cambiato:\n");
mostra(mondo);
end++;
}
return 0;
}
La consegna era questa
Il Gioco della vita è un automa cellulare sviluppato dal matematico inglese John Conway sul finire degli anni ‘60. Il suo scopo è quello di mostrare come comportamenti simili alla vita possano emergere da semplici regole e interazioni.
Il mondo è rappresentato da una matrice R x C (con R,C due costanti decise dal programmatore tramite #define), ogni cella può essere viva o morta.
Ci sono 5 semplici regole che definiscono l’evoluzione dello stato del mondo: 1. Una cella viva con 0 o 1 vicino vivo muore perché abbandonata
2. Una cella viva con 4, 5, 6, 7 o 8 vicini vivi muore perché sovrappopolata 3. Una cella viva con 2 o 3 vicini vivi continua a vivere
4. In una cella morta con 3 vicini vivi c’è una nascita
5. In una cella morta con n != 3 vicini vivi non succede nulla (sterile)
John Conway commenta Il gioco della vita:
https://www.youtube.com/watch?v=E8kUJL04EL
Suggerimenti
Implementare le seguenti funzioni:
...mostra(...) stampa a schermo il mondo (se la cella è viva stampa ?x? altrimenti stampa ? ?).
...evolvi(...) data la configurazione corrente del mondo, calcola la successiva, basandosi sulle 5 regole.
Bisogna prima fare tutti i calcoli sul mondo corrente E SOLO ALLA FINE aggiornare il mondo con la nuova configurazione calcolata.
...genera(...) genera una configurazione casuale di partenza.
Nella funzione ...main() occorre: 1. Dichiarare il mondo.
2. Generarvi una configurazione di partenza.
3. Continuare a stampare ed evolvere il mondo.
N.B. Il gioco non ha una fine (ma se vi stancate potete chiudere il terminale)