Débutant en c++/pendu

Fermé
Nobbie_cpp_31 Messages postés 5 Date d'inscription mercredi 7 décembre 2011 Statut Membre Dernière intervention 8 décembre 2011 - 7 déc. 2011 à 14:01
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 21 déc. 2011 à 08:02
Bonjour à tous;

Je suis débutant en programmation et dans le cadre de mon projet informatique, le pendu, j'ai rencontré un problème que je n'arrive pas à résoudre;
Je me doute que ce n'et pas un problème compliquer à résoudre mais je ne vois pas qu'elle est le problème.
Le but de se programme étant donc de découvrir un mot caché en un nombre d'essais limités voici les lignes de code qui me pose problème:





void verification_saisie(int &proposition_joueur, char masque_joueur[TAILLE_MAX])
{
int i;
char lettre;
char mot_cache[TAILLE_MAX];
bool trouve;
trouve = false;
proposition_joueur = 4;


//inistialisation de la chaine de charactere masque_joueur a la valeur nulle
for(i=0; i<=TAILLE_MAX-1;i++)
{
masque_joueur = 0;
}


//defintion d'un mot type dédié a la vérification
char mot_type[TAILLE_MAX];
cout << "Veuillez entrer un mot dedie a la verification : "<< endl;
cin.getline(mot_type,TAILLE_MAX);
strcpy (mot_cache, mot_type);


//debut de la verification


cout << "Veuillez proposer une lettre : "<< endl;
cin >> lettre;
cin.ignore();

cout << endl;
cout << "avant la boucle for "<<endl;
cout << "masque joueur : "<< masque_joueur<< endl;
cout << "mot cache : "<< mot_cache<< endl<<endl;

for (i=0; i<=strlen(mot_cache)-1;i++)
{
if (lettre == mot_cache)
{
masque_joueur = lettre;
trouve = true;
cout <<"i = "<< i <<" dans le if " <<"masque joueur : "<< masque_joueur<< endl;
}

else
{
cout <<"i = "<<i <<" dans le else "<<"masque joueur : "<< masque_joueur<< endl;
}

}


cout<<endl;

if (trouve == true)
{
cout << "Votre proposition est correcte!"<<endl;
cout << "Votre nombre de proposition(s) restante(s) est de :"<< proposition_joueur<< endl;
cout << "Votre masque est : "<< masque_joueur << endl;
}
else
{
proposition_joueur = proposition_joueur - 1;
cout << "Votre propostion n'est pas correcte!"<< endl;
cout << "Votre nombre de proposition(s) restante(s) est de :"<< proposition_joueur<< endl;
cout << "Votre masque est : "<< masque_joueur << endl;
}
}








int main()
{
int difficulte, i,proposition_joueur;


char masque_joueur[TAILLE_MAX];


verification_saisie(proposition_joueur, masque_joueur);
cout << " Votre nombre de proposition est de : " << proposition_joueur<<endl;


system ("pause");
return 0;
}





La chaîne de charactères mot cache me sert au développement de ce module et le masque joueur sera afficher au joueur;
Je m'attends donc à ce que soit présent dans ce masque toutes les occurrences des lettres trouvées dans le mot caché cependant lors de mon test sur concole je rentre le mot caché coucou et je propose soit la lettre "c" ou "o":
-Pour la lettre "c" le masque est seulement "c " il ne met qu'une occurence.
-Pour la lettre "o" le masque est nulle.
Et je peux voir que je suis passer par la boucle for et qu'une lettre a été trouvée;

Voilà si vous pouviez m'aidez à supprimer ce bug de fonctionnement et m'expliquer le problème;

Meerci d'avance
A voir également:

7 réponses

Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
7 déc. 2011 à 21:32
Re.
Bon alors
1) ce code ne fait absolument pas ce que tu veux qu'il fasse. Ceci prouve que tu ne sais pas ce qu'est un pointeur ni un tableau en C.
Je répète, laisse tombé mes tableaux de caractère et utilise les string

2) En C++, on inclus <string> sans le ".h". C'est bien de l'inclure, mais le mieux c'est de l'utiliser.

3) C'est bon, ça je connais ;-)

