Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Tp : plus ou moins] avec améliorations

Deux bugs dont je ne trouve pas la source

    9 août 2006 à 2:38:35

    Salut les zéros,

    j'ai refait le tp plus ou moins avec toute les améliorations que propose matéo cependant j'ai deux bugs avec mon jeux du plus ou moins :

    1 : Le premier nombre mystere vaut toujours zéro (celui de la première partie).

    2: Si je joue en facile lors de ma deuxieme partie je serait toujours en facile meme en ayant choisi difficile par contre lors d'une troisième partie consécutive le changement s'éffectuera comme prévu et ainsi de suite.

    mon code :

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include "affichage.h"

    int main()
    {
        enTete();

        printf("\n");
        printf("Bienvenue dans le jeux du nombre mystere...\n\n");

        //J'initialise toutes les variables dont j'ai besoins
        long nombreMystere = 0, nombreEntre = 0, conteur = 1, choixDifficulte = 0, nombreMaximum = 0, nombreMinimum = 0;
        int continuerPartie = 1, nombreJoueur = 0;

        //Boucle permettant au joueur de rejouer s'il le désire
        while(continuerPartie == 1)
        {
            //Menu de difficulte
            printf("DIFFICULTE :\n\n");
            printf("1 : Facile (Le nombre mystere se trouve entre 1 et 100)\n");
            printf("2 : Moyen (Le nombre mystere se trouve entre 1 et 1000)\n");
            printf("3 : Difficile (Le nombre mystere se trouve entre 1 et 10000)\n\n");
            printf("Votre choix  :\t");
            scanf("%ld", &choixDifficulte);
            printf("\n");

            //Choix du nombre de joueur(s)
            printf("A combien voulez vous jouer ?\n\n");
            printf("1 : Un joueur\n");
            printf("2 : Deux joueurs\n\n");
            scanf("%ld", &nombreJoueur);
            printf("\n");

            if (nombreJoueur == 1) //Si il n'y à qu'un joueur :
            {

                //Je demande a l'ordinateur de générer un nombre aléatoire
                srand(time(NULL));
                nombreMystere = (rand() % (nombreMaximum - nombreMinimum + 1)) + nombreMinimum;

                switch (choixDifficulte)
                {
                    case 1:
                    nombreMaximum = 100, nombreMinimum = 1;
                    break;
                    case 2:
                    nombreMaximum = 1000, nombreMinimum = 1;
                    break;
                    case 3:
                    nombreMaximum = 10000, nombreMinimum = 1;
                    break;
                }
            }
            else if (nombreJoueur == 2) //Sinon ...
            {
                printf("Joueur 1, veuillez taper le nombre mystere\n");
                scanf("%ld", &nombreMystere);
                system("cls");
                printf("Joueur 2, a vous de trouvez le nombre mystere\n");
            }


            //Boucle principale du jeux
            do
            {
                printf("Veuillez entrer un nombre :");
                scanf("%ld", &nombreEntre);

                if (nombreEntre > nombreMystere)
                {
                    printf("c'est moins !\n");
                    conteur ++;
                }
                else if (nombreEntre < nombreMystere)
                {
                    printf("c'est plus !\n");
                    conteur ++;
                }
                else
                {
                    printf("\nBravo tu as trouve le nombre mystere en %ld coup(s) !\n", conteur);
                    //Commentaire sur la partie selon le nombre de coup et la difficulte
                    if (conteur == 1)
                        printf("Tu devrais parler a ta femme !\n");
                    else if (conteur < 3)
                        printf("Vite fait, bien fait !\n");
                    else if (conteur > 5 && conteur < 10)
                        printf("Pas mal mais essaye de faire mieux la prochaine fois...\n");
                    else if (conteur > 15)
                        printf("C'est pas ton jour de chance on dirait...\n");
                    else if (choixDifficulte = 2 && conteur < 5)
                        printf("Vite fait, bien fait !\n");
                    else if (choixDifficulte = 2 && conteur > 5 && conteur < 12)
                        printf("tu peut faire mieux !\n");
                    else if (choixDifficulte = 3 && conteur < 12)
                        printf("De rien avant je t'appelerai monsieur !\n");
                    else if (choixDifficulte = 3 && conteur > 30)
                        printf("tu peut faire mieux !\n");
                    else
                        printf("C'est pas ton jour de chance on dirait !\n");

                }

            }while (nombreEntre != nombreMystere);
            //On remet la variable conteur a 1
            conteur = 1;
            // Instruction permettant au joueur de rejouer s'il le veut
            printf("Desirez vous rejouer ?\t 1 = OUI  2 = NON\n");
            scanf("%ld", &continuerPartie);
            printf("\n");
            if (continuerPartie == 0)
                return 0;

        }


    }


    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      9 août 2006 à 4:19:05

      Regarde

      /* tu utilise nombreMaximum et nombreMinimum avant de leur avoir atribuer leur nombre */
                  srand(time(NULL));
                  nombreMystere = (rand() % (nombreMaximum - nombreMinimum + 1)) + nombreMinimum;

                  switch (choixDifficulte)
                  {
                      case 1:
                      nombreMaximum = 100, nombreMinimum = 1;
                      break;
                      case 2:
                      nombreMaximum = 1000, nombreMinimum = 1;
                      break;
                      case 3:
                      nombreMaximum = 10000, nombreMinimum = 1;
                      break;
                  }


      Tu met a jour nombreMaximum et nombreMinimum après avoir généré le nombre aléatoire donc ton choix aura toujours une partie de retard et comme tu les initialises à 0, dans la première partie,

      nombreMystere = (rand() % (nombreMaximum - nombreMinimum + 1)) + nombreMinimum;

      /*Est l'équivalent de*/

      nombreMystere = (rand() % (0 - 0 + 1)) + 0;


      Solution, mettre le switch avant la génération de nombre.
      Donc avant cette étape, vérifie le niveau de dificulté.

      Edit:

      Fait gaffe, system("cls") n'est pas portable. Il marchera sous windows et mac (pas sur pour ce dernier) mais pas sous linux.

      Edit 2:

      pense à faire un default dans ton switch au cas où quelqu'un entrerait un autre chiffre.
      • Partager sur Facebook
      • Partager sur Twitter
        9 août 2006 à 12:46:14

        merci à toi !

        edit : j'aimerait faire en sorte que si le joueur entre un chiffre non valide dans les choix le programme revient au début.
        J'ai tenter de mettre un else après le else if sur nombreJoueur et un default dans le switch (choixDifficulte) mais ca ne marche pas .
        Quelqu'un peut-il m'aider ?
        • Partager sur Facebook
        • Partager sur Twitter
          9 août 2006 à 20:04:53

          Si tu veux tu peux créer une boucle dans le style

          while(ChoixDuJoueur>3)/* tu met ca juste aprés le code...comme ça si le joueur entre un nombre supérieur au niveau de difficulté ça recommence jusqu'a ce que se soit bon...*/
          {
          //tu remet les choix offerts au joueurs
          }


          Si le joueur entre un nombre décimal ça plante ^^
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            9 août 2006 à 20:45:48

            Tu peux faire ça aussi:

            tu creer une variable int ok = 0;

            tu remet la variable à 0 à l'entré de la boucle continuerPartie:

            while(continuerPartie == 1)
                {
                    ok = 0;


            Tu met a jour la variable pendant le switch:

                        switch (choixDifficulte)
                        {
                            case 1:
                            nombreMaximum = 100, nombreMinimum = 1;
                            ok = 1;
                            break;
                            case 2:
                            nombreMaximum = 1000, nombreMinimum = 1;
                            ok = 1;
                            break;
                            case 3:
                            nombreMaximum = 10000, nombreMinimum = 1;
                            ok = 1;
                            break;
                            default:
                            ok = 0;
                            break;
                        }


            et tu as le choix entre:
            Creer une condition qui envelopera la boucle do while

            if ( ok )
            {
                do
                {
                    /* jeu */
                }while (nombreEntre != nombreMystere);
            }


            Ou modifier la boucle do while en un while simple en ajoutant && ok

            while (nombreEntre != nombreMystere && ok)
            {
                /*  Jeu  */
            }
            • Partager sur Facebook
            • Partager sur Twitter
              9 août 2006 à 20:52:44

              si non tu peut aussi rappeler la fontion main

              switch (choixDifficulte)
                          {
                              case 1:
                              nombreMaximum = 100, nombreMinimum = 1;
                              ok = 1;
                              break;
                              case 2:
                              nombreMaximum = 1000, nombreMinimum = 1;
                              ok = 1;
                              break;
                              case 3:
                              nombreMaximum = 10000, nombreMinimum = 1;
                              ok = 1;
                              break;
                              default:
                              main();
                              break;
                          }
              • Partager sur Facebook
              • Partager sur Twitter

              [Tp : plus ou moins] avec améliorations

              × 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