Forum Programmation.c++ Relancement de mon jeu en c++ avec while

Posté par . Licence CC by-sa
Tags :
0
8
avr.
2015

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.

#include <iostream>
#include <stdlib.h>


int main()

{
  const char caractere = 'k';
  int essai = 10;
  char reponse;
  char rejouer = 'o';

  for (essai; essai > 0; --essai)

  {
      std::cout << "Tapez une lettre au clavier" << std::endl;
      std::cout << "Vous avez " << essai << " essais pour trouvez la lettre mystere" << std::endl;
      std::cin >> reponse;

      if (reponse == caractere)

    {
      std::cout << "Bravo vous avez trouvez la bonne lettre " << std::endl;
      std::cout << "Vous avez eu besoin de " << (10 - essai) << " essai pour trouver la lettre mystere " << std::endl;
      break;
    }

      if (reponse !=caractere)

        {
          std::cout << "Ce n'est pas la bonne lettre !" << std::endl;
    }


      if (reponse < caractere)

         {  
            std::cout << "C'est Plus !" << std::endl;
         }

       else

         {
            std::cout << "C'est Moins !" << std::endl;
         }
  }

       if (essai == 0)

  {  
     std::cout << "Plus d'essai disponible, vous avez perdu !" << std::endl;
     std::cout << "Voulez- vous rejouer(o)ui / (n)on ? " << std::endl;
     std::cin >> rejouer;
  }
       while(rejouer=='o')

       return 0;

       system ("PAUSE");

}
  • # Utilise des fonctions

    Posté par . Évalué à 2.

    …ou un "goto" (non je déconne)

  • # Séparer en plusieurs fonctions ?

    Posté par . Évalué à 3.

    Naïvement j'aurais fait :

    -une fonction qui lance toute l'application.
    -une fonction qui lance "la partie" (en initialisant tout comme il faut).
    -dans la boucle une fonction qui lit et traitent des commande "quitter", "recommencer", "plus d'essais", "afficher qqchose", etc.

    Du coup une fois que la commande "recommencer" serait entrée, la fonction qui (re)lance la partie serait appeler de nouveau.

    Mais je ne sais pas si tout ça est pas un peu overkill ou non au vu de ce que tu fais.

  • # alternative au while : le do !

    Posté par (page perso) . Évalué à 2.

    Tout est dans le titre ;)

    Une boucle while impose une condition à l'entrée de la boucle. Une boucle do teste une condition à la sortie de la boucle.

    Vu le cas d'utilisation, cela serait plus simple avec un do. En tout cas, c'est ce que je ferai :).

    Sinon, comme conseiller dans d'autres commentaires, faire quelques petites fonctions pour isoler un peu le code serait un plus pour la maintenant et la lisibilité ;)

  • # mes remarques

    Posté par . Évalué à 2.

    Les magic constant (ou constante magique c'est mal, si plus tard tu veux passer à 42 essais, faut changer tout les 10 qui trainent

    • avoir une constante const int NB_ESSAIS=10; et initialiser essai comm suit essai=NB_ESSAI
    • le premier paramètre du for ne sert à rien, ça devrait être int essai=NB_essai (et pour le coup ne plus l'avoir déclaré avant
    • avoir des else après les if (si il est == il ne sera pas > ni < )
    • faire une fonction, le code dans le main c'est mal, avoir la gestion du jeu et des nouvelle partie pourquoi pas, mais le reste devrait être une fonction.

    typiquement un

    do{
     if( !rechercheMystere(mysterieuCaractere(), NB_ESSAI) )
     {
       std::cout << "vous avez lamentablement échoué; voulez vous retenter votre chance afin de tenter de sauver"
                 << "l'ego ridicule qui vous reste?  o/n"
       std::cin >> rejoue
     }
     else 
     {
       rejoue='n';
     }
    }while(rejoue == 'o');

    devrait faire l'affaire

    Il ne faut pas décorner les boeufs avant d'avoir semé le vent

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.