Bonjour à tous !
Je me suis mis à coder un morpion en c, mais je bloque un peu.
Après quelques recherches sur internet j'ai vu qu'il y avait beaucoup plus simple que ce que j'ai commencé à faire mais j'aimerais bien voir d'où provient mon erreur =)
Désolé d'avance pour le pavé --'
Je vous explique mon programme :
Voici ma structure pour un point sur la grille. la variable joueur vaut 0 si personne n'a posé le point, 1 si c'est le joueur 1, 2 si c'est le joueur 2
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 typedef struct { int indice; int x; int y; int joueur; } COORDONNEES;
x et y sont rentrés par le joueur, et l'indice est calculé par la fonction :
en gros, cela donne un indice de 1 à 9 selon la position sur la grille comme cela :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 void attribuer_indice (COORDONNEES *nvpoint) { nvpoint->indice=3*(nvpoint->y - 1)+nvpoint->x; }
le but de cet indice étant de remplir un tableau de tous les points placés jusqu'à présent que l'on a organisé dans l'ordre des indices, cela permettant d'afficher tous les points d'un coup, je m'explique :1 2 3 4 5 6 7 8 9
voici ma fonction pour afficher tous les points placés :
Si on avait un tableau de point dans l'ordre des points rentrés, on devrait peut être rentrer un point puis revenir en arrière pour rentrer le suivant ...
afin d'obtenir ce fameux tableau : voici enfin le main :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 void afficher_points (COORDONNEES points[9]) { int i=1; while(i<10) { if(points[i].joueur==1) { printf(" O"); } else if(points[i].joueur==2) { printf(" X"); } else { printf(" "); } if(i%3==0) { printf("\n"); } i++; } }
J'ai tout codé à la bourrin et j'ai testé uniquement à la fin, je me suis perdu comme un boulet !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 int main() { printf("Bienvenue au jeu du morpion !\n\n"); COORDONNEES points[9]; int player=1; //p=1 joueur 1, p=2 joueur 2 int tour=1; int z=0; while(z<10) // on initialise le joueur des points à 0 pour la fonction afficher qui test tous les points même avant qu'ils soient remplis { points[z].joueur=0; z++; } while(gagne(points)==0 && tour<10) // on limite le nombre de tour en cas de match nul, sinon le jeu ne s'arrêterait pas { printf("joueur %d entrez les coordonnées du point : x =",player); COORDONNEES nvpoint; scanf("%d",&(nvpoint.x)); printf("y ="); scanf("%d",&(nvpoint.y)); // il manque la vérification pour savoir si le point a déjà été placé c'est normal je le ferais plus tard nvpoint.joueur=player; COORDONNEES *nvpt=&nvpoint; attribuer_indice(nvpt); points[nvpoint.indice]=nvpoint; // on rentre nvpoint à l'endroit de son indice dans points[] afficher_points(points); player=3-player; // alterne donc entre 1 et 2 à chaque tour tour++; } if(gagne(points)==1) { printf("le joueur 1 a gagne !!"); } if(gagne(points)==2) { printf("le joueur 2 a gagne !!"); } else if(gagne(points)==0) { printf("match nul !"); } return 0; }
Mais j'ai l'impression que le bug vient de la valeur des points.joueur dans le tableau points[]. Quand je fais des printf pour vérifier je tombe sur n'importe quoi !! Le pire dans tout ca c'est que ma fonction pour afficher place quand même bien les points, à part celui d'en bas à droite ??? j'y comprends rien
Ma fonction gagne fonctionne (testée en rentrant manuellement les valeurs dans le main) mais ne reçoit pas les bonnes valeurs des points[i].joueur
Merci à tous ceux qui auront lu mon pavé déjà et encore plus à ceux qui pourraient m'aider !!!
Désolé si je ne suis pas clair je suis moi-même perdu dans mon pavé et j'ai pas codé depuis plus d'un an.
Partager