Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
874 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Finalisation lettre k

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Finalisation lettre k

n°2254847
warlock68
Posté le 02-04-2015 à 18:46:14  profilanswer
 

Bonjour à tous , mon programme est presque fini mais il me reste quelques détails pour le finir.
 
Il faut demander au joueur si il veut rejouer en ayant trouver facilement la lettre k ou en ayant dépassé le nombre d'essai autorisé.
 
Ceci en relançant le programme au début.
 
Merci pour votre aide.
 

Code :
  1. #include <iostream>
  2. int main()
  3. {
  4.   const char caractere = 'k';
  5.   int essai = 10;
  6.   char reponse;
  7.   char rejouer = 'o';
  8.  
  9.   for (essai; essai > 0; --essai)
  10.  
  11.   {
  12.     std::cout << "Tapez une lettre au clavier" << std::endl
  13.               << "Vous avez " << essai << " essais pour trouver la lettre mystere." << std::endl;
  14.     std::cin >> reponse;
  15.     if (reponse == caractere)
  16.    
  17.     {
  18.       std::cout << "Bravo vous avez trouvez la bonne lettre " << std::endl
  19.             << "Vous avez eu besoin de " << (10 - essai) << " essai pour trouver la lettre mystere " << std::endl;
  20.       break;
  21.     }
  22.     if (reponse < caractere)
  23.       std::cout << "Plus !" << std::endl;
  24.     else
  25.       std::cout << "Moins !" << std::endl;
  26.   }
  27.   if (essai == 0)
  28.  
  29.     do
  30.    
  31.     {
  32.    
  33. std::cout << "Plus d'essai disponible, vous avez perdu !" << std::endl;
  34.     std::cout << "Voulez vous rejouer (o)ui / (n)on ?" << std::endl;
  35.     std::cin >> rejouer;
  36.    
  37.     }
  38.    
  39.    
  40.     while(rejouer == 'o');
  41.  
  42.  
  43.     system ("PAUSE" );
  44.   return 0;
  45. }

mood
Publicité
Posté le 02-04-2015 à 18:46:14  profilanswer
 

n°2254873
gilou
Modérateur
Modzilla
Posté le 02-04-2015 à 22:54:35  profilanswer
 

C'est pas mal ce que tu as écrit, mais mais ça manque de découpage en fonctions qui font une chose claire et précise.
Un gros main qui contient tout le programme, c'est une mauvaise habitude qu'il faut éviter de prendre.
En modifiant un peu ce que tu as écrit:
 

Code :
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <ctime>
  4. #include <ctype.h>
  5. // le jeu de base: trouver une lettre mystere en un nombre d'essais maximal
  6. bool trouver_lettre(const char lettre_mystere, int max_essais)
  7. {
  8.     bool trouve = false;
  9.     int nb_essais = 0;
  10.     while (nb_essais < max_essais) {
  11.         char reponse;
  12.         std::cout << "Tapez une lettre au clavier" << std::endl;
  13.         std::cout << "Vous avez " << (max_essais - nb_essais) << " essais pour trouver la lettre mystere." << std::endl;
  14.         std::cin >> reponse;
  15.         std::cin.ignore(); // on nettoie cin après y avoir lu ce qui nous interesse
  16.         reponse = std::tolower(reponse); // on met la rponse en minuscule
  17.         if (reponse == lettre_mystere) {
  18.             break;    // on a trouvé, on sort de la boucle
  19.         }
  20.         std::cout << ((reponse < lettre_mystere)?"Plus !":"Moins !" ) << std::endl;
  21.         ++nb_essais;
  22.     };
  23.     if (nb_essais < max_essais) {
  24.         ++nb_essais;
  25.         std::cout << "Bravo vous avez trouvez la bonne lettre (" <<  lettre_mystere << " )" << std::endl;
  26.         std::cout << "Vous avez eu besoin de " << nb_essais << " essai(s) pour trouver la lettre mystere " << std::endl;
  27.         trouve = true;
  28.     }
  29.     return trouve;
  30. }
  31. // on tire au hasard une lettre
  32. char tirage_lettre()
  33. {
  34.     static char letters[] = "abcdefghijklmnopqrstuvwxyz";
  35.     return letters[std::rand() % 26];
  36. }
  37. //
  38. bool demande_rejouer()
  39. {
  40.     char reponse;
  41.     std::cout << "Plus d'essai disponible, vous avez perdu !" << std::endl;
  42.     do {
  43.         std::cout << "Voulez vous rejouer (o)ui / (n)on ?" << std::endl;
  44.         std::cin >> reponse;
  45.         std::cin.ignore();
  46.         reponse = std::tolower(reponse);
  47.     } while (reponse != 'o' && reponse != 'n');
  48.     return (reponse == 'o');
  49. }
  50. //
  51. int main()
  52. {
  53.     std::srand(std::time(0));
  54.     bool jouer = true;
  55.     while (jouer && !trouver_lettre(tirage_lettre(), 10)) {
  56.         jouer = demande_rejouer();
  57.     }
  58.     // pause sans avoir besoin de system
  59.     // on suppose que cin a été vidé par cin.ignore quand c'était necessaire
  60.     std::cin.get();
  61.     return 0;
  62. }


 
