Jeu du morpion

pyfpafpouf Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   -  
fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
Nous sommes deux et nous devons coder le jeu du morpion (décidément ce jeu revient tout le temps).
Lors de l'affichage de la grille, nous n'arrivons pas à afficher X ou O mais cela affiche des "r". Quelqu'un aurait la solution ?
merci d'avance et bonne soirée !

PS: le code à été fait sous codeblocks, et les images du programme sont jointes !

4 réponses

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    Bonjour,

    Le code n'est pas affiché complètement dans ton image, mais a priori tab[i][j] ne contient pas le caractère que tu veux afficher.

    En outre
    'njoueur'
    n'a pas de sens en C. Normalement '...' désigne un caractère (par exemple
    'x'
    ou
    'o'
    . Si tu voulais parler de la chaîne de caractère njoueur, ça s'écrirait
    "njoueur"
    .

    Dans ton cas il vaudrait mieux regarder la parité du numéro du tour. Si c'est impair c'est aux croix de jouer, sinon au rond.

    int main() {
      unsigned turn;
      for (turn = 0; turn < 9; ++i) {
        char symbol = turn % 2 ? 'x' : 'o';
        // ...
      }
      return 0;
    }


    Bonne chance
    1
    1. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
       
      Salut mamiemando :-)

      oui, mais dans la capture du code de pyfpafpouf, on voit que
      njoueur
      est une variable déclarée
      char njoueur
      et on voit aussi une ligne
      njoueur='X';
      .

      si
      tab[][]
      est un tableau de char (on ne voit pas sa déclaration en revanche), l'affectation doit se faire comme
      tab[p1-1][p2-1] = njoueur;
      , tout simplement en utilisant le nom de la variable.

      @pyfpafpouf: les apostrophes servent à désigner un caractère littéral, comme le dit mamiemando, pas une variable.


      Dal
      0
    2. Utilisateur anonyme
       
      hop hop hop, donnez moi mon +1 j'ai été plus rapide et plus concis
      0
    3. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
       
      hahaha

      plus rapide et plus concis oui, mais moins précis :-P, de plus tu parlais de guillemets, alors tu voulais sans doutes mettre sur la piste pyfpafpouf en disant: apostrophes.

      ... du coup on pouvait comprendre que tu disais qu'il fallait utiliser des guillemets au lieu des apostrophes, et, du coup, mamiemando dans son post a fait la différence entre les deux usages littéraux apostrophes / guillemets en donnant au passage une solution brillante pour gérer la sélection du symbole.

      bref, tu peux voir mon modeste commentaire (qui ne peut recevoir un +1 puisque c'est juste un commentaire) comme un hommage à ta réponse (perfectible), en apportant un peu plus de contexte :-D

      elle serait parfaite ta réponse, si tu précises en commentaire à ta propre réponse, que tu veux parler des apostrophes, et qu'il faut les retirer


      Dal
      0
    4. pyfpafpouf Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
       
      bonjour a tous !
      merci pour votre réponse super rapide et précise ! j'ai mis +1 à tous comme ça pas de jaloux !
      effectivement c’était bien un problème de guillemets. Et merci également pour le petit cours sur ces fameux guillemets, c'est pas toujours easy à comprendre !
      0
    5. Utilisateur anonyme
       
      Mais la vraie question est : à qui as-tu mis le +1 en premier ?
      0
  2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Bonjour,

    Pour ma part, je dirais tout simplement qu'il faut enlever les apostrophes.
    tab[p1-1][p2-1] = njoueur;
    1
  3. pyfpafpouf Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
     
    resalut !
    déjà merci encore de prendre autant à cœur le sujet, c'est super cool !
    Sinon on a un autre soucis dans le programme.
    Pour voir si l'un des joueurs a gagné, on passe par les sommes (avec les valeurs numériques de X et de O) et si la somme de l'une des lignes, colonnes ou diagonales atteint la somme voulu, le joueur en question gagne.
    Pour cela on a utilisé des sous programme (le but de l'exercice étant de passer par des sous programmes).
    Sauf que, si la somme marche pour une ligne ou colonne, elle garde en mémoire la somme de la ligne précédente du coup ca fausse tous les calculs...
    Enfin bref je sais pas si vous avez compris le problème, je met les captures d'écran.
    Ce serait super cool s'il y avait autant de réponse que pour le sujet précédent ! merci !!

    la 1ere image concerne le code en lui même, avec les appels des sous programmes
    la 2nde concerne les sous programmes
    et la 3eme c'est le résultat

    0
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Bonjour,

      C'est bien compliqué tout ça...
      Ecrire des fonctions pour écrire des fonctions n'a pas d'intérêt.
      Sd(), Sl(), Sc() c'est pareil.
      Par ailleurs, ces fonctions se content de renvoyer vcase... Ca ne permet donc pas de faire la somme d'une ligne.
      Je te conseille de faire une fonction int sommeLignes(int numLignes, int numJoueur) qui te renverra la somme des symboles correspondant au joueur numJoueur (à adapter).
      Si cela renvoie une certaine valeur, alors ce joueur a gagné.
      0
  4. Utilisateur anonyme
     
    tab[p1-1][p2-1] = 'njoueur';

    guillemets
    -1
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Je ne pense pas.
      Je ne vois pas l'intérêt de mettre une chaîne "njoueur" dans un tableau.
      L'idée, sauf erreur, est de mettre la variable njoueur dans le tableau, qui prend la valeur 'X' ou 'O' en fonction du tour.
      Donc, plutôt : sans apostrophes :-).
      0
    2. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
       
      Complètement d'accord avec fiddy. Déjà ce ne sera pas cohérent en terme de types. D'autre part même si on corrigeait tab pour que ça le soit, on affecterait systématiquement la même valeur (l'adresse de la chaîne "njoueur").
      0
    3. Utilisateur anonyme
       
      Non mais guillemets = apostrophes, c'pareil, l'idée étant qu'ils sont en trop
      0
    4. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Euh non. Ce n'est clairement pas pareil en C.
      En lisant votre post, j'avais compris que vous disiez qu'il fallait mettre des guillemets au lieu d'apostrophes.
      Le bon mot et une phrase, ça permet à tout le monde de comprendre :-).
      0