[C] Jeux du morpion.

Résolu/Fermé
niernier Messages postés 239 Date d'inscription mercredi 8 octobre 2008 Statut Membre Dernière intervention 1 mars 2014 - 29 janv. 2010 à 21:23
niernier Messages postés 239 Date d'inscription mercredi 8 octobre 2008 Statut Membre Dernière intervention 1 mars 2014 - 30 janv. 2010 à 20:19
Bonjour,
J'ai essayé de programmer un jeu du morpion en langage C, mais voilà, j'ai deux ou trois petis bug que je n'arrive pas à corriger. Si cela ne vous dérange pas trop, je voudrais que vous m'aidiez à réduire au néant les bugs dans mon programme.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int choixJ1(char Joueur1[]); //permet au joueur de saisir une case de jeu
int choixJ2(char Joueur2[]); //permet au joueur de saisir une case de jeu
void afficheTableau(char carre[]); //affiche la grille de jeu
char verifierChoix(int choixCase, char carre[], int joueurCommence, int rejouer); /*verifie si la case est déjà jouée et la remplace par X ou par 0*/
int verifierGagne(char carre[], int gagne); //verifie si il y a 3 X ou 3 0 alignés et si c'est le cas dis quel joueur à gagné

int main()
{
int rejouer = 0, i = 0;
int choixCase = 0;
int gagne = 0; // variable qui lorsque un joueur gagne est mise a 1 et arrête le jeu
char carre[9] = {'1','2','3','4','5','6','7','8','9'}; //grille de jeu
char Joueur1[50] = {0}; // char contenant le nom du joueur 1
char Joueur2[50] = {0}; // char contenant le nom du joueur 2
srand(time(NULL));
int MIN = 1, MAX = 2, joueurCommence = (rand() % (MAX - MIN + 1)) + MIN; //tirage au sort du joueur qui commence.
	
	printf("================Bienvenue dans le jeu du pendu !================\n\n");
	printf("Veuillez saisir le nom du joueur 1 : ");
	scanf("%s", Joueur1);
	printf("\n\nMaintenant celui du joueur 2 : ");
	scanf("%s", Joueur2);
	printf("\n\nLe jeu peut commencer !");

 afficheTableau(carre); // affiche la grille de jeu.

while(gagne != 1) //boucle principale du jeu
{
  do 
   {
     rejouer = 0;
	if(joueurCommence == 1)	// si le joueur 1 a été tiré au sort
        choixJ1(Joueur1); //on récupère la saisie au de la case à jouer.
	else //si le joueur 2 a été tiré au sort
	choixJ2(Joueur2); //on récupère la saisie de la case à jouer
		
	verifierChoix(choixCase, carre, joueurCommence, rejouer); //on appelle la fonction verifierChoix.
        
      }while(rejouer != 0); //on recommence cela tant que la case jouée ne l'est pas déjà

afficheTableau(carre); // on réaffiche la grille avec les changements.
verifierGagne(carre, gagne); //on vérifie si le joueur a gagné  

if(gagne == 1 && joueurCommence == 1)//si le joueur 1 a gagné
{
	printf("\n\nBravo %s, vous avez gagne !", Joueur1);
	break;
}
else if(gagne == 1 && joueurCommence == 2)//si le joueur 2 a gagné
{
	printf("\n\nBravo %s, vous avez gagne !", Joueur2);
	break;
}

i++;

if(i==9)//si toutes les cases sont jouées et qu'il n'y a pas de gagnant.
{
  printf("\nMatch nul, dommage.");
  break;
}

if(joueurCommence == 1)// on change l'ordre des joueurs
{
 joueurCommence == 2;
}
else if(joueurCommence == 2)
{
 joueurCommence == 1;
}
}

printf("\n\nAu revoir !");
return 0;
}

