Jeu du mot caché (style pendu)

Soyez le premier à donner votre avis sur cette source.

Vue 28 164 fois - Téléchargée 1 642 fois

Description

Ce jeu est connu de tous, ici c'est l'ordinateur qui choisi un mot dans le fichier texte mots.txt contenant les mots qui seront utilisés pour le jeu. Il suffit alors de proposer des lettres pour retrouver le mot caché. Au bout de 12 erreurs le programme considère que vous avez perdu et vous dévoile le mot caché. sinon si vous trouvez le mot vous avez gagné.
amusez vous bien.

PROBLEME : ce programme est un de mes tout premiers programmes, et il n'est pas du tout orienté objet, mais peut etre une version objet viendra un jour. ;-)

Source / Exemple :


#include <iostream.h>
#include <conio.h>
#include <fstream.h>
#include <stdio.h>
#include <math.h>

int main( )
{
//---------------------------------------Initialisation des variables
  char tableau[100],tableau2[100],tableau3[100],lettre,deja[26];
  for (int i=0;i!=100;i++){tableau2[i]='\0';tableau3[i]='\0';}
 do{
  randomize();
  for (int i=0;i!=26;i++)deja[i]='\0';
  int x,y,fautes=0,coups=0,cpt=0,cptlettres=0;
  bool gagne,perdu,okplay;
  gagne=okplay=perdu=false;
  ifstream lecture;
//-------------------------------------------

//choix d'un mot dans la base de données
  lecture.open("mots.txt");
   x=random(45);//suivant le nombre de mots dans le fichier texte
  for(x;x!=0;x--)lecture>>tableau;
//----------------------------------------------

  for(int i=0;tableau[i]!='\0';i++){
    cpt+=1;
    tableau2[i]='_';}

  do{clrscr();
//affichage fautes-------------------
  switch (fautes){
          case 1: gotoxy(20,10);textcolor(0x9);cprintf("_");break;

          case 2: gotoxy(20,10);textcolor(0x9);cprintf("_ _");break;

          case 3: gotoxy(20,10);textcolor(0x9);cprintf("_ _ _");break;

          case 4: gotoxy(20,10);textcolor(0x9);cprintf("_ _ _");
          gotoxy(25,11);textcolor(0xA);cprintf("I");break;

          case 5: gotoxy(20,10);textcolor(0x9);cprintf("_ _ _");
            gotoxy(25,11);textcolor(0xA);cprintf("I");gotoxy(25,12);cprintf("I");break;

          case 6:  gotoxy(20,10);textcolor(0x9);cprintf("_ _ _");
          gotoxy(25,11);textcolor(0xA);cprintf("I");gotoxy(25,12);cprintf("I");gotoxy(25,13);cprintf("I");break;

          case 7:  gotoxy(20,10);textcolor(0x9);cprintf("_ _ _");
          gotoxy(25,11);textcolor(0xA);cprintf("I");gotoxy(25,12);cprintf("I");gotoxy(25,13);cprintf("I");
          gotoxy(20,13);textcolor(0xE);cprintf("    _");break;

          case 8: gotoxy(20,10);textcolor(0x9);cprintf("_ _ _");
            gotoxy(25,11);textcolor(0xA);cprintf("I");gotoxy(25,12);cprintf("I");gotoxy(25,13);cprintf("I");
            gotoxy(20,13);textcolor(0xE);cprintf("  _ _");break;

          case 9: gotoxy(20,10);textcolor(0x9);cprintf("_ _ _");
            gotoxy(25,11);textcolor(0xA);cprintf("I");gotoxy(25,12);cprintf("I");gotoxy(25,13);cprintf("I");
            gotoxy(20,13);textcolor(0xE);cprintf("_ _ _");break;

          case 10: gotoxy(20,10);textcolor(0x9);cprintf("_ _ _");
          gotoxy(25,11);textcolor(0xA);cprintf("I");gotoxy(25,12);cprintf("I");gotoxy(25,13);cprintf("I");
          gotoxy(20,13);textcolor(0xE);cprintf("_ _ _");
            gotoxy(19,13);textcolor(0xC);cprintf("I");break;

          case 11 :gotoxy(20,10);textcolor(0x9);cprintf("_ _ _");
          gotoxy(25,11);textcolor(0xA);cprintf("I");gotoxy(25,12);cprintf("I");gotoxy(25,13);cprintf("I");
          gotoxy(20,13);textcolor(0xE);cprintf("_ _ _");
          gotoxy(19,13);textcolor(0xC);cprintf("I");
          gotoxy(19,12);textcolor(0xC);cprintf("I");break;

          case 12:gotoxy(20,10);textcolor(0x9);cprintf("_ _ _");
          gotoxy(25,11);textcolor(0xA);cprintf("I");gotoxy(25,12);cprintf("I");gotoxy(25,13);cprintf("I");
          gotoxy(20,13);textcolor(0xE);cprintf("_ _ _");
          gotoxy(19,13);textcolor(0xC);cprintf("I");
          gotoxy(19,13);textcolor(0xC);cprintf("I");
          gotoxy(19,11);textcolor(0xC);cprintf("I");break;
          x=random(50);
    };
//---------------------------------------------------------------------

//---affichage interface de jeu -------------------------
    gotoxy(5,1);textcolor(0xF);cprintf("Trouvez le mot cache");
    gotoxy(9,3); for(int i=0;tableau2[i]!='\0';i++)cout<<tableau2[i]<<' ';
    gotoxy(30,2);
    textcolor(0xA);cprintf("Nombre de coups : ");cout<<coups;
    gotoxy(30,3);
    textcolor(0xC);cprintf("Nombre de fautes : ");cout<<fautes;
    gotoxy(30,4);
    textcolor(0xE);cprintf("Droits a l'erreur : ");cout<<12-fautes;
    cout<<endl<<endl;textcolor(0xF);cprintf("Proposez une lettre ");
    cout<<endl;textcolor(0xB);cprintf("Lettres deja proposees : ");cout<<deja;
    gotoxy(21,6);
    cin>>lettre;
//---------------------------------------------------------------------------

  for (int i=0;i!=26;i++)
  {
//si la lettre a déja été proposée -------------------------------------------------
    if (lettre==deja[i])
    {
    clrscr();
    cout<<"cette lettre a deja ete proposee, appuyez sur entree"<<endl;
    okplay=false;
    cin.get();cin.get();
    break;break;
    }
// sinon enregistrer la lettre dans le tableau des lettres déja proposées-----
    else{ if (deja[i]=='\0' && deja[0]!=lettre && deja[1]!=lettre && deja[2]!=lettre && deja[3]!=lettre && deja[4]!=lettre && deja[5]!=lettre && deja[6]!=lettre && deja[7]!=lettre && deja[8]!=lettre&& deja[9]!=lettre&& deja[10]!=lettre&& deja[11]!=lettre&& deja[12]!=lettre&& deja[13]!=lettre&& deja[14]!=lettre && deja[15]!=lettre && deja[16]!=lettre && deja[17]!=lettre && deja[18]!=lettre && deja[19]!=lettre&& deja[20]!=lettre && deja[21]!=lettre && deja[22]!=lettre && deja[23]!=lettre && deja[24]!=lettre && deja[25]!=lettre){
      deja[i]=lettre;
      okplay=true;
    }
    }
    }
//----recherche si la lettre corresspond a un lettre du mot chaché -----
  if (okplay==true){
    for(int i=0;tableau2[i]!='\0';i++)
      tableau3[i]=tableau2[i];
    for(int i=0;tableau[i]!='\0';i++){
      if (lettre==tableau[i])
      {
        tableau2[i]=lettre;
        cptlettres+=1;
         }
      else {
        if (tableau2[i]=='\0' || tableau2[i]=='_')
        {
          tableau2[i]='_';
        }
        }
      }
//----------------------------------------------------------------
//--- si la lettre n'est pas dans le mot alors comptaliser la faute
      int a=0,b=0;
       for(int i=0;tableau2[i]!='\0';i++){
         a=a+tableau2[i];
         b=b+tableau3[i];}
       if (b==a)
    fautes++;
//------------------------------------------------------------
    coups+=1; }

//---si le mot est déchiffré alors c'est gagné-------------
  if(cptlettres==cpt){
    gagne=true;
    break;}
//-------------------------------------------------------------------

//--------sinon au bout de 12 erreurs c'est perdu----------------
  if (fautes==12){
    perdu=true;
    break;}
//--------------------------------------------------------------
  }while (gagne!=true || perdu!=true);
  if (gagne==true)
  {clrscr();
      cout<<endl<<"vous avez gagne"<<endl<<"le mot etait : "<<tableau<<" BRAVO !!!";}

  if(perdu==true)
  {clrscr();gotoxy(20,1);textcolor(0x9);cprintf("_ _ _");
    gotoxy(25,2);textcolor(0xA);cprintf("I");gotoxy(25,3);cprintf("I");gotoxy(25,4);cprintf("I");
    gotoxy(20,4);textcolor(0xE);cprintf("_ _ _");
    gotoxy(19,4);textcolor(0xC);cprintf("I");
    gotoxy(19,3);textcolor(0xC);cprintf("I");
    gotoxy(19,2);textcolor(0xC);cprintf("I");
    gotoxy(1,5);cout<<endl<<"vous avez perdu"<<endl<<"le mot etait : "<<tableau;}

    cout<<endl<<"voulez vous recommencer avec un nouveau mot a chercher ? (o/n) ";

    cin>>lettre;
    if( lettre=='n')break;
}while (1);

return 0;
  }

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

