PROGRAMME C : TIC TAC TOE

Résolu
celialita Messages postés 17 Date d'inscription dimanche 17 octobre 2010 Statut Membre Dernière intervention 12 mai 2011 - 25 mars 2011 à 11:50
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 - 29 mars 2011 à 14:34
Bonjour ,
je suis débutante en programmation C et je voudrais programmer un tic tac toe mais je galere un peu .

donc il s'agit de declarer une variable plateau 3X3 dans le main et de l'initialiser en indiquant que less cases sont vides.

=>
int main()
{
int Plateau[3][3]=({},{},{});

puis, il me faut ecrire une fonction AFFICHE qui nous permet d'avoir un plateau du genre
| | | |
| | | |
| | | |

=>
void Affiche ( int Plateau[3][3]);
{
printf("| %d | %d | %d |\n"Plateau[0][0],Plateau[0][1],Plateau[0][2]);
printf("| %d | %d | %d |\n"Plateau[1][0],Plateau[1][1],Plateau[1][2]);
printf("| %d | %d | %d |\n"Plateau[2][0],Plateau[2][1],Plateau[2][2]);
}

il faut ensuite ecrire une fonction QUELCASE? qui demande au joueur de saisir les coordonnées ( ligne,colonne) de la case , et qui marque la case d'un ( 1 ou 2 suivant le joueur) si la case est vide ... sinon recommencer.

=>
void QuelCoup? ( int Plateau[3][3], int joueur);
{
int x;
int y;
printf ("joueur %d choisissez les coordonnées de votre case \n",joueur);
scandf ("%d,%d",&x,&y);
if ????? et la je sais pas comment exprimer le "si la case est prise alors recommencer sinon marquer...


ensuite il faut ecrire une fonction LIGNE , COLONNE ET DIAGONALE qui permettent de savoir si la ligne colonne ou diagonale sont entierement remplies par le meme joueur

puis la fonction " GAGNE!! et puis une fonction qui indique si toutes les cases sont remplies...

est ce que quelqu un peut m'aider???

23 réponses

celialita Messages postés 17 Date d'inscription dimanche 17 octobre 2010 Statut Membre Dernière intervention 12 mai 2011 1
29 mars 2011 à 11:50
#include <stdio.h>
#include <stdlib.h>

void AFFICHE(int T[3][3]) /
{
printf("|%d|%d|%d|\n",T[0][0],T[0][1],T[0][2]);
printf("|%d|%d|%d|\n",T[1][0],T[1][1],T[1][2]);
printf("|%d|%d|%d|\n",T[2][0],T[2][1],T[2][2]);
}

void QUELCOUP(int Plateau[3][3],int joueur)
{
int x;
int y;
printf("joueur %d saisissez les coordonnees de la case:",joueur);
scanf("%d %d",&x,&y);
while ((x<0)&&(x>2)&&(y<0)&&(y>2)&&(Plateau[x][y]))
{
printf("code invalide! recommencez!\n");
scanf("%d,%d",&x,&y);
}
Plateau[x][y]=joueur;
}

int LIGNE(int Plateau[3][3],int joueur)
{
int i;
int j;
int s=0;
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
{
if (Plateau[i][j]==joueur)
s++;
}
if (s==3)
return 1;
}
return 0;
}

int COLONNE(int Plateau[3][3],int joueur)
{
int i;
int j;
int s=0;
for (j=0;j<3;j++)
{
for (i=0;i<3;i++)
{
if (Plateau[i][j]==joueur)
s++;
}
if (s==3)
return 1;
}
return 0;
}

int DIAGONALE(int Plateau[3][3],int joueur)
{
{
if (((Plateau[0][0])&&(Plateau[1][1])&&(Plateau[2][2]))||((Plateau[0][2])&&(Plateau[1][1])&&(Plateau[2][0])))

return 1;
}
return 0;
}

int GAGNE(int Plateau[3][3],int joueur)
{
{
if ((LIGNE(Plateau,joueur)==1)||(COLONNE(Plateau,joueur)==1)||(DIAGONALE(Plateau,joueur)==1))
return 1;
}
return 0;
}

int PlateauPlein(int Plateau[3][3])
{
int i;
int j;
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
{
if (Plateau[i][j]!=0)
return 1;
}
}
return 0;
}