void afficheTableau(char carre[]) 
{
printf("&#9487;&#9473;&#9473;&#9473;&#9473;&#9523;&#9473;&#9473;&#9473;&#9473;&#9523;&#9473;&#9473;&#9473;&#9473;&#9491;\n");
        printf("&#9475; %c  &#9475; %c  &#9475; %c  &#9475;\n", carre[0], carre[1], carre[2]);
        printf("&#9507;&#9473;&#9473;&#9473;&#9473;&#9547;&#9473;&#9473;&#9473;&#9473;&#9547;&#9473;&#9473;&#9473;&#9473;&#9515;\n");
        printf("&#9475; %c  &#9475; %c  &#9475; %c  &#9475;\n", carre[3], carre[4], carre[5]);
        printf("&#9507;&#9473;&#9473;&#9473;&#9473;&#9547;&#9473;&#9473;&#9473;&#9473;&#9547;&#9473;&#9473;&#9473;&#9473;&#9515;\n");
        printf("&#9475; %c  &#9475; %c  &#9475; %c  &#9475;\n", carre[6], carre[7], carre[8]);
        printf("&#9495;&#9473;&#9473;&#9473;&#9473;&#9531;&#9473;&#9473;&#9473;&#9473;&#9531;&#9473;&#9473;&#9473;&#9473;&#9499;\n");
}

int choixJ1(char Joueur1[])
{
 int choixCase = 0;

do {
 printf("%s choisissez la case ou vous voulez jouer : ", Joueur1);
 scanf("%d", &choixCase);
}while(choixCase < 1 || choixCase > 9);

return choixCase;
}

int choixJ2(char Joueur2[])
{
 int choixCase = 0;

do {
 printf("%s choisissez la case ou vous voulez jouer : ", Joueur2);
 scanf("%d", &choixCase);
}while(choixCase < 1 || choixCase > 9);
return choixCase;
}

char verifierChoix(int choixCase, char carre[], int joueurCommence, int rejouer)
{
 int i = 0;
 int j = 1;
 for(i = 0 ; i < 9 ; i++)
 {
  if(choixCase == j && carre[i] != 1 && joueurCommence == 1)
   {
    carre[i] = 'X';
    j++;
	rejouer = 0;
   }
  else if(choixCase == j && carre[i] != 1 && joueurCommence == 2)
   {
    carre[i] = '0';
    j++;
	rejouer = 0;
   }
   else
   {
   rejouer = 1;
   return rejouer;
   }
  }
return carre[];
}

int verifierGagne(char carre[], int gagne)
{
	if( (carre[0] == carre[1] && carre[0] == carre[2]) || (carre[3] == carre[4] && carre[3] == carre[5]) ||
        (carre[6] == carre[7] && carre[6] == carre[8]) || (carre[0] == carre[3] && carre[0] == carre[6]) ||
        (carre[1] == carre[4] && carre[1] == carre[7]) || (carre[2] == carre[5] && carre[2] == carre[8]) ||
        (carre[0] == carre[4] && carre[0] == carre[8]) || (carre[2] == carre[4] && carre[2] == carre[6])  )
   {
	   gagne = 1;
   }
   else
   {
	   gagne = 0;
   }
return gagne;
}


Voilà, voilà, si vous n'y arrivez pas tant pis je me débrouillerai autrement. De plus j'accepte toutes les remarques (mêmes négatives) sur l'ensemble de mon programme (s'il pourrait être amélioré et comment,...).

Et bien en attente d'une réponse je vous remercie !

PS : les erreurs sont :
-main.c:69: attention : déclaration sasn effet
-main.c:73: attention : déclaration sasn effet
-main.c:139: erreur: expected expression before ‘]’ token
-main.c:140: attention : control reaches end of non-void function

8 réponses

loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148
29 janv. 2010 à 21:35
joueurCommence == 2;
Inutile ou plus probablement erreur d'inattention.

char verifierChoix(int choixCase, char carre[], int joueurCommence, int rejouer)
return carre[];

carre[] n'est pas un caractère !

Bonne continuation.
0