garslouche
Messages postés
584
Date d'inscription
mardi 26 novembre 2002
Statut
Membre
Dernière intervention
29 mai 2015
-
Initié pour ça ? C'est un peu prétentieux il me semble...

Pour ce qui est de la programmation :
- tu ferais mieux d'utiliser plusieurs fonctions plutôt qu'un gros main
- les commentaires sont bien utilisés je trouve (ni trop ni trop peu). En revanche mettre 50 tirets dans le commentaire ne sert à rien si tu tiens compte de ma remarque précédente...
- tu ne fais aucun contrôle sur ce que saisit le joueur. Il peut saisir # ou & ou @ et c'est compté comme une erreur. Pire, les caractères accentués et les majuscules sont comptés comme des erreurs (ta liste de mots étant en minuscule). Tu devrais prévoir ce genre de contrôle.
- je trouve ton indentation moyennement lisible. Tu n'es pas cohérent : un coup tu saut une ligne après une accolade, un coup non, un coup tu mets plusieurs tabulations, ...
- la ligne "else{ if (deja[i]=='\0' && deja[0]!=lettre && deja[1]!=lettre && deja[2]!=lettre && deja[3]!=lettre && deja[4]!=lettre && deja[5]!=lettre && deja[6]!=lettre && deja[7]!=lettre && deja[8]!=lettre&& deja[9]!=lettre&& deja[10]!=lettre&& deja[11]!=lettre&& deja[12]!=lettre&& deja[13]!=lettre&& deja[14]!=lettre && deja[15]!=lettre && deja[16]!=lettre && deja[17]!=lettre && deja[18]!=lettre && deja[19]!=lettre&& deja[20]!=lettre && deja[21]!=lettre && deja[22]!=lettre && deja[23]!=lettre && deja[24]!=lettre && deja[25]!=lettre){" est proche du blasphéme informatique !!! Un petit FOR serait tellement mieux! (et même j'en ferais une fonction à part si j'étais toi). Et pour information tu peux écrire "else if" sans avoir besoin d'accolade entre le else et le if.
- il me semble que tu abuse aussi des "break". Toujours la même remarque : avec plusieurs fonctions tu pourrais faire plus lisible et maintenable

Bonne prog
Penguin_X
Messages postés
31
Date d'inscription
jeudi 19 février 2004
Statut
Membre
Dernière intervention
29 mai 2005
-
Mon dieu vive l'orienté objet !
cs_florian15
Messages postés
11
Date d'inscription
jeudi 19 février 2004
Statut
Membre
Dernière intervention
31 janvier 2007
-
je reconnais que ce n'est pas du tout objet tout cela, vous avez raison, c'est un mes tout premier programme merci d'etre indulgent.

;-)
Penguin_X
Messages postés
31
Date d'inscription
jeudi 19 février 2004
Statut
Membre
Dernière intervention
29 mai 2005
-
Le code est très bien par exemple. C'est qu'avec l'orienté objet ça éclaircie le programme :)
jibus514
Messages postés
1
Date d'inscription
mardi 21 juin 2005
Statut
Membre
Dernière intervention
21 juin 2005
-
bonjour,

je suis désolé, je débute en programmation.
Quand je lance le prog sous xcode (sur mac) il me dit que ya plein d'erreurs...?

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.