Le jeu de la vie
Un exemple de structure chainée
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 |
#include <stdio.h> #include <stdlib.h> #include <time.h> int **creation_grille(int x,int y) { int i; int **mat; mat=(int **)malloc(sizeof(int*)*x); for(i=0; i<x; i++) { mat[i]=(int *)calloc(y,sizeof(int)); } return mat; } void initialiser_grille(int **mat,int x,int y) { int i,j; for(i=0; i<x; i++) { for(j=0; j<y; j++) { mat[i][j]=rand()%2; } } } void affiche_grille(int **mat,int x,int y) { int i,j; printf("\nAffichage de la grille :\n\n"); for(j=0; j<y; j++) { for(i=0; i<x; i++) { printf("%3d",mat[i][j]); } printf("\n"); } } int valeur(int **mat,int i, int j,int x,int y) { if(mat[(i+x)%x][(j+y)%y]==0) return 0; return 1; } int taille_voisinage(int **mat,int i,int j,int x,int y) { return valeur(mat,i-1,j-1,x,y)+valeur(mat,i,j-1,x,y)+valeur(mat,i+1,j-1,x,y)+valeur(mat,i-1,j,x,y)+valeur(mat,i+1,j,x,y)+valeur(mat,i-1,j+1,x,y)+valeur(mat,i,j+1,x,y)+valeur(mat,i+1,j+1,x,y); } void next_generation(int **mat1,int **mat2, int x,int y) { int i,j,tv; for(i=0; i<x; i++) { for(j=0; j<y; j++) { tv=taille_voisinage(mat1,i,j,x,y); mat2[i][j]=0; if( (mat1[i][j]==0)&&tv==3 ) mat2[i][j]=1; if( (mat1[i][j]!=0)&&(tv==2||tv==3) ) mat2[i][j]=mat1[i][j]+1; if(mat2[i][j]>99) mat2[i][j]=99; } } } int main() { int **mat1,**mat2; int x=20,y=30, tour=0,freqaff=10; srand(time(NULL)); mat1=creation_grille(x,y); mat2=creation_grille(x,y); initialiser_grille(mat1,x,y); while(1) { if(tour%freqaff==0)affiche_grille(mat1,x,y); if(tour%2==0) { next_generation(mat1,mat2,x,y); } else { next_generation(mat2,mat1,x,y); } tour++; } return 0; } |