Bonjour à tous,
Je suis en train de créer un démineur en langage C, j'essaye de réaliser une fonction qui dévoile automatiquement toutes les cases sans bombes à proximité lorsqu'on la sélectionne.

Je regarde donc la case en haut, à droite, en bas et à gauche et je le propage en répétant la fonction. Lorsque j'utilise seulement deux conditions, par exemple haut gauche ou bas gauche. Mais quand je fais des conditions opposées comme haut bas et droite gauche ça plante. Donc la fonction est inutilisable.

Je vous donne 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
 
void caseVide(int x, int y, int grilleValeur[XMAX+2][YMAX+2], int grilleUser[XMAX][YMAX], int *compteurVictoire, int *j)
{
 
 
    //Condition
    //Case du dessus
    if(x>0 && grilleUser[x-1][y]==0) //On regarde si ça ne dépasse pas du tableau et si la case a déjà était dévoilé
    {
        if(grilleValeur[x][y+1]==0) //Je regarde si la case est un 0
        {
            caseVide(x-1,y,grilleValeur,grilleUser,&*compteurVictoire,&*j);//Je répète la fonction
            *j=*j+1;//J'incrément ma boucle de 1;
        }
        grilleUser[x-1][y]=1; //Je dévoile la case
        *compteurVictoire = *compteurVictoire+1; //J'incrémente le compteur de victoire de 1
 
    }
    //Case de droite
    if(y<YMAX-1 && grilleUser[x][y+1]==0)
    {
        if(grilleValeur[x+1][y+2]==0)
        {
            caseVide(x,y+1,grilleValeur,grilleUser,&*compteurVictoire,&*j);
            *j=*j+1;
        }
        grilleUser[x][y+1]=1;
        *compteurVictoire = *compteurVictoire+1;
    }
    //Case du bas
    if(x<XMAX-1 && grilleUser[x+1][y]==0)
    {
        if(grilleValeur[x+2][y+1]==0)
        {
            caseVide(x+1,y,grilleValeur,grilleUser,&*compteurVictoire,&*j);
            *j=*j+1;
        }
        grilleUser[x+1][y]=1;
        *compteurVictoire = *compteurVictoire+1;
    }
    //Case de gauche
    if(y>0 && grilleUser[x][y-1]==0)
    {
        if(grilleValeur[x+1][y]==0)
        {
            caseVide(x,y-1,grilleValeur,grilleUser,&*compteurVictoire,&*j);
            *j=*j+1;
        }
        grilleUser[x][y-1]=1;
        *compteurVictoire = *compteurVictoire+1;
    }
 
}
Cordialement Airox