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 :

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;
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
x et y sont rentrés par le joueur, et l'indice est calculé par la fonction :

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;
}
en gros, cela donne un indice de 1 à 9 selon la position sur la grille comme cela :

1  2  3
4  5  6
7  8  9
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 :
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 ...

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++;
    }
}
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
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;
}
J'ai tout codé à la bourrin et j'ai testé uniquement à la fin, je me suis perdu comme un boulet !
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.