loka
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
loka

forum de loka
 
AccueilAccueil  PortailPortail  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  ConnexionConnexion  
Le Deal du moment : -39%
Pack Home Cinéma Magnat Monitor : Ampli DENON ...
Voir le deal
1190 €

 

 exercice corrigé 2 : jeu du pendu

Aller en bas 
AuteurMessage
romain
Rang: Administrateur
romain


Nombre de messages : 346
Date d'inscription : 01/08/2004

exercice corrigé 2 : jeu du pendu Empty
MessageSujet: exercice corrigé 2 : jeu du pendu   exercice corrigé 2 : jeu du pendu EmptyJeu 25 Aoû à 22:33

Le jeu du pendu se joue à plusieurs personnes (au moins 2), chacun à son tour de rôle proposant aux autres un mot a deviner.
Au départ, seule la taille du mot à deviner est connue.

Chaque joueur (sauf celui qui a posé le mot!) propose ensuite, à tour de rôle, une lettre. Si cette lettre est présente dans le mot, toutes ses occurences sont indiquées; sinon, celui qui a proposé la lettre "progresse" sur le chemin de la pendaison, c'est à dire que le dessin de son pendu progresse d'une étape. Au bout de treize étapes, il a perdu et est éliminé du jeu (il est "pendu").
Précisons que le compteur de pendaison n'es jamais remis à zéro au cours de la partie.

La partie se termine lorsque tous les joueurs ont proposé un mot. Chaque joueur qui parvient à en pendre un autre gagne un point. Chaque joueur qui trouve un mot (i.e. propose la dernière lettre à trouver) gagne un point.

A la fin de la partie gagne(nt) celui/ceux qui est/sont encore en vie et a/ont le plus de points.

INDICATIONS
1. Le caractère '\' s'écrit '\\' en C++
2. Pour "effacer" l'écran, afficher un nombre suffisant de lignes vides.
3. On peut créer une structure de données pour representer un joueur (nom, nombre de points, étape dans la pendaison) et un tableau de tels joueurs.
4. Pour le jeu sur le mot, on peut créer une fonction prenant une lettre et deux chaînes de caractères en arguments et recopiant dans la seconde chaîne la lettre passée en argument en toutes les positions où cette lettre apparaît dans la première chaîne. Cette fonction pourrait renvoyer un booléen indiquant si la lettre existe dans la première chaîne ou non.


Dernière édition par le Ven 26 Aoû à 21:47, édité 1 fois
Revenir en haut Aller en bas
romain
Rang: Administrateur
romain


Nombre de messages : 346
Date d'inscription : 01/08/2004

exercice corrigé 2 : jeu du pendu Empty
MessageSujet: Re: exercice corrigé 2 : jeu du pendu   exercice corrigé 2 : jeu du pendu EmptyJeu 25 Aoû à 23:52

Corrigé :

Code:
#include <iostream>
#include <vector>
using namespace std;

const int nb_etapes(13);

string pendu[nb_etapes] = {
  "\n\n\n\n\n_________",
  "\n  |\n  |\n  |\n  |\n__|_____",
  "\n  |\n  |\n  |\n  |\n_/|_____",
  "\n  |\n  |\n  |\n  |\n_/|\\____",
  "  _____\n  |\n  |\n  |\n  |\n_/|\\____",
  "  _____\n  |/\n  |\n  |\n  |\n_/|\\____",
  "  _____\n  |/  |\n  |\n  |\n  |\n_/|\\____",
  "  _____\n  |/  |\n  |    0\n  |\n  |\n_/|\\____",
  "  _____\n  |/  |\n  |    0\n  |    I\n  |\n_/|\\____",
  "  _____\n  |/  |\n  |    _0\n  |    I\n  |\n_/|\\____",
  "  _____\n  |/  |\n  |    _0_\n  |    I\n  |\n_/|\\____",
  "  _____\n  |/  |\n  |    _0_\n  |    I\n  |  /\n_/|\\____",
  "  _____\n  |/  |\n  |    _0_\n  |    I\n  |  /  \\\n_/|\\____",
};

struct Joueur{
  string nom;
  int points;
  int etape;
};

bool bonne_lettre(char l, string& mot, string ref)
{
  bool retour = false;
  for (unsigned int i(0); i < ref.size(); ++i)
      if ((ref[i] == l) && (mot[i] != l))
      {
        mot[i] = l;
        retour = true;
      } 
  return retour;
}

