Jeu du morpion

pyfpafpouf Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   -  
fiddy Messages postés 11069 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 !
A voir également:

4 réponses

mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
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 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
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
 
hop hop hop, donnez moi mon +1 j'ai été plus rapide et plus concis
0
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
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   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
Utilisateur anonyme
 
Mais la vraie question est : à qui as-tu mis le +1 en premier ?
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
0
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
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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
 
tab[p1-1][p2-1] = 'njoueur';


guillemets
-1
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
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
 
Non mais guillemets = apostrophes, c'pareil, l'idée étant qu'ils sont en trop
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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