Bonjour,
J'ai crée un programme en langage C pour le jeu du morpion. Mais quand je l'exécute, il y a toujours écrit que la case a déjà été remplie. Est-ce que quelqu'un voit ce que j'ai fait faux ?
Merci beaucoup d'avance pour vos réponses
Voici mon programme :
#include <stdio.h>
#define nblignes 3
#define nbcolonnes 3
char grille[nblignes][nbcolonnes];
/*Initialisation de la grille du morpion a vide : */
void initialisergrille(char grille[nblignes][nbcolonnes])
{
int i, j ;
for (i=0 ; i<nblignes ; i++)
{
for (j=0 ; j<nbcolonnes ; j++)
{
grille[i][j] = ' ' ;
}
}
}
/*Affichage de la grille du morpion : */
void affichergrille(char grille[nblignes][nbcolonnes])
{
int i, j ;
for (i=0 ; i<nblignes ; i++)
{
for (j=0 ; j<(nbcolonnes) ; j++)
{
printf("%c", grille[i][j]) ;
printf("|") ;
}
printf("\n") ;
printf("- - -\n") ;
}
return ;
}
/*Saisie des coordonnees du symbole a mettre sur la grille. Si les coordonnees
sont en dehors de la grille ou si la case a deja ete remplie, la saisie est
refusee, un message d'erreur s'affiche et le joueur doit rejouer. */
void mettresymbole(char symbole, char grille[nblignes][nbcolonnes])
{
int ligne, colonne ;
printf("Veuillez donner les numeros de la ligne et de la colonne :") ;
do
{
scanf_s("%i %i", &ligne, &colonne) ;
if ((ligne>0) && (ligne<=nblignes) && (colonne>0) && (colonne<=nbcolonnes))
{
ligne-- ; /*pour etre compatible avec les indices du tableau*/
colonne-- ;
if (grille[ligne][colonne]!=' ')
printf("La case a deja ete remplie. Veuillez en choisir une autre :") ;
else { grille[ligne][colonne]=symbole ;
if (symbole=='X') {symbole='O' ; }
else {symbole='X' ; }
}
}
else printf("Indice de ligne ou colonne incorrect. Veuillez resaisir :") ;
} while(grille[ligne][colonne]!=' ') ;
}
/*Test pour voir si l'un des joueurs a gagne : */
int testgagnant(char grille[nblignes][nbcolonnes], char symbole)
{
int i, j, somme, gagne ;
somme = 0 ;
gagne = 0 ;
for (i=0 ; i<nblignes ; i++)
{
for (j=0 ; j<nbcolonnes ; j++)
{
somme+=grille[i][j] ;
}
if((somme==237) || (somme==264))
{ gagne = 1 ; }
}
for(j=0 ; j<nbcolonnes ; j++)
{
for(i=0 ; i<nblignes ; i++)
{
somme+=grille[i][j] ;
}
if((somme==237) || (somme==264))
{ gagne = 1 ; }
}
if(grille[0][0] + grille[1][1] + grille[2][2] == 237 || grille[0][0] + grille[1][1] + grille[2][2] == 264)
{ gagne = 1 ; }
if(grille[0][2] + grille[1][1] + grille[2][0] == 237 || grille[0][2] + grille[1][1] + grille[2][0] == 264)
{ gagne = 1 ; }
if (gagne==1)
{ printf("Felicitations au joueur ayant les ") ;
if(symbole=='X')
printf("X") ;
else
printf("O") ;
printf("qui a gagne.\n") ;
}
/* Test si la grille est pleine :*/
if(gagne==0){
for(i=0 ; i<nblignes ; i++)
{
for(j=0 ; j<= nbcolonnes ; j++)
{
if(grille[i][j] != ' ')
gagne=2 ;
printf("Aucun des 2 joueurs n'a gagne") ;
}
}
}
return gagne ;
}
void main()
{
char grille[nblignes][nbcolonnes] ;
char symbole ;
int gagne ;
initialisergrille(grille) ;
affichergrille(grille) ;
printf("Veuillez choisir votre symbole, O ou X :") ;
scanf("%c", &symbole) ;
do
{ mettresymbole(symbole, grille) ;
affichergrille(grille);
testgagnant(grille, symbole) ;
}
while(gagne=0) ;
}
