Partage
  • Partager sur Facebook
  • Partager sur Twitter

Aide jeu des nombres et boucle [C++]

    31 octobre 2007 à 16:30:10

    Bonjour,
    voila j'ai suis en train de travailler sur le jeu du nombre aléatoire (le même que celui disponible dans le tuto C) que j'essaye de complété au mximum avec notamment 3 niveaux de difficulté, un compteur de coup...(J'ai refait le jeux sous C++ car j'ai choisi d'opter pour ce language pour mes projets avenir).

    J'ai réussi à le mettre en place, il me reste plus qu'a rajouter une petite ligne pour permettre au joueur de rejouer. Cependant, j'au un bug que je ne comprend pas, pour choisir un niveau de difficulté je procède par exemple ainsi :

    Citation : code


    cout << endl;
    cout << "######## Niveau de difficulte ########" << endl;
    cout << "1. Facile : de 1 a 100" << endl;
    cout << "2. Moyen : de 1 a 1000" << endl;
    cout << "3. Difficile : de 1 a 10 000" << endl << endl;

    int difficulte = 0, MIN = 1, MAX = 100, nombreEssai = 10;
    do {
    cout << "Veuillez maintenent selectionnez le niveau de difficulte (Tapez 1, 2 ou 3 ): ";
    cin >> difficulte;
    }while(difficulte != 1 && difficulte != 2 && difficulte != 3);



    Ca fonctionne bien quand l'utilisateur est rigoureu et qu'il tape bien un chiffre, mais lorsqu'il tape une lettre ou tout autre caractère j'ai la boucle qui plante... elle defile en continue..

    Y'a t'il un remede à cela ou suis-je obliger de m'y plier?

    Merci de votre aide...je suis un vrai débutant (je precise lol)
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      31 octobre 2007 à 16:37:27

      Utilise les balise de code et non pas la citation la prochaine fois ;) .
      1. cout << endl;
      2. cout << "######## Niveau de difficulte ########" << endl;
      3. cout << "1. Facile : de 1 a 100" << endl;
      4. cout << "2. Moyen : de 1 a 1000" << endl;
      5. cout << "3. Difficile : de 1 a 10 000" << endl << endl;
      6. int difficulte = 0, MIN = 1, MAX = 100, nombreEssai = 10;
      7. do {
      8. cout << "Veuillez maintenent selectionnez le niveau de difficulte (Tapez 1, 2 ou 3 ): ";
      9. cin >> difficulte;
      10. }while(difficulte != 1 && difficulte != 2 && difficulte != 3);

      Ton problème vient (d'après moi) du fait que après avoir rentré le caractère le 'enter' fasse buger la suite.
      malheureusement j'ai un blanc là et je ne me souvient plus de l'astuce.

      Petit commentaire : ta condition est un peu 'bof' : si tu as quarante niveaux tu ne va pas mettre "difficulte != 1 && ... && difficulte != 40", tu mettras "difficulte >= 1 && difficulte <= 40" ;) .
      • Partager sur Facebook
      • Partager sur Twitter
        31 octobre 2007 à 16:42:44

        ah oui, c'est vrai j'avai oublier ça...les caractere d'espace sont pris en compte c'est pas une truc du genre '/O' ??

        Je vai revoir les améliorations par la suite, la c'est très très moyen mai je veux surtout que ça marche, ensuite j'essayerai de rendre le code le plus propre et simple possible puis je vous le montrerai...

        et merci de maider c'est sympa
        • Partager sur Facebook
        • Partager sur Twitter
          31 octobre 2007 à 16:47:51

          Tu peux te servir de la fonction isdigit() qui renvoie 0 si le caractère d'entrée n'est pas un chiffre.
          • Partager sur Facebook
          • Partager sur Twitter
            31 octobre 2007 à 17:02:11

            Voila

            1. int joueur = 0;
            2.     do {
            3.       cout << "Veuillez selectionner le nombre de joueurs (Tapez 1 ou 2) : ";
            4.       cin >> joueur;
            5.       cout << endl;
            6.     }    
            7.     while(joueur != 1 && joueur != 2 && !isdigit(joueur));


            Donc j'ai remarquer une chose, c'est qu'a priori, le probleme serait du fait que joueur soit un int et que si je met une lettre il aime pas ça car il ne comprend pas d'ou le plantage.... J'ai une solution mais je veux pas l'utiliser car certe ça marchera mais j'aurai toujours pas résolu ce problème (c'est de définir mes menu à l'aide de char avec a. b. ... la ça plante pas...).

            Donc si je me trompe pas il faudrai que je lise d'abord le caractere et si c''est un nombre c'est bon je passe à la boucle sinon je recommence. NON?
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              31 octobre 2007 à 17:06:27

              Citation : def_bond19

              Donc si je me trompe pas il faudrai que je lise d'abord le caractere et si c''est un nombre c'est bon je passe à la boucle sinon je recommence. NON?

              Oui c'est bien ça.
              • Partager sur Facebook
              • Partager sur Twitter
                31 octobre 2007 à 17:32:54

                est ce que getchar ets compatible avec des int?
                • Partager sur Facebook
                • Partager sur Twitter
                  31 octobre 2007 à 17:47:44

                  Bon je calle pour le moment je revérai ça ^tête reposer parce que la.. j'ai les neuronnes qui chauffent...aie aie aie..

                  Merci :) je reviendrai (i'll be back) lol
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    31 octobre 2007 à 17:52:55

                    Tiens un site de référence assez bon : http://www.cppreference.com/ . Fais-y quelques recherches.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      31 octobre 2007 à 18:05:13

                      Les solutions proposées ci-dessus marchent peut-être mais ce ne sont pas les meilleures.

                      Le mieux est encore d'effectuer la choses suivante:
                      1. int a;
                      2. do{
                      3. cin >> a;  //Ceci plante si le caractère entré n'est pas un int
                      4. if(cin.fail()){//si il y a une erreur avec cin
                      5. cin.clear();
                      6. string poubelle;
                      7. getline(cin,poubelle); //On vide le cin dans une variable poubelle
                      8. cout << "Entrez un nombre !!" << endl;
                      9. }
                      10. }while("Condition sur les int")


                      On peut sûrement faire mieux avec des exceptions, mais ce n'est pas nécessaire d'aller si loin pour ça.
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
                        31 octobre 2007 à 18:10:03

                        Solution complète et propre
                        (Ce n'est pas que les autres ne sont pas bonnes)

                        http://cpp.developpez.com/faq/cpp/?page=console#SL_cin_verify
                        • Partager sur Facebook
                        • Partager sur Twitter
                          2 novembre 2007 à 11:37:57

                          merci beaucoup pour tous ces liens je pense qu'ils me seront d'une aide précieuse je plancherai sur le jeu dès que j'ai le temps...au fait j'ai amélioré la condition de !=1; !=2 ...etc en <0 et >3. (Quand on est plongé dans le code on a parfois un manque de logique terrible.)

                          J'espere que j'arriverai à progrésser et pouvoir créer des applications, car j'adore vraiment ça

                          Merci bcp :)
                          • Partager sur Facebook
                          • Partager sur Twitter
                            2 novembre 2007 à 13:54:13

                            Citation : def_bond19

                            merci beaucoup pour tous ces liens je pense qu'ils me seront d'une aide précieuse je plancherai sur le jeu dès que j'ai le temps...au fait j'ai amélioré la condition de !=1; !=2 ...etc en <0 et >3. (Quand on est plongé dans le code on a parfois un manque de logique terrible.)

                            J'espere que j'arriverai à progrésser et pouvoir créer des applications, car j'adore vraiment ça

                            Merci bcp :)



                            C'est en remettant son propre code en cause lorsqu'il nous semble boiteux qu'on apprend! Tu es sur la bonne voie, ne lâche pas :D
                            • Partager sur Facebook
                            • Partager sur Twitter
                              3 novembre 2007 à 16:08:24

                              Voila j'ai pondu ça avec les divers adresses que vous m'avez fournis et ça marche super.
                              Donc je vais essayer ensuite de faire une fonction vu que je l'utilise plusieurs fois.

                              1. int joueur = 0;                    
                              2.     do {
                              3.       cout << "Veuillez selectionner le nombre de joueurs (Tapez 1 ou 2) : ";
                              4.       cin >> joueur;
                              5.       if (cin.fail()){
                              6.             cout << "ATTENTION !!! Saisie incorrecte (choix possible 1 ou 2), recommencez\n";
                              7.             cin.clear();
                              8.             cin.ignore( numeric_limits<streamsize>::max(), '\n' );
                              9.       }  
                              10.     }    
                              11.     while(joueur <= 0 || joueur > 2);



                              :)
                              • Partager sur Facebook
                              • Partager sur Twitter
                                3 novembre 2007 à 18:36:23

                                voici personellement comment je fais:
                                1. template<class Type>
                                2. Type Input(char Limit = '\n')
                                3. {
                                4.   Type T;
                                5.   while(!(std::getline(std::cin, T, Limit)))
                                6.   {
                                7.       std::cin.clear();
                                8.       std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
                                9.   }
                                10.   return T;
                                11. }
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  5 novembre 2007 à 10:19:34

                                  Merci Chlab_lak mais je pense être encore trop débutant pour comprendre toutes fonctions que tu a utilisé et leur utilité. en tout cas j'en prend note je retomberai surement sur des fonctions qui me seront utiles dans le futur.

                                  EDIT : Voila J'ai a peu près fini ça à l'air de foncitonner sans soucis, vous pourrez me dire ce qui pourrait être améliorer et les raisons (pour me permettre de mieu comprendre).

                                  le main :

                                  1. #include <iostream>
                                  2. #include <string>
                                  3. #include <time.h>
                                  4. #include <ctype.h>
                                  5. #include <limits>
                                  6. #include "header.h"
                                  7. using namespace std;
                                  8. int main()
                                  9. {
                                  10.     char jouer = 'O';
                                  11.     while(jouer == 'O') {
                                  12.     cout << "================== Bienvenue sur le jeux des nombres =================\n\n";
                                  13.     cout << "######## Nombres de joueurs ########" << endl;
                                  14.     cout << "1. Un Joueur" << endl;
                                  15.     cout << "2. Deux joueurs" << endl << endl;
                                  16.     // Menu N°1 : ====================> Nombre de joueurs
                                  17.     int nbJoueur = 0, i = 0; //creation variable nbJoueur et i (pour définir l'intevalle MAX)                  
                                  18.     cout << "Veuillez selectionner le nombre de joueurs (Tapez 1 ou 2) : ";  
                                  19.     if(testvariable(nbJoueur, 2)) {
                                  20.        cout << "Vous avez choisi de jouer a " << nbJoueur << " joueur(s)" << endl;
                                  21.     }
                                  22.     // Saisie du nombre de joueur
                                  23.     cout << "\n######## Niveau de difficulte ########" << endl;
                                  24.     cout << "1. Facile    : de 1 a 100" << endl;
                                  25.     cout << "2. Moyen     : de 1 a 1000" << endl;
                                  26.     cout << "3. Difficile : de 1 a 10 000" << endl << endl;
                                  27.     // Menu N°2 : =================> niveau de difficulté
                                  28.     int difficulte = 0, MIN = 1, MAX = 100, nombreEssai = 10; //Creation variable difficulté, min, max et nombre Essai
                                  29.     cout << "Veuillez maintenent selectionnez le niveau de difficulte (Tapez 1, 2 ou 3 ): ";
                                  30.     if(testvariable(difficulte, 3)) {
                                  31.        cout << "Vous avez choisi le niveau de difficulte " << difficulte << endl;                        
                                  32.     }
                                  33.     //Saisie du nombre de joueur                            
                                  34.     switch(difficulte) {
                                  35.        case 2 :
                                  36.        MAX = 1000;
                                  37.        nombreEssai = 10;
                                  38.        break;
                                  39.        case 3 :
                                  40.        MAX = 10000;
                                  41.        nombreEssai = 15;
                                  42.        break;
                                  43.        default :
                                  44.        MAX = 100;
                                  45.        nombreEssai = 10;              
                                  46.        break;        
                                  47.     }
                                  48.     //Modification des variables selon la difficuté choisie
                                  49.     int nombreMystere = 0; //Creation de la variable nombreMystere (nombre à trouver)    
                                  50.     if(nbJoueur == 1) {
                                  51.        srand(time(NULL));
                                  52.        nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;      
                                  53.     }
                                  54.     else {
                                  55.       cout << "\nJoueur 1 : Merci de choisir choisir un nombre compris entre ";
                                  56.       cout << MIN << " et " << MAX << " : ";
                                  57.       if(testvariable(nombreMystere, MAX)); //vérification de la saisie == if() {}                
                                  58.     }
                                  59.     //Choix du nombre mystère (aléatoire ou manuel selon de nombre de joueurs)
                                  60.     int nombre = 0; //creation de la variable nombre (nombre saisie par le joueur)
                                  61.     if (nbJoueur == 2) {
                                  62.       cout << "Joueur 2 : ";      
                                  63.     }      
                                  64.     cout << "Veuillez tapez un nombre compris entre ";
                                  65.     cout << MIN << " et " << MAX << " : ";  
                                  66.     if(testvariable(nombre, MAX)) {
                                  67.        cout << "Vous avez choisi le nombre " << nombre << endl;                        
                                  68.     }
                                  69.     //Saisie de l'utilisateur => choix du nombre
                                  70.     while(nombre != nombreMystere && nombreEssai>0) {  
                                  71.          if(nombre < nombreMystere) {
                                  72.             cout << endl << "c'est Plus" << endl;
                                  73.          }    
                                  74.          else if(nombre > nombreMystere) {
                                  75.             cout << endl << "c'est Moins" << endl;
                                  76.          }
                                  77.       nombreEssai--;
                                  78.       cout << "Il ne vous reste plus que " << nombreEssai << " essai(s), Reessayez : ";
                                  79.       if(testvariable(nombre, MAX)); //vérification de la saisie == if() {}
                                  80.     }
                                  81.     if(nombre == nombreMystere) {
                                  82.        cout << "Felicitation vous avez Gagne, le nombre mystere etait bien " << nombreMystere << endl;
                                  83.     }
                                  84.     else {
                                  85.       cout << "Vous avez Perdu, le nombre mystere etait " << nombreMystere << endl;
                                  86.     }
                                  87.      do {
                                  88.      cout << "Voulez vous rejouer ? O ou N" << endl;
                                  89.      cin >> jouer;
                                  90.      jouer = toupper(jouer);
                                  91.      } while (jouer != 'O' && jouer != 'N');    
                                  92.     }
                                  93.     system("PAUSE");
                                  94.     return 0;
                                  95. }


                                  la fonction de test sur les données entrer par l'utilisateur :


                                  1. #include <iostream>
                                  2. #include <limits>
                                  3. using namespace std;
                                  4. bool testvariable(int &variable, int i) {
                                  5.      while(!(cin >> variable) || variable <= 0 || variable > i) {
                                  6.         if (cin.eof()) {
                                  7.             // ^D  (^Z sous windows); Fin du flux d'entree!
                                  8.             return false;
                                  9.         }
                                  10.         else if (cin.fail()){
                                  11.             cin.clear();
                                  12.             cin.ignore( numeric_limits<streamsize>::max(), '\n' );
                                  13.             cout << "ATTENTION !!! Saisie incorrecte, Recommencer : ";
                                  14.         }
                                  15.         else {
                                  16.         cout << "ATTENTION !!! Le chiffre doit etre compris entre 1 et " << i << " ";
                                  17.         cout << "\nrecommencez : ";
                                  18.         }
                                  19.       }
                                  20.       return true;            
                                  21. }
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    6 novembre 2007 à 11:57:07

                                    Voila j'ai posté mon code, vous en pensez quoi??
                                    J'aimerai savoir si il y a possibilité de l'amélioré (le rendre plus propre surtout)
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      7 novembre 2007 à 15:15:52

                                      Petit up, est ce que quelqu'un pourrait me dire ce qu'il en pense? y a t'il moyen d'améliorer quelque chose?


                                      Merci ;)
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        7 novembre 2007 à 18:30:56

                                        Bon alors quelques remarques en vrac:

                                        1) srand() doit être appelé 1 et une seule fois. C'est pas le cas ici.
                                        2) Ta fonction main est un peu longue. On préfère habituellement ne pas dépasser ~80 lignes pour une fonction. Surtout que là tu pourrais bien séparer entre menu et jeu.
                                        3) pourquoi et time.h ?
                                        4) Pourquoi string t'en utilises pas ?
                                        5) Tu utilises des variables comme boolen, pourquoi ne pas les déclarer comme tel ?

                                        6) Tiens j'avais jamais vu la fonction toupper. C'est du C, donc on peut faire mieux, d'ailleurs si tu utilises des booleens ca sera mieux.

                                        7) On évite généralement les noms de variables en majuscule, on réserve cela pour les constantes.

                                        Voilà, sinon globalement c'est du bon boulot. Là j'ai pinaillé pas mal mais tu avais l'air d'insister pour recevoir des remarques !

                                        A+


                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
                                          8 novembre 2007 à 10:36:34

                                          Bonjour, merci pour tes remarque je vais retravailler tous ça (après ça je vais continue mon pendu en C++).

                                          Par contre une question...parce que j'ai pas encore toute la logique de la POO, ne devrais-je pas créer une class pour mes menu?? est-ce aproprié pour mon cas?

                                          en tou cas merci de m'avoir porté un peu d'intéret lol

                                          Allé hop hop hop au boulot

                                          EDIT :
                                          1) J'ai lever le srand(time(NULL)) (a priori ça sert juste a initialiser le rand non?) ça marche (j'ai effectuer divers test aucune influence sur le nombre)

                                          2) En cours...

                                          3) et 4) je les ai enlevé effctivement je m'en servais pas, il me semble les avoir utilisé puis j'ai renoncer par la suite.

                                          5) De quelle variable parles-tu? de "jouer" je pense non??

                                          6) Je vois pas d'autre moyen pour les majuscules, d'autant plus que sur toutes mes recherches je tombe sur cette fonction (les gens l'utilisent donc a tord et a travers :s) Apparement j'ai vu un site ou il parlait de tester le caractère comme ça :

                                          1. #include<iostream>
                                          2. using namespace std;
                                          3. int main()
                                          4. {
                                          5. char a,b;
                                          6. cout<<"Tapez un caractere : ";cin>>a;
                                          7. if( a>='A' && a<='Z')
                                          8.   {cout<<"Vous avez tapé une majuscule."<<endl;
                                          9.   b=a+('a'-'A');
                                          10.   cout<<"La minuscule correspondante est "<<b<<endl;
                                          11.   }
                                          12.   else if( a>='a' && a<='z')
                                          13.   {cout<<"Vous avez tapé une minuscule."<<endl;
                                          14.   b=a+('A'-'a');
                                          15.   cout<<"La majuscule correspondante est "<<b<<endl;
                                          16.   }
                                          17.   else cout<<"Vous n'avez pas tapé une lettre."<<endl;
                                          18. return 0;
                                          19. }


                                          Est-ce une bonne manip? vu que je débute j'ai pas l'esprit super logique

                                          7) C'est fait.
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            8 novembre 2007 à 18:28:25

                                            à propos de srand : il est nécessaire!

                                            Le random dans un ordinateur c'est un pointeur sur un énorme tableau de valeurs statiques! Alors le pointeur est toujours placé au début pour un programme : résultat la liste est toujours la même. solution? srand()!

                                            srand va permette de déplacer le pointeur de randomisation à partir d'un nombre qu'on lui passe et dois donc être appeler qu'une seule fois. Pour la valeur passée en paramètre, quelle est la seule variable dans un ordinateur qu'on peut être certains qu'elle sera différente entre chaque démarrage d'un programme? Le temps! C'est pourquoi on utilise la forme d'initialisation du hazard ainsi :

                                            1. srand( time( 0 ) );


                                            time() est une fonction C défini dans <time.h> ou <ctime> en C++ moderne. voilà!
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              8 novembre 2007 à 19:18:12

                                              Pour la 5, je parle effectivement de jouer

                                              Pour ce qui est du srand(), comme l'a dit Mattex il vaut mieux le mettre même si apparemment ça marche sans.

                                              Bon pour la fonction de conversion majuscule-minuscule, le code que tu fournis est correct. Il te suffit donc de la mettre dans ton programme (en enlevant les cout<< par exemple).

                                              Vu comme tu as codé le reste, je pense que tu dois réussir à comprendre comment la fonction marche.

                                              A+ et reviens si t as des questions
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                              Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
                                                9 novembre 2007 à 19:47:44

                                                Rebonjour,

                                                Bon j'ai rebosser un peut tout ça mais j'ai un petit problème lors de la compilation par rapport a une class que j'ai creer (pour afficher les menus), je comprend pas ça marche que la class se trouve entiere dans le main.cpp mai dès que je sépare en 2 fichier (menu.h et menu.cpp) j'ai une erreur [linkererror]undefined reference blabla bla

                                                menu.cpp
                                                1. #include <iostream>
                                                2. #include "menu.h"
                                                3. #include "fonctions.h"
                                                4. using namespace std;
                                                5. void afficherMenuJoueur(int &nbJoueur) {
                                                6.     cout << "######## Nombres de joueurs ########" << endl;
                                                7.     cout << "1. Un Joueur" << endl;
                                                8.     cout << "2. Deux joueurs" << endl << endl;
                                                9.     cout << "Veuillez selectionner le nombre de joueurs (Tapez 1 ou 2) : ";
                                                10.     if(testvariable(nbJoueur, 2)) { // Saisie du nombre de Joueur
                                                11.      cout << "Vous avez choisi de jouer a " << nbJoueur << " joueur(s)" << endl;
                                                12.     }      
                                                13. }
                                                14. void afficherMenuDifficulte(int &difficulte) {  
                                                15.     cout << "\n######## Niveau de difficulte ########" << endl;
                                                16.     cout << "1. Facile    : de 1 a 100" << endl;
                                                17.     cout << "2. Moyen     : de 1 a 1000" << endl;
                                                18.     cout << "3. Difficile : de 1 a 10 000" << endl << endl;  
                                                19.     cout << "Veuillez maintenent selectionnez le niveau de difficulte (Tapez 1, 2 ou 3 ): ";
                                                20.     if(testvariable(difficulte, 3)) { // Saisie du niveau de difficulté
                                                21.      cout << "Vous avez choisi le niveau de difficulte " << difficulte << endl;                        
                                                22.     }
                                                23. }


                                                menu.h
                                                1. class Menu {
                                                2.   public :
                                                3.     void afficherMenuJoueur(int &nbJoueur);
                                                4.     void afficherMenuDifficulte(int &difficulte);  
                                                5. };


                                                1. #include <iostream>
                                                2. #include <ctype.h>
                                                3. #include <limits>
                                                4. #include "menu.h"
                                                5. #include "fonctions.h"
                                                6. using namespace std;
                                                7. int main() {
                                                8.     char jouer = 'O';
                                                9.     while(jouer == 'O') {
                                                10.     cout << "================== Bienvenue sur le jeux des nombres =================\n\n";
                                                11.     Menu afficherMenu;
                                                12.     int nbJoueur = 0;//creation variable nbJoueur  
                                                13.     afficherMenu.afficherMenuJoueur(nbJoueur); // Menu N°1 : ====================> Nombre de joueurs
                                                14.     int difficulte = 0; //creation variable difficluté
                                                15.     afficherMenu.afficherMenuDifficulte(difficulte);// Menu N°2 : =================> niveau de difficulté
                                                16.     int min = 1, max = 100, nombreEssai = 10; //Creation variable difficulté, min, max et nombre Essai
                                                17.     switch(difficulte) {
                                                18.        case 2 :
                                                19.        max = 1000;
                                                20.        nombreEssai = 10;
                                                21.        break;
                                                22.        case 3 :
                                                23.        max = 10000;
                                                24.        nombreEssai = 15;
                                                25.        break;
                                                26.        default :
                                                27.        max = 100;
                                                28.        nombreEssai = 10;              
                                                29.        break;        
                                                30.     }
                                                31.     //Modification des variables selon la difficuté choisie
                                                32.     int nombreMystere = 0; //Creation de la variable nombreMystere (nombre à trouver)    
                                                33.     if(nbJoueur == 1) {
                                                34.        srand(time(NULL));        
                                                35.        nombreMystere = (rand() % (max - min + 1)) + min;    
                                                36.     }
                                                37.     else {
                                                38.       cout << "\nJoueur 1 : Merci de choisir choisir un nombre compris entre ";
                                                39.       cout << min << " et " << max << " : ";
                                                40.       if(testvariable(nombreMystere, max)); //vérification de la saisie == if() {}                
                                                41.     }
                                                42.     //Choix du nombre mystère (aléatoire ou manuel selon de nombre de joueurs)
                                                43.     int nombre = 0; //creation de la variable nombre (nombre saisie par le joueur)
                                                44.     if (nbJoueur == 2) {
                                                45.       cout << "Joueur 2 : ";      
                                                46.     }      
                                                47.     cout << "Veuillez tapez un nombre compris entre ";
                                                48.     cout << min << " et " << max << " : ";  
                                                49.     if(testvariable(nombre, max)) {
                                                50.        cout << "Vous avez choisi le nombre " << nombre << endl;                        
                                                51.     }
                                                52.     //Saisie de l'utilisateur => choix du nombre
                                                53.     while(nombre != nombreMystere && nombreEssai>0) {  
                                                54.          if(nombre < nombreMystere) {
                                                55.             cout << endl << "c'est Plus" << endl;
                                                56.          }    
                                                57.          else if(nombre > nombreMystere) {
                                                58.             cout << endl << "c'est Moins" << endl;
                                                59.          }
                                                60.       nombreEssai--;
                                                61.       cout << "Il ne vous reste plus que " << nombreEssai << " essai(s), Reessayez : ";
                                                62.       if(testvariable(nombre, max)); //vérification de la saisie == if() {}
                                                63.     }
                                                64.     if(nombre == nombreMystere) {
                                                65.        cout << "Felicitation vous avez Gagne, le nombre mystere etait bien " << nombreMystere << endl;
                                                66.     }
                                                67.     else {
                                                68.        cout << "Vous avez Perdu, le nombre mystere etait " << nombreMystere << endl;
                                                69.     }
                                                70.     //Vérification si gagner ou pas
                                                71.      do {
                                                72.      cout << "Voulez vous rejouer ? O ou N" << endl;
                                                73.      cin >> jouer;
                                                74.      charUpper(jouer);
                                                75.      cout << jouer;
                                                76.      } while (jouer != 'O' && jouer != 'N');    
                                                77.      //Debuter une nouvelle partie ou quitter
                                                78.     }
                                                79.     system("PAUSE");
                                                80.     return 0;
                                                81. }


                                                Je comprend pas vraiment, je ne maîtrise pas encore les class, je commence a comprendre le principe (qui est dailleur fort interressant)

                                                merci à vous :)
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  9 novembre 2007 à 20:11:31

                                                  non non! pas de classe pour toi!!!

                                                  Commence par séparer ton main en petite fonction de maximum 15 lignes et quand tu sera habitué à séparer ton code ainsi tu pourras commencer les classes
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    12 novembre 2007 à 19:23:13

                                                    Rebonjour tout le monde

                                                    Alors voila le resultat, voila tout fonctionne j'ai utiliser les fonctions, je ne depasse pas les 90 lignes dans le main. Par contre juste une petite chose, je n'ai pas compris comment me servir du booleen pour la boucle pour rejouer... (enfin si j'ai trouver mais c'est plus long que ma methode) peut etre que quelquechose m'a echapper.

                                                    Si vous pouviez rejetter un dernier coup d'oeil.

                                                    Merci

                                                    le main.cpp

                                                    1. #include <iostream>
                                                    2. #include <ctype.h>
                                                    3. #include <limits>
                                                    4. #include "menu.h"
                                                    5. #include "fonctions.h"
                                                    6. using namespace std;
                                                    7. int main() {
                                                    8.     char jouer = 'O';
                                                    9.     while(jouer == 'O') {
                                                    10.     cout << "================== Bienvenue sur le jeux des nombres =================\n\n";
                                                    11.     int nbJoueur = 0;//creation variable nbJoueur  
                                                    12.     afficherMenuJoueur(nbJoueur); // Menu N°1 : ====================> Nombre de joueurs
                                                    13.     int difficulte = 0; //creation variable difficluté
                                                    14.     afficherMenuDifficulte(difficulte);// Menu N°2 : =================> niveau de difficulté
                                                    15.     int min = 1, max = 100, nombreEssai = 10; //Creation variable difficulté, min, max et nombre Essai
                                                    16.     switch(difficulte) {
                                                    17.        case 2 :
                                                    18.        max = 1000;
                                                    19.        nombreEssai = 10;
                                                    20.        break;
                                                    21.        case 3 :
                                                    22.        max = 10000;
                                                    23.        nombreEssai = 15;
                                                    24.        break;
                                                    25.        default :
                                                    26.        max = 100;
                                                    27.        nombreEssai = 10;              
                                                    28.        break;        
                                                    29.     }
                                                    30.     //Modification des variables selon la difficuté choisie
                                                    31.     int nombreMystere = 0; //Creation de la variable nombreMystere (nombre à trouver)    
                                                    32.     if(nbJoueur == 1) {
                                                    33.        srand(time(NULL));        
                                                    34.        nombreMystere = (rand() % (max - min + 1)) + min;    
                                                    35.     }
                                                    36.     else {
                                                    37.       cout << "\nJoueur 1 : Merci de choisir choisir un nombre compris entre ";
                                                    38.       cout << min << " et " << max << " : ";
                                                    39.       if(testvariable(nombreMystere, max)); //vérification de la saisie == if() {}                
                                                    40.     }
                                                    41.     //Choix du nombre mystère (aléatoire ou manuel selon de nombre de joueurs)
                                                    42.     int nombre = 0; //creation de la variable nombre (nombre saisie par le joueur)
                                                    43.     if (nbJoueur == 2) {
                                                    44.       cout << "Joueur 2 : ";      
                                                    45.     }      
                                                    46.     cout << "Veuillez tapez un nombre compris entre ";
                                                    47.     cout << min << " et " << max << " : ";  
                                                    48.     if(testvariable(nombre, max)) {
                                                    49.        cout << "Vous avez choisi le nombre " << nombre << endl;                        
                                                    50.     }
                                                    51.     //Saisie de l'utilisateur => choix du nombre
                                                    52.     testNombre(nombre, nombreMystere, nombreEssai, max); //on test le nombre pour savoir si c'est le bon
                                                    53.     if(nombre == nombreMystere) {
                                                    54.        cout << "Felicitation vous avez Gagne, le nombre mystere etait bien " << nombreMystere << endl;
                                                    55.     }
                                                    56.     else {
                                                    57.        cout << "Vous avez Perdu, le nombre mystere etait " << nombreMystere << endl;
                                                    58.     }
                                                    59.     //Vérification si gagner ou pas
                                                    60.      do {
                                                    61.      cout << "Voulez vous rejouer ? O ou N" << endl;
                                                    62.      cin >> jouer;
                                                    63.      charUpper(jouer);// mise en majuscule
                                                    64.      } while (jouer != 'O' && jouer != 'N');    
                                                    65.      //Debuter une nouvelle partie ou quitter
                                                    66.     }
                                                    67.     system("PAUSE");
                                                    68.     return 0;
                                                    69. }


                                                    fonction.cpp
                                                    1. #include <iostream>
                                                    2. #include <limits>
                                                    3. using namespace std;
                                                    4. char charUpper(char &caractere) {
                                                    5.       if(caractere >='A' && caractere <='Z');
                                                    6.       else if(caractere>='a' && caractere<='z') {
                                                    7.         caractere = caractere+('A'-'a');
                                                    8.         return caractere;
                                                    9.       }
                                                    10.       else {
                                                    11.          cout << "Vous n'avez pas tape une lettre." << endl;
                                                    12.       }
                                                    13. }  
                                                    14. bool testvariable(int &variable, int i) {
                                                    15.      while(!(cin >> variable) || variable <= 0 || variable > i) {
                                                    16.         if (cin.eof()) {
                                                    17.             // ^D  (^Z sous windows); Fin du flux d'entree!
                                                    18.             return false;
                                                    19.         }
                                                    20.         else if (cin.fail()){
                                                    21.             cin.clear();
                                                    22.             cin.ignore( numeric_limits<streamsize>::max(), '\n' );
                                                    23.             cout << "ATTENTION !!! Saisie incorrecte, Recommencer : ";
                                                    24.         }
                                                    25.         else {
                                                    26.         cout << "ATTENTION !!! Le chiffre doit etre compris entre 1 et " << i << " ";
                                                    27.         cout << "\nrecommencez : ";
                                                    28.         }
                                                    29.       }
                                                    30.       return true;            
                                                    31. }    
                                                    32. void testNombre(int &nombreUser, int &nombreMystere, int &nombreEssai, int &max) {    
                                                    33.     while(nombreUser != nombreMystere && nombreEssai>0) {  
                                                    34.          if(nombreUser < nombreMystere) {
                                                    35.             cout << endl << "c'est Plus" << endl;
                                                    36.          }    
                                                    37.          else if(nombreUser > nombreMystere) {
                                                    38.             cout << endl << "c'est Moins" << endl;
                                                    39.          }
                                                    40.       nombreEssai--;
                                                    41.       cout << "Il ne vous reste plus que " << nombreEssai << " essai(s), Reessayez : ";
                                                    42.       if(testvariable(nombreUser, max)); //vérification de la saisie == if() {}
                                                    43.     }
                                                    44. }


                                                    et

                                                    menu.cpp
                                                    1. #include <iostream>
                                                    2. #include "menu.h"
                                                    3. #include "fonctions.h"
                                                    4. using namespace std;
                                                    5. void afficherMenuJoueur(int &nbJoueur) {
                                                    6.     cout << "######## Nombres de joueurs ########" << endl;
                                                    7.     cout << "1. Un Joueur" << endl;
                                                    8.     cout << "2. Deux joueurs" << endl << endl;
                                                    9.     cout << "Veuillez selectionner le nombre de joueurs (Tapez 1 ou 2) : ";
                                                    10.     if(testvariable(nbJoueur, 2)) { // Saisie du nombre de Joueur
                                                    11.      cout << "Vous avez choisi de jouer a " << nbJoueur << " joueur(s)" << endl;
                                                    12.     }      
                                                    13. }
                                                    14. void afficherMenuDifficulte(int &difficulte) {  
                                                    15.     cout << "\n######## Niveau de difficulte ########" << endl;
                                                    16.     cout << "1. Facile    : de 1 a 100" << endl;
                                                    17.     cout << "2. Moyen     : de 1 a 1000" << endl;
                                                    18.     cout << "3. Difficile : de 1 a 10 000" << endl << endl;  
                                                    19.     cout << "Veuillez maintenent selectionnez le niveau de difficulte (Tapez 1, 2 ou 3 ): ";
                                                    20.     if(testvariable(difficulte, 3)) { // Saisie du niveau de difficulté
                                                    21.      cout << "Vous avez choisi le niveau de difficulte " << difficulte << endl;                        
                                                    22.     }
                                                    23. }
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter

                                                    Aide jeu des nombres et boucle [C++]

                                                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                    • Editeur
                                                    • Markdown