FORUM Tom's Hardware » Programmation » C / C++ / Java » Probleme jeux du pendue
 

Probleme jeux du pendue

Il y a 339 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici
Ajouter une réponse



 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : Probleme jeux du pendue
 
Plus d'informations

Bonjour,
 
J'ai reussi a faire un pendue en fixant le mot secret dans le code source (je le ferrais avec le dico quand
 
j'aurais finis les ameliorations de celui-ci)
 
Le seul probleme est que si l'utilisateur a la fin demande une nouvelle partie la premiere lettre qui va rentrais ne  
 
sera pas pris en compte.
 
Je vous donne mon code, soyez indulgent je debute dites moi aussi ce que sa vaut  :)  
 
Main.c :
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "jeux.h"
  4. int main()
  5. {
  6.     int nouvellePartie = 0;
  7.     do
  8.     {
  9.         char motMystere[] = "MARRON", motMystereCrypte[7] = {0};
  10.         char lettreEntre;
  11.         long coups = 10;
  12.         int sortieBoucle = 1;
  13.         cryptageMotMystere (motMystere, motMystereCrypte);
  14.         printf("\nBienvenue dans le jeux du pendu !\n\n\n" );
  15.         do
  16.         {
  17.             printf ("\nIl vous reste %ld coups a jouer\n", coups);
  18.             printf ("Quel est le mot secret ? %s\n", motMystereCrypte);
  19.             printf ("Proposez une lettre : " );
  20.             lettreEntre = lireCaractere();
  21.             verificationLettreEntre (motMystere, motMystereCrypte, lettreEntre, &coups);
  22.             gagne (motMystere, motMystereCrypte, coups, &nouvellePartie, &sortieBoucle);
  23.         }while (sortieBoucle);
  24.     }while (nouvellePartie);
  25.     return 0;
  26. }


 
Jeux.c :
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <ctype.h>
  4. char lireCaractere()
  5. {
  6.     char caractere = 0;
  7.     caractere = getchar(); // On lit le premier caractère
  8.     caractere = toupper(caractere);
  9.     // On lit les autres caractères mémorisés un à un jusqu'à l'\n (pour les effacer)
  10.     while (getchar() != '\n') ;
  11.     return caractere; // On retourne le premier caractère qu'on a lu
  12. }
  13. void cryptageMotMystere (char motMystere[], char motMystereCrypte[])
  14. {
  15.     long nombreDeLettreMotMystere = 0, i;
  16.     nombreDeLettreMotMystere = strlen(motMystere);
  17.     for (i = 0; i < nombreDeLettreMotMystere; i++)
  18.     {
  19.         motMystereCrypte[i] = '*';
  20.     }
  21. }
  22. void verificationLettreEntre (char motMystere[], char motMystereCrypte[], char lettreEntre, long *coups)
  23. {
  24.     long nombreDeLettreMotMystere = 0, i;
  25.     char copieMotMystereCrypte[7] = {0};
  26.     strcpy (copieMotMystereCrypte, motMystereCrypte);
  27.     nombreDeLettreMotMystere = strlen(motMystere);
  28.     for (i = 0; i < nombreDeLettreMotMystere; i++)
  29.     {
  30.         if (lettreEntre == motMystere[i])
  31.         {
  32.             motMystereCrypte[i] = lettreEntre;
  33.         }
  34.     }
  35.     if (strcmp (copieMotMystereCrypte, motMystereCrypte) == 0)
  36.     {
  37.         *coups-= 1;
  38.     }
  39. }
  40. void gagne (char motMystere[], char motMystereCrypte[], long coups, int *nouvellePartie, int *sortieBoucle)
  41. {
  42.     if (coups == 0)
  43.     {
  44.         *sortieBoucle = 0;
  45.         printf ("\nPerdu, le mot mystere etait : %s\n\n", motMystere);
  46.         printf ("Une nouvelle partie ?\n\n" );
  47.         printf ("1. Oui\n" );
  48.         printf ("2. Non\n\n" );
  49.          scanf ("%ld", nouvellePartie);
  50.     }
  51.     else if (strcmp (motMystere, motMystereCrypte) == 0)
  52.     {
  53.         *sortieBoucle = 0;
  54.         printf ("\nGagne ! Le mot mystere etait bien : %s\n\n", motMystere);
  55.         printf ("Une nouvelle partie ?\n\n" );
  56.         printf ("1. Oui\n" );
  57.         printf ("2. Non\n\n" );
  58.          scanf ("%ld", nouvellePartie);
  59.     }
  60.     if (*nouvellePartie != 1)
  61.     {
  62.         *nouvellePartie = 0;
  63.     }
  64. }


 
