Bonjour,

Je suis en train de créer un « puissance 4 » pour un TP et je ne parviens pas à créer la fonction qui me permettrait de vérifier lorsque la partie est gagnée par l'un des joueurs. Mon cerveau ne fonctionne plus, je pense. Si jamais vous pouvez m'aiguiller un peu…

Voici mon fichier puissance.c

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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#include <stdio.h>
#include <string.h>
#include "puissance4.h"
 
 
 
/*
   affiche la grille de jeu
*/
void afficheGrille(couleur gr[MAX_L][MAX_C],int nbcoupj1,int nbcoupj2, char nom1[], char nom2[])
{
	int i,j;
 
	/* affiche la ligne de titre */
	printf("\n%s %s %s %d %s %s %s %d %s","Joueur 1 [",nom1,"] : ",nbcoupj1,
		" -- Joueur 2 [",nom2,"] : ",nbcoupj2,"\n\n");
 
	/* affiche les lignes de légende */
	printf("%s"," ");
		for (j=0;j<MAX_C;j++) { printf("%s %d"," | ",j); }
	printf("%s"," |\n");
	printf("%s"," ");
 
	/* affiche la ligne de séparateur */
	for (j=0;j<MAX_C;j++) { printf("%s","-----"); }
	printf("%s","---\n");
 
	/* affiche chaque ligne de la grille */
	for(i=MAX_L-1;i>=0;i--)
	{
		printf("%2d",i);
		for (j=0;j<MAX_C;j++)
			printf("%s %c"," | ",(char)gr[i][j]);
		printf("%s"," |\n");
	}
}
/*
  initialise la structure principale d’une partie
*/
void initialise(partie * mapartie)
{
  char temp;
 
  for(int i=0;i<MAX_L;i++)
	{
		for (int j=0;j<MAX_C;j++)
			{
			mapartie->grille[i][j]=aucune;
			}
	}
    printf("%s ", "entrer nom joueur1");
    scanf("%s",mapartie->joueur1.nom);                 //le nom entré par le joueur est stocké dans mapartie.
    printf("\n%s ", "entrer la couleur du joueur1");
    scanf("%s",&temp);                                 //la couleur entrée par le joueur est stocké dans une variable temporaire.
    mapartie->joueur1.couleur_joueur=(couleur) temp;   //le contenu stocké dans la variable temporaire est placé dans mapartie.
    mapartie->nbcp1=0;
 
    printf("\n%s ", "entrer nom joueur2");
    scanf("%s",mapartie->joueur2.nom);                 //le nom entré par le joueur est stocké dans mapartie.
    printf("\n%s ", "entrer la couleur du joueur2");
    scanf("%s",&temp);                                 //la couleur entrée par le joueur est stocké dans une variable temporaire.
    mapartie->joueur2.couleur_joueur=(couleur) temp;   //le contenu stocké dans la variable temporaire est placé dans mapartie.
    mapartie->nbcp2=0;
}
 
/*
   lance une partie
*/
void jouePartie(partie * mapartie)
{
 
int col;                //col sera la colonne entré par le joueur .
int i=0;                //i nous permettera de parcourir la colonne séléctionner par le joueur.
int trouver=0;          //trouver nous aidera à placer la couleur du joueur à un emplacement libre.
 
 
//la condition principale va nous permettre de savoir qui doit jouer selon le compteur des deux joueurs.
	if (mapartie->nbcp2 <= mapartie->nbcp1){
		printf("%s", mapartie->joueur1.nom);
		printf(" deposer votre pion dans une colonne :");
		scanf("%d",&col);
 
 
  //la boucle ci-dessous s'arretera lorsque l'emplacement sera trouver ou que la colonne sera pleine.
  //elle nous permet de parcourir la colonne.
            while(i<MAX_L && !trouver){
 
      //la condition permet de vérifier si la case souhaiter et vide ou non.
	    	if (mapartie->grille[i][col]=aucune){
                mapartie->grille[i][col]= mapartie->joueur1.couleur_joueur;
                trouver=1;
                }
            else{
            i++;
            }
        }
    }
  //on retrouve le même schéma que précedemment pour le joueur 2.
    else{
        printf("%s", mapartie->joueur2.nom);
        printf(" deposer votre pion dans une colonne :");
		scanf("%d",&col);
 
        while(i<MAX_L && !trouver){
 
 
	    	if (mapartie->grille[i][col]=aucune){
                mapartie->grille[i][col]= mapartie->joueur2.couleur_joueur;
                trouver=1;
                }
            else{
                i++;
                }
        }
    }
}
main.c

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
#include <stdlib.h>
#include "puissance4.h"
 
partie mapartie;
 
int main()
{
    printf("Le puissance 4\n");
 
    initialise(&mapartie);
 
    afficheGrille(mapartie.grille,mapartie.nbcp1,mapartie.nbcp2, mapartie.joueur1.nom, mapartie.joueur2.nom);
 
    jouePartie(&mapartie); //faire une boucle (on continue de jouer tant que la partie n'a pas été gagner.
 
    afficheGrille(mapartie.grille,mapartie.nbcp1,mapartie.nbcp2, mapartie.joueur1.nom, mapartie.joueur2.nom);
 
    return 0;
}
et puissance.h

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
#ifndef PUISSANCE4_H_INCLUDED
#define PUISSANCE4_H_INCLUDED
#define MAX_L 6
#define MAX_C 6
#define MAX_COUP 36
 
 
typedef enum {aucune=' ',rouge='R',jaune='J',vert='V',bleu='B' } couleur ;
 
 
typedef struct {
    char nom[40];               // nom du joueur
    couleur couleur_joueur;     // couleur du joueur
} joueur;
 
 
typedef struct {
  couleur grille[MAX_L][MAX_C]; // la grille
  joueur joueur1;               // le joueur 1
  int nbcp1;                    // nb coup joeur 1
  joueur joueur2;               // le joueur 2
  int nbcp2;                    // le nombre de coup du joueur 2
} partie ;
 
 
// procédure d’affichage de la grille (parametres à modifier selon votre structure de partie)
void afficheGrille(couleur gr[MAX_L][MAX_C],int nbcoupj1,int nbcoupj2, char nom1[], char nom2[]);
 
// procédure d’initialisation de d’une partie
void initialise(partie * mapartie) ;
 
// procédure d’initialisation de d’une partie
int agagner(partie * mapartie) ;
 
// procédure d’affichage de la grille
void jouePartie(partie * mapartie);
 
// à compléter avec les fonctions dont vous avez besoin
 
 
#endif // PUISSANCE4_H_INCLUDED