Bonjour, je débute en c. je me suis intéressé au jeu de la vie et ai trouvé un programme de ce jeu sur ce même site. Cependant une partie du programme m'échappe car je ne suis pas encore très à l'aise avec les pointeurs.
Je vous remercie pour votre aide et m'excuse pour les fautes d'orthographe.
La partie que je ne comprends pas est la fonction nb_voisin.
Ci-dessous le code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
        }
    }
}