Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

LE JEU DE LA VIE (PEUT-ÊTRE OPTIMISABLE) [BORLAND C++ COMPILER 5.5]


Information sur la source

Catégorie :Maths & Algorithmes Niveau : Débutant Date de création : 11/12/2001 Date de mise à jour : 16/12/2001 14:16:09 Vu : 2 890

Note :
2,5 / 10 - par 8 personnes
2,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

Description

On a une matrice de dimensions quelconques, dans chacune des cases il peut y avoir un habitant. Le but du jeu est de savoir quand un habitant va survivre, et quand un autre va naitre, de voir l'évolution de la vie dans cette ville virtuelle formée de cellules de la matrices ;-) tout cela en respectant les deux règles suivantes :<BR>-un habitant naît dans une case innocupée à la génération d'après seulement si le nombre de voisins est 3<BR>-un habitant reste vivant seulement dans le cas ou il est entouré de deux ou trois habitants.  
 

Source

  • #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;
  • }
  • }
  • /**********************************************************************/
#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;
	} 
}
/**********************************************************************/ 

Conclusion

Voila, dans la fonction InitMatriceInitiale() j'ai initialisé la matrice case par case. on pourrait très bien procéder différemment en allant par exemple lire dans un fichier texte externe les case habitées ou non initialement, pour que l'utilisateur puisse changer ca a sa guise ;-)&lt;BR&gt;bon hum je sais pas si c hyper optimisé mais on voit au moins comment procéder..
 

Commentaires et avis

signaler à un administrateur
Commentaire de pornik le 16/12/2001 14:17:27

goldeneye&gt; vala t contant pov type?

signaler à un administrateur
Commentaire de mastave le 06/03/2002 19:25:13

punaise, arrêtez de vous envoyer des clous!
Vous êtes carrément pas sympas entre vous!
Bon, je ne suis pas du genre hippie-cool-zen(au contraire!), mais quand même!
Bonne prog...(et pis arrêtez de vous insulter!)

signaler à un administrateur
Commentaire de recherchelesavoir le 13/03/2005 13:22:36

je débute en c (et j'utilise le builder 5.5 version gratuite)

j(ai une erreur lors de la compilation la variable "j" n'est pas définit.
Merci de donner la ligne de commande pour compiler chaque programmes, sinon on ne sans sort pas.

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,374 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.