Jeu du morpion

Fermé
pyfpafpouf Messages postés 6 Date d'inscription mercredi 30 mars 2016 Statut Membre Dernière intervention 2 mai 2016 - 30 mars 2016 à 18:31
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 2 avril 2016 à 13:50
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 !
A voir également:

4 réponses

mamiemando Messages postés 33378 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 25 novembre 2024 7 802
Modifié par mamiemando le 30/03/2016 à 18:56
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
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié par [Dal] le 31/03/2016 à 10:33
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
Utilisateur anonyme
31 mars 2016 à 10:54
hop hop hop, donnez moi mon +1 j'ai été plus rapide et plus concis
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié par [Dal] le 31/03/2016 à 11:07
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
pyfpafpouf Messages postés 6 Date d'inscription mercredi 30 mars 2016 Statut Membre Dernière intervention 2 mai 2016
31 mars 2016 à 12:42
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
Utilisateur anonyme
31 mars 2016 à 14:19
Mais la vraie question est : à qui as-tu mis le +1 en premier ?
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
31 mars 2016 à 23:57
Bonjour,

Pour ma part, je dirais tout simplement qu'il faut enlever les apostrophes.
tab[p1-1][p2-1] = njoueur;
1
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
1 avril 2016 à 10:21
0
pyfpafpouf Messages postés 6 Date d'inscription mercredi 30 mars 2016 Statut Membre Dernière intervention 2 mai 2016
2 avril 2016 à 12:41
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
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
2 avril 2016 à 13:50
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
Utilisateur anonyme
30 mars 2016 à 18:52
tab[p1-1][p2-1] = 'njoueur';


guillemets
-1
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
Modifié par fiddy le 31/03/2016 à 23:57
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
mamiemando Messages postés 33378 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 25 novembre 2024 7 802
1 avril 2016 à 10:01
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
Utilisateur anonyme
1 avril 2016 à 13:43
Non mais guillemets = apostrophes, c'pareil, l'idée étant qu'ils sont en trop
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
Modifié par fiddy le 1/04/2016 à 21:49
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