Bonjour, je suis en train de coder un programme d'un jeu puissance 4 et il ne me reste plus que un type de vérificationa faire. La vérification des 2 diagonales. Mais rien a faire il ne fonctionne pas et pourtant il devrait!

Dans mon output j'ai à un moment:

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
 
Le prochain joueur est le: rouge.
Entrez le numero de la colonne:
5
|O|O|O|O|O|O|O|O|
|O|O|O|O|O|O|O|O|
|O|O|O|O|O|O|O|O|
|O|O|O|J|R|O|O|O|
|R|O|J|J|J|R|O|R|
|R|J|J|R|J|R|R|J|
|J|R|R|R|J|J|J|R|
Joueur R tabpost J x: 4 y: 3
winner vaut == Ftest
F
win droite1= 2win droite1= 3win droite1= 4
F
Le prochain joueur est le: jaune.
Entrez le numero de la colonne:
Le win = 4 devrait me faire sortir un joueur gagnant mais ce n'est pas le cas.
Dans un de mes test j'avais eu un gagnant mais dans la 2eme diagonale (de même sens) mais je n'ai pas comprit pourquoi à la 2eme horizontale et pas la 1er..

Voici le morceau de 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
 
/* Verifie la diagonale partant de la droite */
int VerifDiagoDroite(int x,int y,char joueur, char tab[nb_ligne][nb_colonne]){
 int cpt=1;
 char stop='F';
 int win=1;
	while(win<4 && x+cpt<8 && y+cpt<7 && stop=='F'){
		if(tab[y+cpt][x+cpt]==joueur){
		cpt++;
		win++;
		printf("win droite1= %d",win); //retirer
		}
		else stop='V';
	}
 cpt=1;
 stop='F';
 while(win<4 && x-cpt>0 && y-cpt>0 && stop=='F'){
	if(tab[y-cpt][x-cpt]==joueur){  //y+cpt et pas -
	cpt++;
	win++;
	printf("win droite2 = %d",win); //retirer
	}
	else stop='V';
	}
 return win;
}
 
/* Verifie la diagonale partant de la gauche */
int VerifDiagoGauche(int x,int y,char joueur, char tab[nb_ligne][nb_colonne]){
 int cpt=1;
 char stop='F';
 int win=1;
 while(win<4 && x-cpt>0 && y+cpt<7 && stop=='F'){
	if(tab[y+cpt][x-cpt]==joueur){
	cpt++;
	win++;
	printf("win gauche1= %d",win); //retirer
	}
	else stop='V';
 }
 cpt=1;
 stop='F';
 while(win<4 && x+cpt<8 && y-cpt>0 && stop=='F'){
	if(tab[y-cpt][x+cpt]==joueur){
	cpt++;
	win++;
	printf("win gauche2= %d",win); //retirer
	}
	else stop='V';
 }
 return win;
}
 
/* Verifie les axes des diagonales */
int VerifDiago(int x,int y,char joueur, char tab[nb_ligne][nb_colonne]){
char victory='F';
int win;
win=VerifDiagoDroite(x,y,joueur,tab);
	if(win<=4)win=VerifDiagoGauche(x,y,joueur,tab);
 
	if (win>=4) victory='V';
return victory;
}
 
/* execute toute les sous-programme de verification du gagnant */
int VerifGagner(int x,int y,char joueur, char tab[nb_ligne][nb_colonne]){
  printf("Joueur %c tabpost %c x: %d y: %d\n",joueur,tab[x][y],x,y);
 char winner;//='F';
 winner=VerifVerticale(x, y,joueur,tab);
 printf("winner vaut == %c",winner);
	if(winner=='F') winner=VerifHoriz(x,y,joueur,tab);
	printf("\n%c\n",winner);
 
	if(winner=='F') winner=VerifDiago(x,y,joueur,tab);
	printf("\n%c\n",winner);
return winner;
}
Comme on peut le voir dans le code si win=4 je sort et je renvoi victory
Mon code comprend déjà les vérif verticale et horizontale parfaitement fonctionnelle. C'est la dernière erreur qui m’empêche de faire les teste et boucler ce devoir interminable.
Merci d'avance