4)
5) C'est déjà mieux comme ça. Déduits en une conclusion pour le 1).


Globalement, ton algorithme n'est pas clair. On s'attendrait à trouver une boucle sur le nombre de proposition, entre autre. Utilises les balises de code pour mettre ton code, parceque déjà qu'il n'est pas très bien écrit, sans indentation, c'est presque illisible.
2
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
7 déc. 2011 à 16:15
for(i=0; i<=TAILLE_MAX-1;i++)
{
masque_joueur = 0;
}

C'est censé faire quoi ? réfléchi, rien à voir avec le commentaire.
En fait, de maniière générale, tu utilises la variable masque_joueur n'importe comment.
Comme tu fais du C++, utilises donc std::string à la place de tableaux de caractères brut, ça sera plus simple et tu aura moins d'erreurs. Accessoirement, tu pourrai aussi essayer d'avoir une approche objet.
0
Nobbie_cpp_31 Messages postés 5 Date d'inscription mercredi 7 décembre 2011 Statut Membre Dernière intervention 8 décembre 2011
7 déc. 2011 à 16:54
Je suis débutant en informatique et j'ai vraiment besoin d'aide alors je vais essayer d'etre plus explicite.
Dans un premier temps je vais répondre à ta question et je vais expliquer le principe du pendu,ce qui j'espère te permettra de comprendre ce que j'ai voulu faire avec ma ligne de code


1)Ce code me permet d'initialiser la chaine de charactères masque_joueur a la valuer nulle.



for(i=0; i<=TAILLE_MAX-1;i++)
{
masque_joueur = 0;
}

2)J'ai mis au début de mon programme (mais je n'est pas tout copier pour que ce soit trop lourd), je pense que c'est ce que tu me disais de mettre?

#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <string.h>




3)Le principe du pendu est de découvrir un mot caché( mot_caché) en un nombrre d'essai limité (proposition_joueur).
Le joueur propose une lettre qui est censé se trouvé dans le mot caché, si elle se trouve efectivement dans le mot caché son masque (masque_joueur), qui est au affiché sous forme de tiret se rafraichit et indique visualement à l'utilisateur la postion de la lettre trouvé dans le mot_caché.


4)A partir de "début de vérification", je met un charactere dans lettre et je verife si elle se trouve dans mot_caché.
Si c'est le cas cette lettre doit se trouver dans masque_joueur au même endroit où elle se touve dans mot caché

5) Il y a une erreur dans le code précèdent

