Partage
  • Partager sur Facebook
  • Partager sur Twitter

j'ai un petit problem

program morpion en c++(j'arrive pas a afficher les gagnants

22 mai 2007 à 10:41:54

#include <cstdlib>
#include <iostream>
#include <stdio.h>

using namespace std;

struct tableau
{
int tabs[3][3];
};


tableau morpion;
/* Initialise la grille du morpion */

void initialisation()
{
int g,h;
for (g=0;g<3;g++) /* création et initilisation d'un tableau[3][3] 3 lignes 3 colonnes */
{
for (h=0;h<3;h++)
{
morpion.tabs[g][h]=0; /* tableau vide */
}
}
}


/* Affiche les X et O sur la grille*/

void affiche()
{
int g,h;

for (g=0;g<3;g++)
{
if (g==0) /* affiche le premier séparateur entre chaque colonne si première colonne */
{
printf (" --------------------------\n");
}

for (h=0;h<3;h++)
{
if (h==0)
{
printf("| ");
}

switch (morpion.tabs[g][h]) /* on associe ici pour chaque valeur des cases "X","O"," ",*/
{ /* joueur 1 = 1 ===> X */
case 0: /* joueur 2 =-1 ===> O */
printf(" "); /* cas non joué = 0 ===> rien */
break;
case 1:
printf("X");
break;
case -1:
printf("O");
break;
}
printf (" | "); /* affiche le séparateur entre chaque valeur */
}
printf (" \n --------------------------\n"); /* affichage du séparateur entre ligne */
}
}

/* a ce stade nous avons le tableau qui apparait avec dans chaque case soit X , O , " " ,
X est associé au joueur 1 ==> 1
O est associé au joueur 2 ==> -1
" " signifie aucune case joué ==> 0
*/


/* Choix des cases par joueurs*/

tableau placerpions(tableau base,int joueur)
{
int g,h;
int jouerbien;

if (joueur ==1)
{
jouerbien=1;
while( jouerbien == 1)
{
printf("\n Joueur 1 choisir case (ligne & colonne): \n\n"); /* demande au joueur 1 de saisir la case ou il veut jouer */
scanf ("%d",&g); /* saisi ligne */
scanf("%d",&h);

if((base.tabs[g-1][h-1]==0) && (h<= 3) && (g <= 3))
{
base.tabs[g-1][h-1]=1;
jouerbien=0;
}
else
{
printf("\n case prise rejouer \n\n ");
jouerbien=1;
}
}
}
else
{
jouerbien=1;
while( jouerbien == 1)
{
printf("\n joueur 2 choisir case (ligne , colonne): \n\n"); /* demande au joeur 2 de saisir la case ou il veut jouer */
scanf("%d",&g); /* saisi ligne */
scanf("%d",&h);

if((base.tabs[g-1][h-1]==0) && (g <=3) && (h<=3))
{
base.tabs[g-1][h-1]=-1;
jouerbien=0;
}
else
{
printf("\n case prise rejouer \n\n ");
jouerbien=1;
}
}
}
return base; /* renvoie base avec le nouveau tableau */
}


int testgagnant(tableau tabC)
{
int leGagnant = 0;

if ( ((tabC.tabs[0][0] + tabC.tabs[0][1] + tabC.tabs[0][2]) ==3 ||
(tabC.tabs[1][0] + tabC.tabs[1][1] + tabC.tabs[1][2]) ==3||
(tabC.tabs[2][0] + tabC.tabs[2][1] + tabC.tabs[2][2]) ==3||
(tabC.tabs[0][0] + tabC.tabs[1][0] + tabC.tabs[2][0]) ==3||
(tabC.tabs[0][1] + tabC.tabs[1][1] + tabC.tabs[2][1]) ==3||
(tabC.tabs[0][2] + tabC.tabs[1][2] + tabC.tabs[2][2]) ==3||
(tabC.tabs[0][0] + tabC.tabs[1][1] + tabC.tabs[2][2]) ==3||
(tabC.tabs[2][0] + tabC.tabs[1][1] + tabC.tabs[0][2])) == 3 )
{
leGagnant = 1;
}



if ( ((tabC.tabs[0][0] + tabC.tabs[0][1] + tabC.tabs[0][2]) ==-3||
(tabC.tabs[1][0] + tabC.tabs[1][1] + tabC.tabs[1][2]) ==-3||
(tabC.tabs[2][0] + tabC.tabs[2][1] + tabC.tabs[2][2]) ==-3||
(tabC.tabs[0][0] + tabC.tabs[1][0] + tabC.tabs[2][0]) ==-3||
(tabC.tabs[0][1] + tabC.tabs[1][1] + tabC.tabs[2][1]) ==-3||
(tabC.tabs[0][2] + tabC.tabs[1][2] + tabC.tabs[2][2]) ==-3||
(tabC.tabs[0][0] + tabC.tabs[1][1] + tabC.tabs[2][2]) ==-3||
(tabC.tabs[2][0] + tabC.tabs[1][1] + tabC.tabs[0][2])) == -3 )
{
leGagnant=2;
}
int compteur=0; //on initialise une variable compteur à 0
for (int g=0;g<3;g++)
{
for (int h=0;h<3;h++)
{
if (tabC.tabs[g][h]!=0)
{
compteur++;
}
}
}
if (compteur ==9 && leGagnant!=1 && leGagnant!=2)
{
leGagnant=3;
}

return leGagnant;
}

void affichegagnant(int gagnant)
{
switch(gagnant)
{
case 0 :
break;
case 1 :
printf(" \n bravo joueur 1 gagne \n\n ");
break;
case 2 :
printf(" \n bravo joueur 2 gagne \n\n" );
break;
case 3:
printf("\n personne n'a gagne\n\n");
break;
}
}

/* Fonction principale , appelle les diffèrentes fonctions */

int main(int argc, char *argv[])
{

int monjoueur =0;
int x=0;

printf("\n*****************************************\n\n");
printf("\n******Bienvenue dans le Jeu Morpion******\n\n");
printf("\n*****************************************\n\n");
initialisation();
affiche();

do /* boucle test des joueurs, nous permet de jouer avec les joueurs 1 et 2 à la suite l'un de l'autre */
{
if (monjoueur == 0 || monjoueur ==2) /* verifie si le joueur 1 doit jouer */
{
monjoueur = 1;
}


else /* sinon joueur 2 joue */
{
monjoueur= 2;
}

morpion = placerpions(morpion,monjoueur); /* appelle la fonction demande de placer pions puis affiche le nouveau tableau */
affiche(); /* avec la position du pions */
x++;
int monGagnant = 0;
monGagnant = testgagnant(morpion);

affichegagnant(monGagnant);
}
while(x<9);

system("PAUSE");
return EXIT_SUCCESS;
}
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
22 mai 2007 à 10:59:32

Salut,

plusieurs problèmes :
1. Utilise les balises de code (c'est illisible !)
2. ici, on est dans le forum C++ alors que ton programme est écrit en C (en fait tu mélanges un peu C et C++ dans ton prog !

Xav57
  • Partager sur Facebook
  • Partager sur Twitter
22 mai 2007 à 11:15:11

if ( ((tabC.tabs[0][0] + tabC.tabs[0][1] + tabC.tabs[0][2]) ==-3||
(tabC.tabs[1][0] + tabC.tabs[1][1] + tabC.tabs[1][2]) ==-3||
(tabC.tabs[2][0] + tabC.tabs[2][1] + tabC.tabs[2][2]) ==-3||
(tabC.tabs[0][0] + tabC.tabs[1][0] + tabC.tabs[2][0]) ==-3||
(tabC.tabs[0][1] + tabC.tabs[1][1] + tabC.tabs[2][1]) ==-3||
(tabC.tabs[0][2] + tabC.tabs[1][2] + tabC.tabs[2][2]) ==-3||
(tabC.tabs[0][0] + tabC.tabs[1][1] + tabC.tabs[2][2]) ==-3||
(tabC.tabs[2][0] + tabC.tabs[1][1] + tabC.tabs[0][2])) == -3 )


Avec des boucles ça serait surement plus beau.
En C++, bien que ce soit possible, mieux vaut éviter d'utiliser printf & co; cout, cin cerr sont pas là pour faire joli.
Sinon un petit lien pour un morpion en _C++_, avec la SDL : http://fearyourself.developpez.com/tutoriel/sdl/morpion/
  • Partager sur Facebook
  • Partager sur Twitter