A+,


Message édité par gilou le 03-04-2015 à 03:10:13

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2254887
gilou
Modérateur
Modzilla
Posté le 03-04-2015 à 11:31:45  profilanswer
 

Noter que j'aurais pu écrire le main comme:

Code :
  1. int main()
  2. {
  3.     std::srand(std::time(0));
  4.     while (!trouver_lettre(tirage_lettre(), 10) && demande_rejouer());
  5.     return 0;
  6. }


C'est un peu moins lisible, mais ça fait la même chose, en profitant de l'évaluation dans l'ordre du test d'arrêt du while: On joue une nouvelle partie tant qu'on ne trouve pas et qu'on demande de rejouer.
 
En y repensant, dans ce genre de jeu, on ne veut pas faire deviner deux fois de suite la même lettre, donc:

Code :
  1. // on tire au hasard une lettre
  2. char tirage_lettre()
  3. {
  4.     static char letters[] = "abcdefghijklmnopqrstuvwxyz";
  5.     static char mystere = 0;
  6.     char c;
  7.     // pour éviter deux fois de suite la même lettre mystere
  8.     do {
  9.         c = letters[std::rand() % 26];
  10.     } while (c == mystere);
  11.     mystere = c;
  12.     return mystere;
  13. }


 
A+,


Message édité par gilou le 03-04-2015 à 23:49:54

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2255251
warlock68
Posté le 08-04-2015 à 09:52:44  profilanswer
 

Bonjour à tous.
 
Mon problème est le suivant mon jeu fonctionne bien mais je ne sais pas comment faire pour que le joueur relance la partie après avoir trouver la bonne lettre ou en ayant utiliser son nombre limité d'essais.
 
Merci pour votre aide.
 

Code :
  1. #include <iostream>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5.   const char caractere = 'k';
  6.   int essai = 10;
  7.   char reponse;
  8.   char rejouer = 'o';
  9.  
  10.   for (essai; essai > 0; --essai)
  11.  
  12.   {
  13.       std::cout << "Tapez une lettre au clavier" << std::endl;
  14.       std::cout << "Vous avez " << essai << " essais pour trouvez la lettre mystere" << std::endl;
  15.       std::cin >> reponse;
  16.    
  17.       if (reponse == caractere)
  18.    
  19.     {
  20.       std::cout << "Bravo vous avez trouvez la bonne lettre " << std::endl;
  21.       std::cout << "Vous avez eu besoin de " << (10 - essai) << " essai pour trouver la lettre mystere " << std::endl;
  22.       break;
  23.     }
  24.    
  25.       if (reponse !=caractere)
  26.    
  27.         {
  28.           std::cout << "Ce n'est pas la bonne lettre !" << std::endl;
  29. }
  30.       if (reponse < caractere)
  31.      
  32.          { 
  33.             std::cout << "C'est Plus !" << std::endl;
  34.          }
  35.      
  36.        else
  37.          {
  38.             std::cout << "C'est Moins !" << std::endl;
  39.          }
  40.   }
  41.        if (essai == 0)
  42.  
  43.   { 
  44.      std::cout << "Plus d'essai disponible, vous avez perdu !" << std::endl;
  45.      std::cout << "Voulez- vous rejouer(o)ui / (n)on ? " << std::endl;
  46.      std::cin >> rejouer;
  47.   }
  48.        while(rejouer=='o')
  49.        return 0;
  50.        
  51.        system ("PAUSE" );
  52.  
  53. }

n°2255252
rufo
Pas me confondre avec Lycos!
Posté le 08-04-2015 à 09:55:59  profilanswer
 

Qq'un sur ce forum avait déjà répondu à cette question sur un topic qui concernait déjà ton programme.
 
Edit : http://forum.hardware.fr/forum2.ph [...] 0#t2254873


Message édité par rufo le 08-04-2015 à 09:56:33

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2255253
gilou
Modérateur
Modzilla
Posté le 08-04-2015 à 11:18:16  profilanswer
 

Les sujets suivant ont été fusionnés à ce sujet par Gilou

  • Relancement de mon jeu lettre k


C'était l'occasion parfaite d'utiliser cette fonction :)
 
A+,


Message édité par gilou le 08-04-2015 à 11:19:10

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Finalisation lettre k

 

Sujets relatifs
Aide lettre k plus complexeTrouver le numéro d'un lecteur à partir de sa lettre
SCRIPT, detecter lettre hdd externe en batch[C] Tirage de lettre et probabilité
random chiffre, lettre, caractère spéciauxregex : pattern pour détecter les lettres et leur accent [résolu]
Comment mettre automatiquement une lettre à un hdd ext en Fichier .batTri Varchar avec lettre et chiffre ?
Macro pour convertir chiffre en lettreHein? mon prog a enlevé une lettre de argv[] [NOVICE]
Plus de sujets relatifs à : Finalisation lettre k


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR