1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
| #include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
void afficher(int grille[19][19]) //affiche la grille : si la cellule
{ //est vivante affiche O sinon #
for(int i = 0; i<20; i++)
{
for (int j = 0; j<20; j++)
{
if (grille[i][j] == 1)
cout<<"O";
else cout<<"#";
}
cout<<endl;
}
}
void initialiser(int grille[19][19]) //la grille est initialisée aléatoirement
{
int alea (0);
for(int i = 0; i<20; i++)
{
for (int j = 0; j<20; j++)
{
alea = rand() % 2;
if (alea == 0)
grille[i][j] = 0;
else grille[i][j] = 1;
}
}
}
void suivant(int grille[19][19])
{
int tmp[19][19];
int count;
bool chg(true);
for(int i = 0; i<20; i++) // crée une copie de la grille car la grille est mutée
{
for(int j = 0; j<20; j++)
{
tmp[i][j]=grille[i][j];
}
}
for(int i=0; i<20; i++)
{
for (int j = 0; j<20; j++)
{
count = tmp[(i+19)%20][(j+19)%20] + //compte le nombre de cellules vivantes
tmp[(i+19)%20][j%20] +
tmp[(i+19)%20][(j+1)%20] +
tmp[i%20][(j+19)%20] +
tmp[i%20][(j+1)%20] +
tmp[(i+1)%20][(j+19)%20] +
tmp[(i+1)%20][j%20] +
tmp[(i+1)%20][(j+1)%20];
if (count < 2) //Si il est inférieur a deux la cellule est morte
{grille[i][j] = 0;
chg = true;}
else if (count > 2) //Sinon la cellule est vivante
{grille[i][j] = 1;
chg = true;}
}
}
if(chg == false) //Renvoie un message si il ne se passe plus rien
cout<<"grille stable"<<endl;
}
int main()
{
srand(time(0));
int grille[19][19];
char buffer;
initialiser (grille);
while (buffer == 'y')
{
suivant(grille);
afficher(grille);
cout<<"next?"<<endl;
cin>>buffer;
}
return 0;
} |
Partager