for (i=0; i<=strlen(mot_cache)-1;i++)
{
if (lettre == mot_cache[i])
{
masque_joueur[i] = lettre;
trouve = true;
cout <<"i = "<< i <<" dans le if " <<"masque joueur : "<< masque_joueur<< endl;
}
0
Nobbie_cpp_31 Messages postés 5 Date d'inscription mercredi 7 décembre 2011 Statut Membre Dernière intervention 8 décembre 2011
7 déc. 2011 à 22:47
Comment fais-tu pour mettre des balise de code?
Et la différence entre le tableaux de caractère et le string c'est quoi au juste?
J'ai cru comprendre que les string adapter automatiquement la longueur...
Merci je vais essayer avec les string demain et chercher plus.
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
8 déc. 2011 à 08:36
Lorsque tu écris un message, juste au dessus de la fenêtre de saisi, tu as une petite barre avec
B I S <>
ba c'est le dernier bouton.
La différence entre tableau de caractère et string, c'est que string est un objet. Plus concretement, ils s'utilisent à peu près pareil sur les acces. Mais String est plus intuitif pour les comparaisons, les affectations etc. https://en.cppreference.com/w/cpp/string/basic_string
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Nobbie_cpp_31 Messages postés 5 Date d'inscription mercredi 7 décembre 2011 Statut Membre Dernière intervention 8 décembre 2011
7 déc. 2011 à 22:52
Autre question dans ma boucle quand je code:

masque_joueur[i]= ...

Je "demande au programme" de faire quoi? (même si je vais laisser tomber cette idée)

Merci encore;
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
8 déc. 2011 à 08:37
là ça vient des pointeur. masque_joueur[i] fait référence à la case 'i' du tableau masque_joueur. le = permet de modifier cette valeur.
0
Nobbie_cpp_31 Messages postés 5 Date d'inscription mercredi 7 décembre 2011 Statut Membre Dernière intervention 8 décembre 2011
8 déc. 2011 à 18:03
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <string>
#include <time.h>

#define Debutant 11
#define Intermediaire 9
#define Expert 7



using namespace std;

void verification_saisie(int &proposition_joueur, string masque_joueur) // Le prototype n est pas terminee
{
int i; // Définition d'une variable locale
string lettre; // La saisie utilisateur est stockée dans lettre
string mot_cache; // Définition locale d'un mot caché pour la vérification
bool trouve; // Booléen indiquant si une variable a été trouvé,je m'en sers pas encore
trouve = false;
proposition_joueur = 4;

size_t found; // Utilisation de l'operaeur find


//inistialisation de la chaine de charactere masque_joueur a la valeur nulle pour une premiere etape de test

masque_joueur.clear();

//Saisie d'un mot caché destiné à une vérification locale

cout << "Veuillez entrer un mot dedie a la verification : \t";
cin >> mot_cache;
cout << endl;


//Vérifiaction : la lettre est-elle dans le mot caché?

cout << "Veuillez proposez une lettre : \t";
cin >> lettre;
cin.ignore();
cout << endl;



found=mot_cache.find_first_of(lettre); //Trouve l'indice de la lettre cache et la met dans indice

while (found!=string::npos)
{
cout <<"lettre trouve : \t"<<found<<'\n'<<'\n'; //Dédié a la verification,affiche l'indice
masque_joueur.insert(found,lettre); // Insère dans le masque la lettre saisie par l'utilisateur à l'indice ou elle
//a etre trouvee
found=mot_cache.find_first_of(lettre,found+1);
}
cout <<"masque_joueur : \t"<<masque_joueur<<endl;

}
int main()
{
int difficulte, i,proposition_joueur;



verification_saisie(proposition_joueur, masque_joueur);
cout << " Votre nombre de proposition est de : " << proposition_joueur<<endl;


system ("pause");
return 0;
}





Voilà mon programme modifié, maintenant j'ai un pbque lorsque je rentre un mot caché pour tester ce bout de programmme:

*Si je propose pour mot caché:coucou et que je propose comme lettre c, la console m'affiche


***********CONSOLE*************
Veuillez entre un mot dédié a la vérfication : coucou
Veuillez proposer une lettre : c
lettre trouve : 0
lettre trouve : 4
******************************

Il ne m'affiche pas mon masque!

*Cependant si il y a une seule occurence; par exemple mot caché:pendu et je propose comme lettre c, la console m'affiche

***********CONSOLE*************
Veuillez entre un mot dédié a la vérfication : pendu
Veuillez proposer une lettre : p
lettre trouve : 0
masque_joueur : p
******************************

La il m'affiche mon masque,

Probleme:

Je ne comprends pas d'ou peux provenir ce bug :(
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
8 déc. 2011 à 21:15
Je suis impressionné, ton code est nettement mieux. Par contre, toujours pas de balise de code, pourtant c'est facile !
J'avoue ne pas très bien comprendre d'où vient ton problème.
Ce que je ferai qui serait plus beau, c'est virer le masque_joueur.clear()
mais le modifier ainsi :
masque_joueur=std::string(mot_cache.size(),'*');

et à la place d'insert, j'utiliserai tout simplement l'affectation :
masque_joueur[found]=lettre[0];
simple détail, j'aurai conservé lettre comme char
0
Nobbie_cpp_31
20 déc. 2011 à 11:37
Merci,j'ai résolu ce problème provenait effectivementde ce masque_joueur.clear().
Voilà mon code encore une fois modiifé:
#include <iostream>
#include <iomanip>
#include <cstdlib> //Utilisation de srand()
#include <string>   //Utilisation des chaînes de caractères string
#include <ctime>   //Utilisation de time()
#include <vector>
#include <fstream>  //Utilisation de ifstream



#define Debutant 9
#define Intermediaire 7
#define Expert 5
#define Max_Char 50 //Nombres de caractères maximum dans une ligne du fichier texte



using namespace std;

//=======Définition des fonctions=========

void verification_mot(string &mot_cache,bool &gagne);
void verification_saisie(int &proposition_joueur, string masque_joueur,string mot_cache);
void afficher_pendu(int proposition_joueur);
int niveau(int difficulte);
bool choix_aide(bool &aide);
void selection_mot(string &mot_cache);
void mode_jeu(bool &mode_jeu, string &mot_cache);

//====Probleme à régler====
    //-->niveau empecher de rentrer un autre choix que 1,2 et 3
    //-->pour les autres empechement; empecher de rentrer une lettre
    //-->que faire en cas ou le joueur propose la derniere lettre qui revele le mot cache
    //-->mode 2 joueurs
    //-->statistique
    //-->Pb du srand
    //-->Pb des lettres deja essayee dans verification_saisie
    //-->Pb de sortie du jeu(while) dans verification saisie

void afficher_entete()
{
    int i;
    for(i=0;i<=78;i++){cout << '=';}cout<<endl;
    for(i=0;i<=78;i++){cout << '=';}cout<<endl;
    for(i=0;i<=15;i++){cout << '=';}cout<<" __"<<' '<<" _"<<' '<< " " <<"   "<<"  " <<' '<<"        "<<" _"<<" "<<"  _";for(i=0;i<=11;i++){cout << ' ';}for(i=0;i<=22;i++){cout << '=';}cout<<endl;
    for(i=0;i<=15;i++){cout << '=';}cout<<"  |"<<' '<<"|_"<<' '<<"| |"<<"   "<<"|\\"<<' '<<"| |   "  <<"|_|"<<" "<<"|_"" ""|\\ |"" ""|\\"" | |";for(i=0;i<=22;i++){cout << '=';}cout<<endl;
    for(i=0;i<=15;i++){cout << '=';}cout<<"|_|"<<' '<<"|_"<<' '<<"|_|"<<"   "<<"|/" <<' '<<"|_|   "  <<"|  "<<" "<<"|_"" ""| \\|"" ""|/ ""|_|" ;for(i=0;i<=22;i++){cout << '=';}cout<<endl;
    for(i=0;i<=78;i++){cout << '=';}cout<<endl;
    for(i=0;i<=78;i++){cout << '=';}cout<<endl;
    cout<<endl<<endl<<endl;
}

//==============================Programme prinicpal================================//
int main()
{
    int difficulte, i,proposition_joueur,indice,indice_mot;
    bool aide_repetition,aide;
    bool jeu,choix_jeu;
    string masque_joueur,mot_cache;

    int tentative;
    srand(time(NULL));

    //afficher_entete();

//Choix du mode de jeu

    //mode_jeu(jeu,mot_cache);
    //cout << "le mode jeu est : "<<boolalpha<<mode_jeu <<endl;


//Choix du niveau de difficulté

    proposition_joueur = niveau(difficulte);
    //system ("cls");

//sélection du mot
    selection_mot(mot_cache);

//Début du jeu

    verification_saisie(proposition_joueur, masque_joueur,mot_cache);

//========================Dédié au test========================//

//Test de vérification mot

    //verification_mot(string mot_cache);




    system ("pause");
    return 0;

}

void selection_mot(string &mot_cache)
{
    //Déclaration des variables locales
    string nombres_mots,str;    //Récupération du nombre de mots présents dans le fichier texte
    int intermediaire_calcul,indice_mot,ligne;
    int nb_lignes=0;
    ifstream fichier("liste_mot.txt", ios::in);  // on ouvre le fichier en lecture

        if(fichier)  // si l'ouverture a réussi
        {
                //Boucle pour compter le nombres de lignes du fichier texte

                while(fichier.ignore(Max_Char, '\n'))
                {
                    nb_lignes++;
                }
                //cout<< "le nombre de lignes est : "<<nb_lignes<<endl;

                //Replacement au début du fichier
                fichier.clear();        //La fonction membre clear remet à leur état d'origine les 4 flags de fstream.

                fichier.seekg(0, ios::beg); //Le premier argument de seekg est le premier octect où se placer
                                            //et le deuxieme argument est l'endroit du fichier à partir duquel ce situe cette ocete
                                            //soit l'octet inidqué depuis le début du fichier ios::beg


                //=====A revenir==========//
                intermediaire_calcul = rand();
                cout << "intermediaire calcul = "<< intermediaire_calcul<<endl;
                indice_mot = intermediaire_calcul*nb_lignes/ RAND_MAX;
                cout <<"indice_mot = " << indice_mot <<endl;

                //Boucle pour se placer dans une ligne du fichier texte et récupérer le mot de la ligne
                //indicé aléatoirement par indice_mot

                for(ligne=0; ligne<=indice_mot;ligne++)
                {
                    //Pour se positionner, nous ignorons tous les caracteres d'une lingne tant qu'il y en a
                    //moins que Max_Char
                    fichier.ignore(Max_Char, '\n');
                }

                //Récupération du mot_cache
                getline(fichier,mot_cache);
                cout << "Le mot cache est : "<< mot_cache <<endl;

                fichier.close();  // Fermeture du fichier
        }
        else
        {
             // sinon
                cerr << "Impossible d'ouvrir le fichier !" << endl;
        }
}

//Méthode qui vérifie si la lettre saisie par l'utilisateur se trouve dans le mot caché
void verification_saisie(int &proposition_joueur, string masque_joueur, string mot_cache)
{

//===Défintion des variables locales===

    int i;                  // Définition d'une variable locale
    char lettre;            // La saisie utilisateur est stockée dans lettre
    //string mot_cache;       // Définition locale d'un mot caché pour la vérification
    bool jeu;               // Booléen indiquant si il reste des propositions au joueur donc si il reste en jeu
    bool gagne;             // Booléen retourné de la fonction vérification_mot qui inidque la fin de la partie
    bool deja_essayee;      // Booléen retourne de la fonction saisie_deja_propossee qui indique si la lettre saisie
                            // se trouve dans le masque_joueur

//============Initialisation============

    jeu    = true;          //Le joueur est en jeu
    gagne  = false;         //Le joueur n'a pas gagné
    //proposition_joueur = 5; //Pour l'instant je force propostion_joueur=5

    size_t found;           // Utilisation de l'operaeur find_first_of
    size_t found_saisie;    // Utilisation de l'operaeur find_first_of



//Saisie d'un mot caché destiné à une vérification locale

    //cout << "Veuillez entrer un mot dedie a la verification : \t";
    //cin  >> mot_cache;


//Inistialisation de la chaine de charactere masque_joueur sous forme de 'x' et de la taille de mot_cache

    masque_joueur.insert(0, mot_cache.length(), 'x');


//===================================================================================
//=============================Début du jeu==========================================
//===================================================================================


    do
    {
        //system("cls");

        //===========test==============
        //cout << "jeu : "<< jeu<<endl;
        //=============================

        afficher_entete();
        cout << "Votre masque est : "<<'\t'<< masque_joueur<<'\n'<<endl;
        afficher_pendu(proposition_joueur);
        cout << "Votre nombre(s) de proposition est de : "<<'\t'<<proposition_joueur<<endl;

        do
        {
            cout << "Veuillez proposez une lettre : \t";
            cin  >> lettre;
            cin.ignore();
            cout << endl;
//==!!!!!!!!!!!!Ca fait pas exactement ce que je veux emepeche les repetitions a la condition ou la lettre est deja dans masque_joueur!!!!
//========================Boucle de vérification de répétition de saisie==============================

            //Définition de found qui trouve l'indice de la première occurence du caractère lettre
            //dans mot caché et la retourne dans found


            found_saisie=masque_joueur.find_first_of(lettre);


        //*******************La lettre n'a pas déjà été saisie *************************

            if (found_saisie == string::npos)
            {
                //cout <<"La lettre n a pas deja ete saisie"<<endl;
                deja_essayee=false;
            }
        //*******************************************************************************


        //*********************La lettre a déjà été saisie ******************************
            else
            {
                //cout << "La lettre a deja ete saisie"<< endl;
                deja_essayee=true;

            }
//========================Fin de la boucle de vérification de répétion de saisie=========================

        cout << "deja essayee = "<< boolalpha<< deja_essayee<<endl;

        }
        while(deja_essayee != false);

//=============Boucle de comparaison entre la lettre saisie et le mot caché==============================


    //***********La lettre ne se trouve pas dans le mot caché *****************

        //Définition de found qui trouve l'indice de la première occurence du caractère lettre
        //dans mot caché et la retourne dans found

        found=mot_cache.find_first_of(lettre);

        if (found == string::npos)
        {
            proposition_joueur = proposition_joueur - 1;
            cout << "Votre  proposition n'est pas correcte \!"<<'\n'<<endl;
            cout << "Votre nombre de propositions est de :"<<'\t'<< proposition_joueur<<endl;
        }
    //***************************************************************************




    //*******************La lettre se trouve dans le mot caché ******************


        else
        {
            while (found!=string::npos)                           //Boucle pour parcourir tout le mot
            {
                cout <<"lettre trouve : \t"<<found<<endl;        //Dédié a la verification,affiche l'indice de la lettre trouvée
                masque_joueur[found]= lettre;                    // Insère dans le masque la lettre saisie par l'utilisateur à l'indice ou elle
                                                                 //a été trouvée
                found=mot_cache.find_first_of(lettre,found+1);
            }
        }
    //*****************************************************************************




        //*************************Apppel de vérification mot**************************



        cout << "Votre masque est : "<<'\t'<< masque_joueur<<'\n'<<endl;
        verification_mot(mot_cache,gagne);
        cout <<"gagne = "<<boolalpha<<gagne<<endl;    //=========TEST+============

        //******************************************************************************

        //Mise a jour de jeu

        if (proposition_joueur == 0)
        {
            jeu = false;
        }
        else{}
        cout << "jeu = "<< jeu<<endl;
    }


//===================================================================================
//=============================Jeu terminé===========================================
//===================================================================================


    while (gagne != true || jeu!= false);
    //while(jeu != false);
   //while (jeu!=false || gagne == false);


    cout <<"Vous avez perdu !!!"<<'\n'<<endl;
    cout <<"Le mot a decouvrir etait : "<<'\t'<<mot_cache<<endl;

//===================================================================================
//=============================Fin du jeu============================================
//===================================================================================

}

//Méthode qui vérifie si le mot saisie pas l'utilisateur est le mot à deviner
void verification_mot(string &mot_cache,bool &gagne)
{

//===Défintion des variables locales===

    int choix,i;
    string mot;
    gagne = false;
    bool choix_jeu; //Booléen pour forcer le joueur a effectué un choix entre un et deux
//**********************************Réservé au test ************************************************//

    //cout << "mot cache : "<<'\t'<<mot_cache<<'\n'<<endl;


//**************************************************************************************************//


//***********************************Choix joueur *************************************************//

    cout << "Voulez vous proposez un mot suceptible d"<<'\''<<'\x88'<<"tre le mot cach\x82 ?"<<endl;

    cout << '\t' << "1_ Oui"<<endl;
    cout << '\t' << "2_ Non"<<endl;

    do
    {
        cin  >> i;
        cin.ignore();
        choix = i;


//===Mise a jour de choix_jeu===
        if(choix==1)
        {
            choix_jeu = true;
        }
        else
        {
            if(choix==2)
            {
                choix_jeu = true;
            }
            else
            {
                choix_jeu = false;
                cout << "Veuillez rentrez un choix entre 1 et 2"<<endl;
            }
        }
    }
//**************************************************************************************************//

    while(choix_jeu != true);
//***********************************Verification du mot********************************************//
    if (choix == 1) //Le joueur choisit de proposer un mot
    {
    //Saisie d'un mot à vérifier avec le mot caché

        cout << "Veuillez entrez un mot suceptible d etre le mot cache : \t";
        cin  >> mot;
        cout << endl;


    //Comparaison de la saisie utilisateur avec le mot caché


        if (mot.compare(mot_cache)!=0)
        //Cette opérateur renovie un valeur nulle si tous les caractères comparées sont identiques
        {
            cout << "Votre propositon n'est pas le mot \x85 deviner"<<endl;
        }


        else
        {
            cout << "Vous avez gagn\x82!"<<endl;
            cout << "Le mot \x85 deviner ""\x82""tait effectivement :\t"<<mot_cache<<endl;
            gagne=true;
            cout << "gagne = "<< gagne<<endl;
        }

    }
//**************************************************************************************************//




//***************************Le joueur ne propose pas de mot ***************************************//


   else
    {
        cout << "Vous pourrez proposer un mot plus tard"<<endl;
    }
//**************************************************************************************************//


    //system("cls");
}


//Méthode qui affecte le nombre de propositon disponible par le joueur selon le niveau de
//difficulté choisit
int niveau(int difficulte)
{
    afficher_entete();

    int i, proposition_joueur;

    cout << "Veuilllez entrez votre niveau de difficult\x82"":" << '\n'<<endl;
    cout << '\t'<<"1_ D""\x82""butant" << endl;
    cout << '\t'<<"2_ Interm""\x82""diaire"<< endl;
    cout << '\t'<<"3_ Expert"       << endl;
    cin>>i;
    cin.ignore();
    difficulte = i;

/* Boucle définissant le nombre de propositions*/
        if (difficulte == 1)
        {
         cout << "Vous avez choisit le niveau de difficulte Debutant" << endl;
         proposition_joueur = Debutant;
        }

        else
        {

            if (difficulte == 2)
            {
                cout << "Vous avez choisit le niveau de difficulte Intermediaire" << endl;
                proposition_joueur = Intermediaire;
            }

            else
            {
            cout << "Vous avez choisit le niveau de difficulte Expert" << endl;
            proposition_joueur = Expert;

            }
        }
        return   (proposition_joueur);
}

//Méthode qui affiche le graphique du pendu selon le nombre de proposition(s) restant(e)s
void afficher_pendu(int proposition_joueur)
{
	switch(proposition_joueur)
	{
	    case 9:
			cout << endl;
			cout << "              " << endl;
			cout << "              " << endl;
			cout << "              " << endl;
			cout << "              " << endl;
			cout << "              " << endl;
			cout << "              " << endl;
			cout << "     ------   " << endl;
			cout << endl;
			break;

	    case 8:
			cout << endl;
			cout << "              " << endl;
			cout << "              " << endl;
			cout << "              " << endl;
			cout << "        |      " << endl;
			cout << "        |      " << endl;
			cout << "        |      " << endl;
			cout << "     ------   " << endl;
			cout << endl;
			break;

	    case 7:
			cout << endl;
			cout << "        |     " << endl;
			cout << "        |     " << endl;
			cout << "        |     " << endl;
			cout << "        |     " << endl;
			cout << "        |     " << endl;
			cout << "        |     " << endl;
			cout << "     ------   " << endl;
			cout << endl;
			break;

	    case 6:
			cout << endl;
			cout << "      --|     " << endl;
			cout << "        |     " << endl;
			cout << "        |     " << endl;
			cout << "        |     " << endl;
			cout << "        |     " << endl;
			cout << "        |     " << endl;
			cout << "     ------   " << endl;
			cout << endl;
			break;

		case 5:
			cout << endl;
			cout << "     |--|     " << endl;
			cout << "        |     " << endl;
			cout << "        |     " << endl;
			cout << "        |     " << endl;
			cout << "        |     " << endl;
			cout << "        |     " << endl;
			cout << "     ------   " << endl;
			cout << endl;
			break;

		case 4:
			cout << endl;
			cout << "     |--|     " << endl;
			cout << "     O  |     " << endl;
			cout << "        |     " << endl;
			cout << "        |     " << endl;
			cout << "        |     " << endl;
			cout << "        |     " << endl;
			cout << "     ------   " << endl;
			cout << endl;
			break;

		case 3:
			cout << endl;
			cout << "     |--|     " << endl;
			cout << "     O  |     " << endl;
			cout << "    /|  |     " << endl;
			cout << "        |     " << endl;
			cout << "        |     " << endl;
			cout << "        |     " << endl;
			cout << "     ------   " << endl;
			cout << endl;
			break;

		case 2:
				cout << endl;
			cout << "     |--|     " << endl;
			cout << "     O  |     " << endl;
			cout << "    /|\\ |     " << endl;
			cout << "        |     " << endl;
			cout << "        |     " << endl;
			cout << "        |     " << endl;
			cout << "     ------   " << endl;
			cout << endl;
			break;

		case 1:
			cout << endl;
			cout << "     |--|     " << endl;
			cout << "     O  |     " << endl;
			cout << "    /|\\ |     " << endl;
			cout << "     -  |     " << endl;
			cout << "    /   |     " << endl;
			cout << "        |     " << endl;
			cout << "     ------   " << endl;
			cout << endl;
			break;

		case 0:
			cout << endl;
			cout << "     |--|     " << endl;
			cout << "     O  |     " << endl;
			cout << "    /|\\ |     " << endl;
			cout << "     -  |     " << endl;
			cout << "    / \\ |     " << endl;
			cout << "        |     " << endl;
			cout << "     ------   " << endl;
			cout << endl;
			break;
	}
}



J'ai encore quelques problèmes;

1) Le plus important ma condition de sortie du jeu dans verification_saisie ne marche pas
2)Dans selection_mot j'ai l'impression que mon srand() n'est pas totalement effectif; j'ai une séquence de nombre qui ne sont séparé que d'une centaine d'unité a chaque fois
3)Dans verification_mot j'ai essayé d'empecher l'utilisateur d'entrer un autre choix qu' 1 ou 2 mais le pb est que si celui rentre une lettre le porgramme tourne sur lui_meme
4)Dans verification_saisie la boucle de répétition de saisie....c'est un peu n'importe quoi(je sais pas ce qui met passé par la tete quand j'ai codé ca) en fait ce bout de code ne verfie que si une lettre est deja dans le masque_joueur pas si elle a deja ete rentree. Je vais essayer de trouver une solution...

Et voila je crois que c'est à peu près tout;merci d'avance
0
Nobbie_cpp_31
20 déc. 2011 à 11:39
Et je sais pas si la j'ai bien mis les balise de code?!
Voilà,encore merci
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
20 déc. 2011 à 12:31
1) pas compris
2) je ne comprends pas le problème, je n'ai rien vu de débile
3) au lieu de lire un entier, lit un caractère:
char choix;
...
do{
cin>>choix;
}while(choix!='1'&&choix!='2');
éventuellement, tu peux revenir après à un entier.
4) travail un peu alors.
NB : tu as bien utiliser les balises, mais il y a beaucoup de code inutile (commenté)
0
Nobbie_cpp_31
20 déc. 2011 à 12:48
Alors désolé pour les codes en commentaires,j'ai peur en supprimant ces lignes d'enlever des choses importantes;

1)Alors a la fin du jeu je teste mes booléens dans le while(qui détermine la fin du jeu, of course).
mon test est : while (gagne != true || jeu!= false);

Mais par exemple lorsque je n'ai plus de proposition mon booléen 'jeu' passe a false mais je ne sort pas de la boucle.

Je sais que c'est un problème vraiment bête mais je ne vois pas du tout d'ou ça vient mais j'imagine de ma condition.

2)Moi aussi je comprends pas voila a près quelques test les valeurs que j'obtient pour intermediare_calcul=19342,19407,19655,19744 etc...
Ca donne une incrémentation de cette valeur mais pas une generation aleatoire; ce qui ce reporte sur mon indice de mot pas du tout aleatoire!
En gros vu le calcul que je fais: indice_mot = intermediaire_calcul*nb_lignes/ RAND_MAX;
Ca me défile un par un les mots de mon fichier texte.

3)Ok,je vais tester

4)Et oui;la pas le choix lol c'étais pour préciser ;)
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
21 déc. 2011 à 08:02
&& c'est le "et" logique. Si tu as tapé exactement ça, je ne voi pas d'où vient le problème.
pour tes nombres aléatoire, le problème doit être ailleurs, fait plus d'affichages pour debuguer ligne à ligne.
0