Avis + aide sur code pour jeu du Morpion
Alcooline
-
Alcooline -
Alcooline -
Bonjour !
J'ai commencé un petit projet qui consiste a créer un jeu du morpion en console. J'ai cependant rencontré quelques petits problèmes de compilation. Je vous poste le code, commenté ; je signale en dessous du code la ligne et le type du problème. J'aimerais aussi par la suite recevoir vos avis sur mon code ! Merci d'avance.
<code type="c">
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void remplir(int tableau[]); /* Qui sert à remplir le tableau donc, avec les numéros correspondant aux nombres de 0 a 8 dans la table ASCII.
J'avais la flem de les écrire a la main :) Et je les mets sous cette forme car je vais devoir afficher des 'X' et des 'O', ça sera donc plus facil pour la suite */
int comparer(int tableau[][], int caractere); /* Fonction qui sert à vérifier que personne n'a encore gagné*/
void transformer(int choix); /* Transforme le choix de l'utilisateur en numéro correspondant à ceux de la table ASCII, encore une fois par souci de facilité, cette fois ci pour les comparaisons. En effet 8 est différent de 48*/
int main()
{
// Declaration des variables
int i = 0, choix = 0, nombreTour = 0, verifTabO, verifTabX;
int solutions[8][3] = {{0,1,2},{3,4,5},{6,7,8},{0,3,6},{1,4,7},{2,5,8},{0,4,8},{2,4,6}}; // Tableau 2D qui correspond aux "groupes gagnants"
int grille[9] = {0};
remplir(grille);
//On donne à ces variables la valeur retournée par la fonction, pour éviter de rappeler celle-ci tout le temps
verifTabO = comparer(solutions, 79);
verifTabX = comparer(solutions, 88);
printf("0 | 1 | 2 |\n3 | 4 | 5 |\n6 | 7 | 8 |\n"); // Grille de départ
do
{
do
{
printf("Joueur 1, veuillez choisir une case : ");
scanf("%d", &choix);
} while(choix < 0 || choix > 8); // Ceci pour éviter que l'utilisateur ne choisisse un nombre qui ne figure pas dans la grille
transformer(choix);// On transforme le nombre tapé en nombre de la table ASCII pour comparer aisément ci-dessous
for(i = 0; i < 9 ; i++)
{
if(choix == grille[i])
grille[i] = 79;// 79 équivaut à la lettre 'O' dans la table ASCII
printf("%c | ", grille[i]);//On affiche les caractères équivalents aux nombres de la table ASCII
if(i == 2 || i == 5) // On revient à la ligne à ces valeurs pour que la grille ait une forme de grille :)
printf("\n");
}
nombreTour++; //Il y aura forcément 9 tours maximum, vu que la grille est composée de 9 cases
if(!verifTabO || !verifTabX || nombreTour != 9)//On refait la même chose pour le joueur 2, à condition que le jeu ne soit pas terminé...
{
do
{
printf("Joueur 2, veuillez choisir une case :");
scanf("%d", &choix);
} while(choix < 0 || choix > 8);
for(i = 0; i < 9 ; i++)
{
if(choix == grille[i])
grille[i] = 88;//... à l'exception qu'on met ici le nombre équivalent à la lettre 'X'
printf("%c | ", grille[i]);
if(i == 2 || i == 5)
printf("\n");
}
nombreTour++;
}
} while(verifTabO != 1 || verifTabX != 1 || nombreTour != 9);// Et tout ceci, tant qu'aucune de ces trois conditions n'est vérifiée
if(verifTabO)
printf("C'est le joueur 1 qui a gagné !\n");
else if(verifTabX)
printf("C'est le joueur 2 qui a gagné !\n");
else
printf("Il y a eu match nul !\n");
return 0;
}
void remplir(int tableau[])
{
int i, nombre = 48;
for(i = 0; i < 9 ; i++)
{
tableau[i] = nombre;
nombre++;
}
}
int comparer(int tableau[][], int caractere)
{
/* Ici, on parcourt chaque case du tableau 2D, et à chaque fois que tableau[i][j] == caractere (donc à 'X' ou 'O'), on incrémente le compteur. S'il est égal à 3, c'est que les trois cases d'un des membres i du tableau sont des 'X' ou des 'O' et donc il y a un gagnant */
int i, j, compteur = 0;
for(i = 0; i < 8 ; i++)
{
for(j = 0; j < 3; j++)
{
if(tableau[i][j] == caractere)
compteur++;
if(compteur == 3)
return 1;
}
compteur = 0;
}
return 0;
}
void transformer(int choix)
{
int i, tab[] = {48,49,50,51,52,53,54,55,56};
for(i = 0; i < 9 ; i++)
{
if(choix == i)
choix = tab[i];
}
}
</code>
Les problèmes :
<code type="console">
morpion.c:7: error: array type has incomplete element type
morpion.c: In function `main':
morpion.c:21: error: type of formal parameter 1 is incomplete
morpion.c:22: error: type of formal parameter 1 is incomplete
morpion.c: At top level:
morpion.c:86: error: array type has incomplete element type
</code>
J'ai commencé un petit projet qui consiste a créer un jeu du morpion en console. J'ai cependant rencontré quelques petits problèmes de compilation. Je vous poste le code, commenté ; je signale en dessous du code la ligne et le type du problème. J'aimerais aussi par la suite recevoir vos avis sur mon code ! Merci d'avance.
<code type="c">
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void remplir(int tableau[]); /* Qui sert à remplir le tableau donc, avec les numéros correspondant aux nombres de 0 a 8 dans la table ASCII.
J'avais la flem de les écrire a la main :) Et je les mets sous cette forme car je vais devoir afficher des 'X' et des 'O', ça sera donc plus facil pour la suite */
int comparer(int tableau[][], int caractere); /* Fonction qui sert à vérifier que personne n'a encore gagné*/
void transformer(int choix); /* Transforme le choix de l'utilisateur en numéro correspondant à ceux de la table ASCII, encore une fois par souci de facilité, cette fois ci pour les comparaisons. En effet 8 est différent de 48*/
int main()
{
// Declaration des variables
int i = 0, choix = 0, nombreTour = 0, verifTabO, verifTabX;
int solutions[8][3] = {{0,1,2},{3,4,5},{6,7,8},{0,3,6},{1,4,7},{2,5,8},{0,4,8},{2,4,6}}; // Tableau 2D qui correspond aux "groupes gagnants"
int grille[9] = {0};
remplir(grille);
//On donne à ces variables la valeur retournée par la fonction, pour éviter de rappeler celle-ci tout le temps
verifTabO = comparer(solutions, 79);
verifTabX = comparer(solutions, 88);
printf("0 | 1 | 2 |\n3 | 4 | 5 |\n6 | 7 | 8 |\n"); // Grille de départ
do
{
do
{
printf("Joueur 1, veuillez choisir une case : ");
scanf("%d", &choix);
} while(choix < 0 || choix > 8); // Ceci pour éviter que l'utilisateur ne choisisse un nombre qui ne figure pas dans la grille
transformer(choix);// On transforme le nombre tapé en nombre de la table ASCII pour comparer aisément ci-dessous
for(i = 0; i < 9 ; i++)
{
if(choix == grille[i])
grille[i] = 79;// 79 équivaut à la lettre 'O' dans la table ASCII
printf("%c | ", grille[i]);//On affiche les caractères équivalents aux nombres de la table ASCII
if(i == 2 || i == 5) // On revient à la ligne à ces valeurs pour que la grille ait une forme de grille :)
printf("\n");
}
nombreTour++; //Il y aura forcément 9 tours maximum, vu que la grille est composée de 9 cases
if(!verifTabO || !verifTabX || nombreTour != 9)//On refait la même chose pour le joueur 2, à condition que le jeu ne soit pas terminé...
{
do
{
printf("Joueur 2, veuillez choisir une case :");
scanf("%d", &choix);
} while(choix < 0 || choix > 8);
for(i = 0; i < 9 ; i++)
{
if(choix == grille[i])
grille[i] = 88;//... à l'exception qu'on met ici le nombre équivalent à la lettre 'X'
printf("%c | ", grille[i]);
if(i == 2 || i == 5)
printf("\n");
}
nombreTour++;
}
} while(verifTabO != 1 || verifTabX != 1 || nombreTour != 9);// Et tout ceci, tant qu'aucune de ces trois conditions n'est vérifiée
if(verifTabO)
printf("C'est le joueur 1 qui a gagné !\n");
else if(verifTabX)
printf("C'est le joueur 2 qui a gagné !\n");
else
printf("Il y a eu match nul !\n");
return 0;
}
void remplir(int tableau[])
{
int i, nombre = 48;
for(i = 0; i < 9 ; i++)
{
tableau[i] = nombre;
nombre++;
}
}
int comparer(int tableau[][], int caractere)
{
/* Ici, on parcourt chaque case du tableau 2D, et à chaque fois que tableau[i][j] == caractere (donc à 'X' ou 'O'), on incrémente le compteur. S'il est égal à 3, c'est que les trois cases d'un des membres i du tableau sont des 'X' ou des 'O' et donc il y a un gagnant */
int i, j, compteur = 0;
for(i = 0; i < 8 ; i++)
{
for(j = 0; j < 3; j++)
{
if(tableau[i][j] == caractere)
compteur++;
if(compteur == 3)
return 1;
}
compteur = 0;
}
return 0;
}
void transformer(int choix)
{
int i, tab[] = {48,49,50,51,52,53,54,55,56};
for(i = 0; i < 9 ; i++)
{
if(choix == i)
choix = tab[i];
}
}
</code>
Les problèmes :
<code type="console">
morpion.c:7: error: array type has incomplete element type
morpion.c: In function `main':
morpion.c:21: error: type of formal parameter 1 is incomplete
morpion.c:22: error: type of formal parameter 1 is incomplete
morpion.c: At top level:
morpion.c:86: error: array type has incomplete element type
</code>
A voir également:
- Avis + aide sur code pour jeu du Morpion
- Code ascii - Guide
- Code puk bloqué - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
- Code activation windows 10 - Guide
- 94 jeu - Télécharger - Puzzle & Réflexion
1 réponse
Salut !
Je n'ai pas regardé toutes les erreurs mais j'ai flashé sur une en particulier :
int comparer(int tableau[][], int caractere)
{
/* Ici, on parcourt chaque case du tableau 2D, et à chaque fois que tableau[i][j] == caractere (donc à 'X' ou 'O'), on incrémente le compteur. S'il est égal à 3, c'est que les trois cases d'un des membres i du tableau sont des 'X' ou des 'O' et donc il y a un gagnant */
int i, j, compteur = 0;
for(i = 0; i < 8 ; i++)
{
for(j = 0; j < 3; j++)
{
if(tableau[i][j] == caractere)
compteur++;
if(compteur == 3)
return 1;
}
compteur = 0;
}
Tableau est à deux dimensions, alors qu'avant c'est 1
Et à voir tes boucles, tu as tableau[9][3] (Oo ??), alors que ça doit être tableau[3][3].
Après faut voir, sinon l'idée est là !
Je n'ai pas regardé toutes les erreurs mais j'ai flashé sur une en particulier :
int comparer(int tableau[][], int caractere)
{
/* Ici, on parcourt chaque case du tableau 2D, et à chaque fois que tableau[i][j] == caractere (donc à 'X' ou 'O'), on incrémente le compteur. S'il est égal à 3, c'est que les trois cases d'un des membres i du tableau sont des 'X' ou des 'O' et donc il y a un gagnant */
int i, j, compteur = 0;
for(i = 0; i < 8 ; i++)
{
for(j = 0; j < 3; j++)
{
if(tableau[i][j] == caractere)
compteur++;
if(compteur == 3)
return 1;
}
compteur = 0;
}
Tableau est à deux dimensions, alors qu'avant c'est 1
Et à voir tes boucles, tu as tableau[9][3] (Oo ??), alors que ça doit être tableau[3][3].
Après faut voir, sinon l'idée est là !
int comparer(int tableau[][3], int caractere);
Merci énormément d'avoir jeté un coup d'oeil et pour ta réponse, en effet ça n'a pas du être très agréable vu la tête du code sans mise en page !