int main()
{
  cout << "Nombre de joueurs : " << endl;
  unsigned int nb_joueurs;
  cin >> nb_joueurs;

  vector< Joueur > joueur(nb_joueurs);

  // saisie des noms des joueurs et initialisation
  for (unsigned int i(0); i < nb_joueurs; ++i)
  {
      cout << "Nom du joueur " << i+1 << " : ";
      cin >> joueur[i].nom;
      joueur[i].points = 0;
      joueur[i].etape = -1;
  }

  // jeu à tour de rôle
  for (unsigned int i(0); i < nb_joueurs; ++i)
  {
      cout << "Au joueur " << joueur[i].nom << " (" << i+1
                        << ") de proposer un mot." << endl;
      cout << "(Les autres joueurs ne regardent pas)" << endl;

      cout << "Entrez le mot proposé : ";
      string mot;
      cin >> mot;

      // efface l'écran de façon rudimentaire (40 lignes ici)
      for (int j(0); j < 40; j++) cout << endl;

      // cree la forme affichée du mot à deviner
      string mot_trouve;
      for (unsigned int j(0); j < mot.size(); ++j) mot_trouve += '.';

      do {
        for (unsigned int j(0);
                  (j < nb_joueurs) && (mot_trouve != mot);
                  ++j)
        {
            if ((j != i) && (joueur[j].etape < nb_etapes))
            {
              cout << endl << "MOT : " << mot_trouve << endl;
              cout << "Joueur " << joueur[j].nom << " (" << j+1
                      << ") prposez une lettre : ";
              char lettre;
              cin >> lettre;

              if (bonne_lettre(lettre, mot_trouve, mot))
              {
                  cout << "Bravo : " << mot_trouve << endl;
                  if (mot_trouve == mot)
                  {
                    ++(joueur[j].point);
                    cout << "-> GAGNE !" << endl;
                  }
              }
              else
              {
                  ++(joueur[j].etape);
                  cout << "Pas de chance : " << endl;
                  cout << pendu[joueur[j].etape] << endl;
                  if (joueur[j].etape >= nb_etapes)
                  {
                    cout << "-> PERDU !" << endl;
                    ++(joueur[i].points);
                  }
              }
            }
        }
      } while (mot_trouve != mot);
  }

  // resultats :
  cout << endl
          << "La partie est finie." endl
          << "Résultats : " << endl;
  for (unsigned int j(0); j < nb_joueurs; ++j)
  {
      cout << "Joueur " << joueur[j].nom << " (" << j+1 << ") ";
      if (joueur[j].etape < nb_etapes)
      {
        cout << "encore en vie ! et avec "
                << joueur[j].points << " point";
        if (joueur[j].points > 1) cout << 's';
        cout << '.';
      }
      else
      {
        cout << "pendu... (points : " << joueur[j].points << ")";
      }
      cout << endl;
  }

    return 0;
}

--> il y a une Seg Fault.
--> il manque un compteur d'essais restants.
--> il manque de quoi stocker les lettre déjà tentées et la verification qui en decoule.
Revenir en haut Aller en bas
romain
Rang: Administrateur
romain


Nombre de messages : 346
Date d'inscription : 01/08/2004

exercice corrigé 2 : jeu du pendu Empty
MessageSujet: Re: exercice corrigé 2 : jeu du pendu   exercice corrigé 2 : jeu du pendu EmptyMer 28 Sep à 16:56

Code:
#include <iostream>
#include <vector>
using namespace std;

const int nb_etapes(13);

string pendu[nb_etapes] = {
   "\n\n\n\n\n_________",
   "\n  |\n  |\n  |\n  |\n__|_____",
   "\n  |\n  |\n  |\n  |\n_/|_____",
   "\n  |\n  |\n  |\n  |\n_/|\\____",
   "  _____\n  |\n  |\n  |\n  |\n_/|\\____",
   "  _____\n  |/\n  |\n  |\n  |\n_/|\\____",
   "  _____\n  |/  |\n  |\n  |\n  |\n_/|\\____",
   "  _____\n  |/  |\n  |    0\n  |\n  |\n_/|\\____",
   "  _____\n  |/  |\n  |    0\n  |    I\n  |\n_/|\\____",
   "  _____\n  |/  |\n  |  _0\n  |    I\n  |\n_/|\\____",
   "  _____\n  |/  |\n  |  _0_\n  |    I\n  |\n_/|\\____",
   "  _____\n  |/  |\n  |  _0_\n  |    I\n  |  /\n_/|\\____",
   "  _____\n  |/  |\n  |  _0_\n  |    I\n  |  / \\\n_/|\\____",
};