int main()
{
int Plateau[3][3]={{},{},{}};
int i;
int joueur;
for (i=1;i<10;i++)
{
if ( i%2!=0)
joueur=1;
else
joueur=2;
AFFICHE(Plateau);
QUELCOUP(Plateau,joueur);
if (GAGNE(Plateau,joueur)==1)
{
printf("BRAVO!! Le joueur %d est le meilleur\n",joueur);
return 0;
}
}
if (PlateauPlein(Plateau)==1)
{
printf("EGALITÉ!!\n");
return 0;

}
return 0;
}
0
celialita Messages postés 17 Date d'inscription dimanche 17 octobre 2010 Statut Membre Dernière intervention 12 mai 2011 1
29 mars 2011 à 11:50
#include <stdio.h>
#include <stdlib.h>

void AFFICHE(int T[3][3]) /
{
printf("|%d|%d|%d|\n",T[0][0],T[0][1],T[0][2]);
printf("|%d|%d|%d|\n",T[1][0],T[1][1],T[1][2]);
printf("|%d|%d|%d|\n",T[2][0],T[2][1],T[2][2]);
}

void QUELCOUP(int Plateau[3][3],int joueur)
{
int x;
int y;
printf("joueur %d saisissez les coordonnees de la case:",joueur);
scanf("%d %d",&x,&y);
while ((x<0)&&(x>2)&&(y<0)&&(y>2)&&(Plateau[x][y]))
{
printf("code invalide! recommencez!\n");
scanf("%d,%d",&x,&y);
}
Plateau[x][y]=joueur;
}

int LIGNE(int Plateau[3][3],int joueur)
{
int i;
int j;
int s=0;
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
{
if (Plateau[i][j]==joueur)
s++;
}
if (s==3)
return 1;
}
return 0;
}

int COLONNE(int Plateau[3][3],int joueur)
{
int i;
int j;
int s=0;
for (j=0;j<3;j++)
{
for (i=0;i<3;i++)
{
if (Plateau[i][j]==joueur)
s++;
}
if (s==3)
return 1;
}
return 0;
}

int DIAGONALE(int Plateau[3][3],int joueur)
{
{
if (((Plateau[0][0])&&(Plateau[1][1])&&(Plateau[2][2]))||((Plateau[0][2])&&(Plateau[1][1])&&(Plateau[2][0])))

return 1;
}
return 0;
}

int GAGNE(int Plateau[3][3],int joueur)
{
{
if ((LIGNE(Plateau,joueur)==1)||(COLONNE(Plateau,joueur)==1)||(DIAGONALE(Plateau,joueur)==1))
return 1;
}
return 0;
}

int PlateauPlein(int Plateau[3][3])
{
int i;
int j;
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
{
if (Plateau[i][j]!=0)
return 1;
}
}
return 0;
}

int main()
{
int Plateau[3][3]={{},{},{}};
int i;
int joueur;
for (i=1;i<10;i++)
{
if ( i%2!=0)
joueur=1;
else
joueur=2;
AFFICHE(Plateau);
QUELCOUP(Plateau,joueur);
if (GAGNE(Plateau,joueur)==1)
{
printf("BRAVO!! Le joueur %d est le meilleur\n",joueur);
return 0;
}
}
if (PlateauPlein(Plateau)==1)
{
printf("EGALITÉ!!\n");
return 0;

}
return 0;
}
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
29 mars 2011 à 14:34
affiche => Ok
quelcoup => Ok
ligne => ok, mais mettre s=0 entre la 1ere et la 2eme boucle, sinon tu compteras aussi les lignes d'avant
colonne => ok, mais mettre s=0 entre la 1ere et la 2eme boucle, sinon tu compteras aussi les colonnes d'avant
diagonale => Le principe est bon, mais tu oublies de prendre en compte le "joueur", donc la fonction n'a pas le bon comportement
Gagne => Ok
PlateauPlein => Faux, mais tu n'es pas très loin. Il faux inverser ta logique. Retourner 0 si tu trouves une seul case vide, et retourner 1 si tu as tout parcouru sans trouver de cases vides.

Je te laisse corriger ce qu'il manque, mais tu as bien avancé.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
Rejoignez-nous