celialita
Messages postés17Date d'inscriptiondimanche 17 octobre 2010StatutMembreDernière intervention12 mai 2011
-
25 mars 2011 à 11:50
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 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
| | | |
| | | |
| | | |
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...
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;
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;
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 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