Jeux.h :
 

Code :
  1. void cryptageMotMystere (char motMystere[], char motMystereCrypte[]);
  2. char lireCaractere();
  3. void verificationLettreEntre (char motMystere[], char motMystereCrypte[], char lettreEntre, long *coups);
  4. void gagne (char motMystere[], char motMystereCrypte[], long coups, int *nouvellePartie, int *sortieBoucle);


 
Cordialement,

pourquoi faire cent fois la même chose ?
Plus d'informations

je comprend pas la logique de tes fonctions :/

Plus d'informations

elch a écrit :

je comprend pas la logique de tes fonctions :/


 
Je ne voit pas ce que tu comprend pas il y a une fonction pour verifier si le joueur a gagner ou perdu, une pour  
 
verifier si la lettre entree est dans le mot mystere...

pourquoi faire cent fois la même chose ?
Plus d'informations

je comprend mais c'est pas (très) logique. par exemple je m'attendrait à ce que le code qui conditionne la fin de la boucle do while(nouvellePartie) soit dans la fonction main(). (par exemple gagne peut renvoyer un int qui, si non nul, indique que le joueur veut faire une autre partie)
 
sinon pourquoi n'utilise tu pas ta fonction lireCaractere dans la fonction gagne() ?

Plus d'informations

elch a écrit :

je comprend mais c'est pas (très) logique. par exemple je m'attendrait à ce que le code qui conditionne la fin de la boucle do while(nouvellePartie) soit dans la fonction main(). (par exemple gagne peut renvoyer un int qui, si non nul, indique que le joueur veut faire une autre partie)
 
sinon pourquoi n'utilise tu pas ta fonction lireCaractere dans la fonction gagne() ?


 
ba tu veut que je fasse comment pour savoir si il faut afficher perdu ou gagner (coups == 0 ou motMystere == motMystereCrypte)??

pourquoi faire cent fois la même chose ?
Plus d'informations

je dit pas que la fonction gagne n'a pas lieu d'être, je dit que par exemple cette fonction devrai renvoyer un int qui correspond a la valeur que tu assigne a nouvellePartie
en général, demander un pointeur vers un nombre suppose que l'on a besoin de savoir la valeur courante de ce nombre ET que l'on peut être amené à le modifier.
 
bon mis à par ça ça marche mieux si la fonction gagne() utilise la fonction lireCaractere() ?

Plus d'informations

elch a écrit :

je dit pas que la fonction gagne n'a pas lieu d'être, je dit que par exemple cette fonction devrai renvoyer un int qui correspond a la valeur que tu assigne a nouvellePartie
en général, demander un pointeur vers un nombre suppose que l'on a besoin de savoir la valeur courante de ce nombre ET que l'on peut être amené à le modifier.
 
bon mis à par ça ça marche mieux si la fonction gagne() utilise la fonction lireCaractere() ?


 
Merci de ton aide mais sa ne marche pas mieux sa marche meme encore moins bien, et j'ai appris que dans les  
 
booleen 0 = faux et toute les autre valeur valent vrai alors comment faire vu que 2. NON.
 
Bon mis a part sa je n'ai que 14 ans  :)  desolé si mon code n'est pas trés logique je debute  :)
 
Ps: la fonction qui demande une nouvelle partie marche la partie recommence bien le seul bleme c'est que la premiere lettre que l'utilisateur va taper ne va pas etre pris en compte ce beug ne ceut produit pas lorsque je lance mon prog pour la premiere fois.


Message édité par trans13 le 01-09-2006 à 18:43:12
G.M.G.V.S.O.
Profil : Modo matériel
Plus d'informations

un booleen ne peut avoir que 2 valeurs mais un INT beaucoup plus ...
 
Tu peux donc renvoyer un INT et tester sa valeur avec un SWITCH par exemple ...


---------------
SPAM & WAREZ = Ban!
Ultimate Boot CD | Memtest+
Mon bar préféré à Lyon ! | Bijoux Fantaisie de Créateur !
Plus d'informations

Une solution qui peut toujours servir :
http://www.siteduzero.com/tuto-3-4 [...] pendu.html


Aller à :
Ajouter une réponse
  FORUM Tom's Hardware » Programmation » C / C++ / Java » Probleme jeux du pendue
 

Annonces Google
Publicité