#include <iostream.h>
#include <dos.h>
#include <conio.h>
#define LARGEUR 15
#define HAUTEUR 6
/**********************************************************************/
int Matrice[LARGEUR][HAUTEUR];
/**********************************************************************/
void InitDos()
{
textbackground(1);
textcolor(14);
_setcursortype(_NOCURSOR);
}
/**********************************************************************/
void VideMatrice()
{
for(int i=0;i<LARGEUR;i++) {
for(int j=0;j<HAUTEUR;j++) Matrice[i][j]=0;
j=0;
}
}
/**********************************************************************/
void InitMatriceInitiale()
{
Matrice[6][0]=1;
Matrice[1][1]=1; Matrice[2][1]=1; Matrice[5][1]=1; Matrice[7][1]=1; Matrice[8][1]=1; Matrice[11][1]=1;
Matrice[9][2]=1; Matrice[10][2]=1; Matrice[12][2]=1; Matrice[14][2]=1;
Matrice[2][3]=1; Matrice[3][3]=1; Matrice[6][3]=1; Matrice[8][3]=1; Matrice[9][3]=1; Matrice[13][3]=1;
Matrice[7][4]=1;
Matrice[11][5]=1;
}
/**********************************************************************/
int Evolution(int i, int j,int Survivre0Naitre1)
{
int NbVoisins=0;
switch(i) {
case 0:
switch(j) {
case 0:
if(Matrice[i+1][j+0]) NbVoisins++;
if(Matrice[i+1][j+1]) NbVoisins++;
if(Matrice[i+0][j+1]) NbVoisins++;
break;
case HAUTEUR-1:
if(Matrice[i+0][j-1]) NbVoisins++;
if(Matrice[i+1][j-1]) NbVoisins++;
if(Matrice[i+1][j+0]) NbVoisins++;
break;
default:
if(Matrice[i+0][j-1]) NbVoisins++;
if(Matrice[i+1][j-1]) NbVoisins++;
if(Matrice[i+1][j+0]) NbVoisins++;
if(Matrice[i+1][j+1]) NbVoisins++;
if(Matrice[i+0][j+1]) NbVoisins++;
break;
}
break;
case LARGEUR-1:
switch(j) {
case 0:
if(Matrice[i-1][j+0]) NbVoisins++;
if(Matrice[i-1][j+1]) NbVoisins++;
if(Matrice[i-0][j+1]) NbVoisins++;
break;
case HAUTEUR-1:
if(Matrice[i+0][j-1]) NbVoisins++;
if(Matrice[i-1][j-1]) NbVoisins++;
if(Matrice[i-1][j+0]) NbVoisins++;
break;
default:
if(Matrice[i+0][j-1]) NbVoisins++;
if(Matrice[i-1][j-1]) NbVoisins++;
if(Matrice[i-1][j+0]) NbVoisins++;
if(Matrice[i-1][j+1]) NbVoisins++;
if(Matrice[i+0][j+1]) NbVoisins++;
break;
}
break;
default:
switch(j) {
case 0:
if(Matrice[i-1][j+0]) NbVoisins++;
if(Matrice[i-1][j+1]) NbVoisins++;
if(Matrice[i+0][j+1]) NbVoisins++;
if(Matrice[i+1][j+1]) NbVoisins++;
if(Matrice[i+1][j+0]) NbVoisins++;
break;
case HAUTEUR-1:
if(Matrice[i-1][j+0]) NbVoisins++;
if(Matrice[i-1][j-1]) NbVoisins++;
if(Matrice[i+0][j-1]) NbVoisins++;
if(Matrice[i+1][j-1]) NbVoisins++;
if(Matrice[i+1][j+0]) NbVoisins++;
break;
default:
if(Matrice[i-1][j-1]) NbVoisins++;
if(Matrice[i-1][j+0]) NbVoisins++;
if(Matrice[i-1][j+1]) NbVoisins++;
if(Matrice[i+0][j+1]) NbVoisins++;
if(Matrice[i+1][j+1]) NbVoisins++;
if(Matrice[i+1][j+0]) NbVoisins++;
if(Matrice[i+1][j-1]) NbVoisins++;
if(Matrice[i+0][j-1]) NbVoisins++;
break;
}
break;
}
if(!Survivre0Naitre1)
switch(NbVoisins) {
case 2:
case 3:
return 1;
default:
return 0;
}
else
switch(NbVoisins) {
case 3:
return 1;
default:
return 0;
}
}
/**********************************************************************/
void AfficheResult(char CaractOUI, char CaractNON)
{
// static int Generation=1;
for(int i=0; i<LARGEUR; i++) {
for(int j=0; j<HAUTEUR; j++) {
gotoxy((i*2)+1,(j*2)+1);
if(Matrice[i][j]) cout << CaractOUI;
else cout << CaractNON;
}
j=0;
}
}
/**********************************************************************/
void NewGeneration()
{
AfficheResult('*','-');
int MatriceTemp[LARGEUR][HAUTEUR];
for(int i=0;i<LARGEUR;i++) {
for(int j=0;j<HAUTEUR;j++) {
if(Matrice[i][j]) MatriceTemp[i][j]=Evolution(i,j,0);
else MatriceTemp[i][j]=Evolution(i,j,1);
}
j=0;
}
for( i=0;i<LARGEUR;i++) {
for(int j=0;j<HAUTEUR;j++) Matrice[i][j]=MatriceTemp[i][j];
j=0;
}
}
/**********************************************************************/
void main(void)
{
VideMatrice();
InitMatriceInitiale();
InitDos();
clrscr();
while(1) {
NewGeneration();
if(getch()==27) break;
}
}
/**********************************************************************/