struct Joueur{
   string nom;
   int points;
   int etape;
};

bool bonne_lettre(char l, string& mot, string ref)
{
   bool retour = false;
   for (unsigned int i(0); i < ref.size(); ++i)
      if ((ref[i] == l) && (mot[i] != l))
      {
         mot[i] = l;
         retour = true;
      } 
           return retour;
}

int main()
{
   cout << "Nombre de joueurs : ";
   unsigned int nb_joueurs;
   cin >> nb_joueurs;

   vector< Joueur > joueur(nb_joueurs);

   // saisie des noms des joueurs et initialisation
   for (unsigned int i(0); i < nb_joueurs; ++i)
   {
      cout << "Nom du joueur " << i+1 << " : ";
           cin >> joueur[i].nom;
           joueur[i].points = 0;
                joueur[i].etape = -1;
    }
   
   // jeu à tour de rôle
   for (unsigned int i(0); i < nb_joueurs; ++i)
   {
      cout << "Au joueur " << joueur[i].nom << " (" << i+1
               << ") de proposer un mot." << endl;
           cout << "(Les autres joueurs ne regardent pas)" << endl;
           cout << "Entrez le mot proposé : ";
           string mot;
           cin >> mot;
      // efface l'écran de façon rudimentaire (40 lignes ici)
           for (int j(0); j < 40; j++) cout << endl;
      // cree la forme affichée du mot à deviner
      string mot_trouve;
      for (unsigned int j(0); j < mot.size(); ++j) mot_trouve += '.';
      do {
        for (unsigned int j(0);(j < nb_joueurs) && (mot_trouve != mot);++j)
          {
            if ((j != i) && (joueur[j].etape < nb_etapes))
            {
         cout << endl << "MOT : " << mot_trouve << endl;
         cout << "Joueur " << joueur[j].nom << " (" << j+1
             << ") proposez une lettre : ";
         char lettre;
         cin >> lettre;
         if (bonne_lettre(lettre, mot_trouve, mot))
         {
           cout << "Bravo : " << mot_trouve << endl;
           cout << "Il vous reste encore " << nb_etapes - joueur[j].etape << "essais" << endl;
           if (mot_trouve == mot)
           {
             ++(joueur[j].points);
             cout << "-> GAGNE !" << endl;
           }
         }
         else
         {
           ++(joueur[j].etape);
           cout << "Pas de chance : " << endl;
           cout << "Il vous reste encore " << nb_etapes - joueur[j].etape << "essais" << endl;
           if (joueur[j].etape >= nb_etapes)
           {
             cout << "-> PERDU !" << endl;
             ++(joueur[i].points);
             mot_trouve = mot;
           }
           else
           {
           cout << pendu[joueur[j].etape] << endl;
           }
         }
            }
          }
      } while (mot_trouve != mot);
   }
   
   // resultats :
   cout << endl
       << "La partie est finie." << endl
       << "Résultats : " << endl;
   for (unsigned int j(0); j < nb_joueurs; ++j)
   {
     cout << "Joueur " << joueur[j].nom << " (" << j+1 << ") ";
     if (joueur[j].etape < nb_etapes)
     {
       cout << "encore en vie ! et avec "
       << joueur[j].points << " point";
       if (joueur[j].points > 1) cout << 's';
       cout << '.';
     }
     else
     {
       cout << "pendu... (points : " << joueur[j].points << ")";
     }
     cout << endl;
   }
   return 0;
}

--> Manque de quoi stocker les caractères déjà choisis.
Revenir en haut Aller en bas
Contenu sponsorisé





exercice corrigé 2 : jeu du pendu Empty
MessageSujet: Re: exercice corrigé 2 : jeu du pendu   exercice corrigé 2 : jeu du pendu Empty

Revenir en haut Aller en bas
 
exercice corrigé 2 : jeu du pendu
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
loka :: Informatique :: Programmation :: C et C++ :: C++-
Sauter vers:  
Ne ratez plus aucun deal !
Abonnez-vous pour recevoir par notification une sélection des meilleurs deals chaque jour.
IgnorerAutoriser