begin process at 2010 03 14 01:55:31
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

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

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


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
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 :3 037

Auteur : pornik

Ecrire un message privé
Site perso
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..


 Sources de la même categorie

Source avec Zip Source avec une capture ALGORITHME DE TRI D'UN TABLEAU PAR ORDRE CROISSANT OU DÉCROI... par Thuzhen
Source avec une capture CALCUL DE VARIANCE par Minilogus
Source avec une capture GÉNÉRATEUR DE CLÉS SUR 26 DIGITS AU FORMAT HEXADÉCIMAL par besilent
Source avec Zip Source avec une capture ALGORITHME DE CRYPTAGE/DECRYPTAGE par besilent
Source avec une capture CALCUL D'INCERTITUDE par Minilogus

Commentaires et avis

Commentaire de pornik le 16/12/2001 14:17:27

goldeneye&gt; vala t contant pov type?

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!)

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


Appels d'offres

Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,499 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales