Se connecter / S'enregistrer
Votre question

Probleme en C

Tags :
  • Programmation
Dernière réponse : dans Programmation
21 Décembre 2009 10:06:15

bonjour a tous, je rencontre actuellement un léger problème sur mon jeu que je n'arrive pas à resoudre depuis 3 jours. Le jeu consiste à trouver le nombre de l'ordinateur generer au hasard .
Pour etre precis, j'ai un probleme avec le score.

Lorsque je trouve le nombre mystere, on m'affiche bien le bon score, alors je l'enregistre dans un fichier.
Mais quand je charge le score, il m'affiche, 4900 a chaque fois, je regarde le fichier dans lequel le score est affiché, et je vois 4900, alors qu'il est censé enregistré le vrai score du joueur. Je ne sais pas d'ou viens se 4900 et je ne sais pas non plus comment regler se probleme car pour moi il n'y en a pas.
C'est pourquoi je fais appelle a vous, en vous remerciant d'avance pour l'aide que vous m'apporterez.

voici le codesource :

  1. // on inclue les bibliotheques standards
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. // directive de preprocesseur qui inclut le fichier .header crée par le programmeur
  5. #include "carte_joueur_nombre_mystere.h"
  6.  
  7. int main()
  8.  
  9. {
  10. /* déclaration de variable */
  11. const int maximum = 7000, minimum = 0;
  12. int nombre_mystere = 0, chiffre_mystere_joueur = 0, recommencer = 0, coupsjoueur = 0, score_joueur, meilleur_score = 0;
  13. carte_joueur personne;
  14.  
  15. /*------------------------------------------------------------------------*/
  16.  
  17. printf (" nous allons vous demandez des informations avant de commencer le jeu !\n");
  18. printf ("votre prenom : ");
  19. scanf ("%s", &personne.prenom);
  20.  
  21. printf ("\n");
  22. printf ("lieu : ");
  23. scanf ("%s", &personne.ville);
  24. printf ("\n");
  25. printf ("vous pouvez commencez ... bonne chance !\n");
  26. printf ("\n");
  27.  
  28.  
  29.  
  30. while (recommencer == 0)
  31.  
  32. {
  33.  
  34. FILE *fichier = NULL;
  35. fichier = fopen("D://score.txt", "r+");
  36. if (fichier != NULL)
  37. {
  38. fscanf(fichier, "%d", &meilleur_score); /*on fait sortir le score du fichier que l'in stock ensuite dans une variable appelé meilleurscore */
  39. rewind(fichier);
  40. fclose(fichier);
  41. }
  42.  
  43.  
  44. printf ("Voici votre meilleur score : %d \n", meilleur_score);
  45.  
  46. /* generateur de nombres */
  47.  
  48. srand (time(NULL));
  49. nombre_mystere = (rand() % (maximum - minimum + 1)) + minimum;
  50.  
  51.  
  52. score_joueur = 5000;
  53. coupsjoueur = 0;
  54.  
  55.  
  56. /*-----------------------------------------------------------------------------*/
  57.  
  58. while (chiffre_mystere_joueur != nombre_mystere) // tant que le " chiffre_mystere_joueur " est different du "nombre_mystere",
  59. // boucle est toujours active //
  60. {
  61.  
  62. printf ("\n");
  63. printf ("inserez un nombre \n");
  64. scanf ("%d", &chiffre_mystere_joueur);
  65. coupsjoueur++;
  66. printf ("\n");
  67.  
  68. if (chiffre_mystere_joueur < nombre_mystere)
  69. {
  70. printf (" c'est plus ! \n");
  71. score_joueur = score_joueur - 100;
  72. }
  73. else if (chiffre_mystere_joueur > nombre_mystere)
  74. {
  75. printf (" c'est moins ! \n");
  76. score_joueur = score_joueur - 100;
  77. }
  78. else
  79. {
  80. printf (" bien joue tu as trouve le nombre mystere %s !!!!!! \n", personne.prenom);
  81. printf (" Et cela en %d coups\n",coupsjoueur);
  82. printf ("pour un score total de %d pts ta ville : (%s) te fait honneur ! \n", score_joueur, personne.ville);
  83.  
  84. }
  85.  
  86. if (score_joueur > meilleur_score) /* si scorejoueur sup au meilleurscore, alors meilleurscore = scorejoueur */
  87. {
  88.  
  89. meilleur_score = score_joueur;
  90.  
  91. FILE *fichier = NULL;
  92. fichier = fopen("D://score.txt", "r+");
  93. if (fichier != NULL)
  94. {
  95.  
  96. fprintf (fichier, "%d", meilleur_score);
  97. rewind(fichier);
  98. fclose(fichier);
  99. }
  100. }
  101.  
  102.  
  103.  
  104. }
  105. printf ("\n");
  106. recommencer = 9;
  107.  
  108.  
  109. while (recommencer != 1 && recommencer != 0)
  110.  
  111. {
  112. printf ("Veux tu recommencer ?\n");
  113. printf (" tape 0 : oui ou tape 1 : non\n");
  114. scanf ("%d", &recommencer);
  115. printf ("\n");
  116. }
  117.  
  118.  
  119.  
  120. }
  121.  
  122. printf ("au revoir\n");
  123. return 0;
  124. }

Autres pages sur : probleme

21 Décembre 2009 12:12:40

Bonjour,

J'ai regardé vite fait, donc je ne sais pas si je me trompes :D ; mais si j'ai bien compris le but de ton jeu (trouver le nombre mystère), et tu inscris en fin de partie le nouveau score.

Ce que je vois là, c'est qu'à chaque test, tour de boucle... (ligne 58), tu inscris le nouveau score, ce que je trouve bizarre... tu fais des écritures inutiles, pourquoi ne pas l'écrire à la fin de partie ?
Car tu fais 5000-100= 4900, puis au nouveau tour de boucle, quand tu te plantes (ligne 73), tu fais de nouveau une soustraction... du coup au nouveau test (ligne 86), forcément l'écriture ne va pas se faire.

Il faudrait juste ajuster l'ordre des instructions (après je ne sais pas si tu as fais d'autres erreurs au niveau code)

++
m
0
l
21 Décembre 2009 14:03:41

c'est normal qu'il y ait des soustractions puisqu'au fur et a mesure, le score du joueur diminue, lorsque le joueur trouve le nombre mystere, le score du joueur s'affiche et on l'enregistre. Toutefois, ce n'est pas le score du joueur qui est enregistrer mais 4900, or le score du joueur qui est dans score_joueur est bien celui que j'enregistre mais bizarrement, c'est ce 4900 qui s'enregistre.


J'ai tout verifier et je ne vois pas ce qui cloche meme pour l'ordre des instructions, il n'y a rien qui cloche.

Par contre un truc qui m'echappe, tu parles de choses inutiles, j'aimerai savoir de quoi parle tu car le problème pourrait bien venir de la.
Merci
m
0
l
Contenus similaires
21 Décembre 2009 14:32:46

Quand je parle de choses inutiles, je voulais en venir à cette remarque (désolé si je me suis mal exprimé)
Tu es censé écrire le meilleur score dans le fichier, c'est bien ça ?
Alors pourquoi enregistrer le score alors que la partie n'est pas terminée ?
A ta place, je l'aurais fait dès que la personne trouve le résultat :) 
Je veux dire que ce morceau de code (enregistrement) doit se faire en dehors de cette boucle, ou bien faire un test avec un break si égal, mais bon c'est pas l'top.

Si tu déroules ton code, tu te rendras compte qu'au départ que si le chiffre n'est pas égal, tu tombes sur une des 2 premières conditions (ligne 68 ou 73)
Tu fais ensuite la soustraction.
Puis tu enregistre 4900, jusque là OK.
Mais c'est au prochain tour que ça foire...
Tu referas peut être une de ces 2 conditions, mais au moment de l'écriture, quelle comparaison fais-tu ? (ligne 86)
  1. if (score_joueur > meilleur_score)

c'est à dire:
  1. if (4800 > meilleur_score)
avec meilleur_score égal à 4900 ?
Du coup, pas d'enregistrement et d'où ton "4900"

Je sais pas si j'ai été plus clair :) 
++
m
0
l
21 Décembre 2009 17:46:34

"Alors pourquoi enregistrer le score alors que la partie n'est pas terminée ?
A ta place, je l'aurais fait dès que la personne trouve le résultat :) 
Je veux dire que ce morceau de code (enregistrement) doit se faire en dehors de cette boucle " : en plein dedans, tu avais tout a fait raison, je n'avais pas mis cette partie du code au bon endroit. Je l'ai simplement sorti de la boucle et sa marche nickel.
La prochaine fois je ferai beaucoup plus attention a sa.


Je te remercie pour ton conseil, j'avais pas du tout fais gaffe à sa et j'avais pourtant bien regarder le code .... enfin bon tu as resolu mon probleme je te remercie beaucoup !
m
0
l
21 Décembre 2009 17:56:43

et pour aller plus loin .. chaque utilisateur utilise le meilleur score de tous les autres?

(lecture/écriture dans un seul fichier ..) ?

printf ("Voici votre meilleur score : %d \n", meilleur_score);

Du coup, ce serait plutot "voici LE meilleur score" ... et la variable de personnalisation (prenom) ne sert donc pas à grand chose!

:) 
m
0
l
21 Décembre 2009 19:32:34

je sais que le type personnalisé de prenom ne sert a rien, si je l'ai mis c'est juste pour me familiariser avec les structures histoire que je m'y habitue :) 
m
0
l
22 Décembre 2009 14:07:30

wahhh a dit :
...Je te remercie pour ton conseil, j'avais pas du tout fais gaffe à sa et j'avais pourtant bien regarder le code .... enfin bon tu as resolu mon probleme je te remercie beaucoup !


De rien, ça fait toujours plaisir d'aider, passe une bonne journée :) 
m
0
l
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS