IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Jeu du morpion \o/


Sujet :

C

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2014
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Jeu du morpion \o/
    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.

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Entre les lignes 20 et 21, as-tu essayé de mettre un printf() pour vérifier que tu enregistres correctement ce que l'utilisateur rentre au clavier ?

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2014
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    oui, j'ai testé, les coordonnées se rentrent correctement

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    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;
    }
    Pourquoi décrémenter y mais pas x ?


    De manière plus générale, on ne tente de démêler un gros pâté directement. On essaye d'extraire un code minimal pour le faire et surtout on vérifie étape par étape : les entrées utilisateurs, chaque fonction de traitement avec des données codées et non obtenues au clavier, etc. C'est que tu devrais faire pour ne pas te retrouver dans une situation comme :
    je suis moi-même perdu dans mon pavé

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2014
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    je décrémente y pour faire une liste de 1 à 9
    l'indice c'est x+3*(y-1) au lieu de x+3y sinon ca irait de 4 à 12

  6. #6
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Tu ne voudrais pas plutôt aller de 0 à 8, comme les indices d'un tableau de 9 cases ?

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2014
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    oui c'est vrai que c'est plus logique, je le corrige

Discussions similaires

  1. Jeu du Morpion
    Par jujusous3 dans le forum Agents de placement/Fenêtres
    Réponses: 11
    Dernier message: 22/02/2010, 01h17
  2. Jeu de morpion
    Par saphire dans le forum Débuter
    Réponses: 4
    Dernier message: 02/11/2008, 00h26
  3. Besoin d'aide jeu du morpion
    Par narcis60floyjo dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/02/2008, 15h14
  4. petit bog dans mon jeu de morpion
    Par 123quatre dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 19/06/2006, 11h10
  5. [LG]Un jeu du morpion
    Par yffick dans le forum Langage
    Réponses: 10
    Dernier message: 23/12/2003, 18h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo