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
| #include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define TAILLE 10
void init_damier(int (*damier)[TAILLE][TAILLE]); //initialisation du damier
void afficher_matrice(int (*damier)[TAILLE][TAILLE]); //affichage du damier
int nb_voisin(int i, int j, int (*damier)[TAILLE][TAILLE]); //comptage du nombre de voisins vivants/morts
void cel_vivante(int* cellule, int nb_voisin); //changement des cellules en fonction du nb voisins
void next_gen(int (*damier)[TAILLE][TAILLE]); //generation suivante
#define VIVANTE 1
#define MORTE 0
int main()
{
int damier[TAILLE][TAILLE];
srand(time(NULL));
init_damier(&damier);
afficher_matrice(&damier);
next_gen(&damier);
afficher_matrice(&damier);
return 0;
}
void init_damier(int (*damier)[TAILLE][TAILLE])
{
int i, j;
for (i = 0; i < TAILLE; ++i) {
for (j = 0; j < TAILLE; ++j) {
if((rand()%100) < 20) {
(*damier)[i][j] = VIVANTE;
} else {
(*damier)[i][j] = MORTE;
}
}
}
}
void afficher_matrice(int (*damier)[TAILLE][TAILLE])
{
int i, j;
for (i = 0; i < TAILLE; ++i) {
for (j = 0; j < TAILLE; ++j) {
if ((*damier)[i][j] == VIVANTE) {
printf("0" );
} else {
printf("-" );
}
}
printf("\n" );
}
printf("\n" );
}
#define MODT(i) ((TAILLE + (i)) % TAILLE)
int nb_voisin(int i, int j, int (*damier)[TAILLE][TAILLE])
{
return (*damier)[MODT(i-1)][MODT(j-1)] + (*damier)[MODT(i-1)][MODT(j)]
+ (*damier)[MODT(i-1)][MODT(j+1)] + (*damier)[MODT(i)][MODT(j-1)]
+ (*damier)[MODT(i)][MODT(j+1)] + (*damier)[MODT(i+1)][MODT(j-1)]
+ (*damier)[MODT(i+1)][MODT(j)] + (*damier)[MODT(i+1)][MODT(j+1)];
}
void cel_vivante(int* cellule, int nb_voisin)
{
if (*cellule == VIVANTE) {
if ((nb_voisin <= 1) || (nb_voisin >=4)) {
*cellule = MORTE;
}
} else {
if (nb_voisin == 3) {
*cellule = VIVANTE;
}
}
}
void next_gen(int (*damier)[TAILLE][TAILLE])
{
int i,j;
for(i = 0; i < TAILLE; ++i) {
for (j = 0; j < TAILLE; ++j) {
cel_vivante(&(*damier)[i][j], nb_voisin(i,j,damier)); //on change la cellule si elle satisfait les conditions
}
}
} |
Partager