Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème dans mon jeu "plus ou moins"

    7 octobre 2016 à 18:14:15

    Bonjour. Je suis en train de réaliser l'activité du "plus ou moins" dans le cours de programmation C de Monsieur Nebra. J'ai un souçi : j'ai bien créé la structure, mis le compteur de coup, proposé un niveau de difficulté. mais lorsque je sélectionne un niveau de difficulté ( 1, 2 ou 3) le programme...plante ! Pouvez vous m'aider ? merci.

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    int main(int argc, char** argv)
    {
        int nombreMystere =0, nombreEntre=0, tentatives=0, rejouer=1, niveau=1;
        int MAX = 100, MIN = 1;
    
        // generation du nombre au hasard
    
        srand(time(NULL));
        nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
    
        printf("###############\n");
        printf("Plus ou moins ?\n");
        printf("###############\n\n");
    
    
    do{
            do // structure du jeu
            {
                    do{
                        printf("#####################################\n");
                        printf("Choisissez votre niveau de difficulte\n");
                        printf("1.Niveau facile (de 1 a 100)\n");
                        printf("2. Niveau moyen (de 1 a 1000\n");
                        printf("3.Niveau difficile (de 1 a 10000\n ");
                        printf("#####################################\n\n");
                        scanf("%d, &niveau");
    
                            if ( niveau == 1)
                                {
                                    MAX = 100;
                                    printf("Vous avez choisi le niveau facile. C'est parti!\n\n");
                                }
                            else if ( niveau == 2)
    
                                {
                                    MAX = 1000;
                                    printf(" Vous aver choisi le niveau moyen. C'est parti!\n\n");
                                }
    
                            else if ( niveau == 3)
                                {
                                    MAX = 10000;
                                    printf(" Vous avez choisi le niveau difficile. C'est parti!\n\n");
                                }
                             else
                                {
                                    printf(" Je n'ai pas compris...reessayer !\n\n");
                                }
    
    
                    } while ( niveau != 1 && niveau != 2 && niveau != 3);
    
    
                printf("Quel est le nombre mystere ?\n");
                scanf("%d", &nombreEntre);
                tentatives++;
                    if (nombreEntre<nombreMystere)
                        printf("c'est plus !");
                    else if (nombreEntre>nombreMystere)
                        printf("c'est moins !");
                    else
                        printf("\n\n Bravo vous avez trouve le nombre mystere en %d tentatives !\n\n", tentatives);
    
    
    
            }   while ( nombreEntre != nombreMystere);
    
    
    
            printf("####################################\n\n");
            printf("Voulez-vous faire une autre partie ?\n\n");
            printf("1. Oui, avec plaisir !\n\n");
            printf("2. Non merci, c'est gentil...\n\n");
            printf("####################################\n\n");
    
    
            scanf( "%d", &rejouer);
            nombreEntre = 0;
    
        if ( rejouer == 2)
            {
             printf("\n\nMerci d'avoir joue !\n\n");
            }
        else
            printf("\n\nC'est reparti !\n\n");
    
    
    
    }while ( rejouer == 1);
        return 0;
    
    
    
    }
    



    • Partager sur Facebook
    • Partager sur Twitter
    Thibault
      7 octobre 2016 à 18:22:24

      Bonjour,

      Ligne 30,  se voit très bien avec la coloration syntaxique...

      -
      Edité par breizhbugs 7 octobre 2016 à 18:22:59

      • Partager sur Facebook
      • Partager sur Twitter
      ** La doc, c'est comme le PQ: ça sert à se démerder tout seul **
        7 octobre 2016 à 18:24:22

        Bonjour ! L'erreur est à la ligne 30. Tu as écrit :

        scanf("%d, &niveau");
        

        au lieu de :

        scanf("%d", &niveau);

        Sois attentif !

        Remarque : le compilateur signalait le problème dans un warning, même sans les options particulières. Bon, il n'était pas très explicite, mais il forçait à aller regarder cette ligne de plus près.

        Cela dit, il reste à corriger une erreur d'algorithme : tu as inversé la boucle où l'on demande de rejouer et celle où on demande de donner un nombre.




        -
        Edité par robun 7 octobre 2016 à 18:26:02

        • Partager sur Facebook
        • Partager sur Twitter
          7 octobre 2016 à 18:34:25

          C'était donc ça. J'avais un autre souci, c'est que le menu de difficulté s'affichait à chaque coup. je suis parvenu à le corriger, mais j'ai toujours un souçi : le chiffre mystère ne change pas. j'ai fais 5 parties, le chiffre mystère restait 56. Une idée ? merci.

          #include <stdio.h>
          #include <stdlib.h>
          #include <time.h>
          
          int main(int argc, char** argv)
          {
              int nombreMystere =0, nombreEntre=0, tentatives=0, rejouer=1, niveau=1;
              int MAX = 100, MIN = 1;
          
              // generation du nombre au hasard
          
              srand(time(NULL));
              nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
          
              printf("###############\n");
              printf("Plus ou moins ?\n");
              printf("###############\n\n");
          
          
              do{
                          do{
                              printf("#####################################\n");
                              printf("Choisissez votre niveau de difficulte\n");
                              printf("1.Niveau facile (de 1 a 100)\n");
                              printf("2. Niveau moyen (de 1 a 1000\n");
                              printf("3.Niveau difficile (de 1 a 10000\n ");
                              printf("#####################################\n\n");
                              scanf("%d", &niveau);
          
                                  if ( niveau == 1)
                                      {
                                          MAX = 100;
                                          printf("Vous avez choisi le niveau facile. C'est parti!\n\n");
                                      }
                                  else if ( niveau == 2)
          
                                      {
                                          MAX = 1000;
                                          printf(" Vous aver choisi le niveau moyen. C'est parti!\n\n");
                                      }
          
                                  else if ( niveau == 3)
                                      {
                                          MAX = 10000;
                                          printf(" Vous avez choisi le niveau difficile. C'est parti!\n\n");
                                      }
                                   else
                                      {
                                          printf(" Je n'ai pas compris...reessayez !\n\n");
                                      }
          
          
                          } while ( niveau != 1 && niveau != 2 && niveau != 3);
          
                          do{
          
                      printf("Quel est le nombre mystere ?\n");
                      scanf("%d", &nombreEntre);
                      tentatives++;
                          if (nombreEntre<nombreMystere)
                              printf("c'est plus !");
                          else if (nombreEntre>nombreMystere)
                              printf("c'est moins !");
                          else
                              printf("\n\n Bravo vous avez trouve le nombre mystere en %d tentatives !\n\n", tentatives);
          
          
          
                          }   while ( nombreEntre != nombreMystere);
          
          
          
                  printf("####################################\n\n");
                  printf("Voulez-vous faire une autre partie ?\n\n");
                  printf("1. Oui, avec plaisir !\n\n");
                  printf("2. Non merci, c'est gentil...\n\n");
                  printf("####################################\n\n");
          
                  scanf( "%d", &rejouer);
                  nombreEntre = 0;
          
              if ( rejouer == 2)
                  {
                   printf("\n\nMerci d'avoir joue !\n\n");
                  }
              else
                  printf("\n\nC'est reparti !\n\n");
          
          
          
          } while ( rejouer == 1);
              return 0;
          
          
          
          }
          



          • Partager sur Facebook
          • Partager sur Twitter
          Thibault
            7 octobre 2016 à 18:37:58

            C'est normal : tu ne recharges le nombre mystère qu'une fois au tout début, à la ligne 13. Il faudrait mettre la ligne 13 au début de chaque nouvelle partie, donc juste après le choix du niveau.

            • Partager sur Facebook
            • Partager sur Twitter
              7 octobre 2016 à 19:14:32

              Ok ça va déja beaucoup mieux. Merci pour vos conseils. Dernière question ( c'est promi ;) ) . En mode facile, il arrive que le chiffre mystère dépasse 100. Comment est-ce possible ? j'ai pourtant spécifié le max pour chaque niveau ?

              #include <stdio.h>
              #include <stdlib.h>
              #include <time.h>
              
              int main(int argc, char** argv)
              {
                  int nombreMystere =0, nombreEntre=0, tentatives=0, rejouer=1, niveau=1;
                  int MAX;
                  const int MIN =1;
              
                  // generation du nombre au hasard
              
              
                  printf("###############\n");
                  printf("Plus ou moins ?\n");
                  printf("###############\n\n");
              
              
                  do{
                              do{
              
                                  printf("#####################################\n");
                                  printf("Choisissez votre niveau de difficulte\n");
                                  printf("1.Niveau facile (de 1 a 100)\n");
                                  printf("2. Niveau moyen (de 1 a 1000)\n");
                                  printf("3.Niveau difficile (de 1 a 10000)\n ");
                                  printf("#####################################\n\n");
                                  srand(time(NULL));
                                  nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
              
                                  scanf("%d", &niveau);
              
                                      if ( niveau == 1)
                                          {
                                              MAX = 100;
                                              printf("Vous avez choisi le niveau facile. C'est parti!\n\n");
                                          }
                                      else if ( niveau == 2)
              
                                          {
                                              MAX = 1000;
                                              printf(" Vous aver choisi le niveau moyen. C'est parti!\n\n");
                                          }
              
                                      else if ( niveau == 3)
                                          {
                                              MAX = 10000;
                                              printf(" Vous avez choisi le niveau difficile. C'est parti!\n\n");
                                          }
                                       else
                                          {
                                              printf(" Je n'ai pas compris...reessayez !\n\n");
                                          }
              
              
                              } while ( niveau != 1 && niveau != 2 && niveau != 3);
              
                              do{
              
              
                          printf("Quel est le nombre mystere ?\n");
                          scanf("%d", &nombreEntre);
                          tentatives++;
                              if (nombreEntre<nombreMystere)
                                  printf("c'est plus !");
                              else if (nombreEntre>nombreMystere)
                                  printf("c'est moins !");
                              else
                                  printf("\n\n Bravo vous avez trouve le nombre mystere en %d tentatives !\n\n", tentatives);
              
              
              
                              }   while ( nombreEntre != nombreMystere);
              
              
              
                      printf("####################################\n\n");
                      printf("Voulez-vous faire une autre partie ?\n\n");
                      printf("1. Oui, avec plaisir !\n\n");
                      printf("2. Non merci, c'est gentil...\n\n");
                      printf("####################################\n\n");
              
                      scanf( "%d", &rejouer);
                      tentatives = 0;
              
                  if ( rejouer == 2)
                      {
                       printf("\n\nMerci d'avoir joue !\n\n");
                      }
                  else if ( rejouer==1)
                      {
                      printf("\n\nC'est reparti !\n\n");
                      }
                  else
                  {
                      printf("mauvaise réponse...tant pis !");
                  }
              
              
              
              } while ( rejouer == 1);
                  return 0;
              
              
              
              }
              



              • Partager sur Facebook
              • Partager sur Twitter
              Thibault
                7 octobre 2016 à 19:21:50

                C'est probablement parce que tu initialises le nombre mystère avant le choix du niveau (avant les scanf). Il faut le faire après !

                -
                Edité par robun 7 octobre 2016 à 19:23:29

                • Partager sur Facebook
                • Partager sur Twitter
                  7 octobre 2016 à 21:14:16

                  c'était ça. merci beaucoup.
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Thibault
                    1 décembre 2016 à 16:28:53

                    #include <stdio.h>
                    #include <stdlib.h>
                    #include <time.h>
                    int main ( int argc, char** argv ){
                        int nombreMystere = 0, nombreEntre = 0, compteur=0, continuerPartie=1, mode=1, niveau=1;
                        char choix;
                        int MAX = 100, MIN = 0;
                        // Génération du nombre aléatoire
                        srand(time(NULL));
                        while(continuerPartie){
                                printf("\n\n\t\t\t#############################\n");
                                printf("\n\n\t\t\t   \3   Plus ou moins ?   \3\n");
                                printf("\n\n\t\t\t#############################\n\n");
                                // Determiation du mode
                                printf("Choisissez le mode de jeu \n\n");
                                printf("\t\t 1 :Mode 1 joueur\n");
                                printf("\t\t 2 :Mode 2 joueurs\n\t\t\t\t\t");
                                scanf("%d",&mode);
                                //  Determination du niveau
                                printf("\nChoisissez votre niveau de difficulte\n\n");
                                printf("\t\t 1: Niveau facile (de 1 a 100)\n");
                                printf("\t\t 2: Niveau moyen (de 1 a 1000)\n");
                                printf("\t\t 3: Niveau difficile (de 1 a 10000)\n \t\t\t\t\t\t\t");
                                fflush(stdin);
                                scanf("%d", &niveau);
                                // Testes de niveau
                                if ( niveau == 1){
                                        MAX = 100;
                                        printf("Vous avez choisi le niveau facile. C'est parti!\n\n");
                                }
                                else if ( niveau == 2){
                                        MAX = 1000;
                                        printf("Vous aver choisi le niveau moyen. C'est parti!\n\n");
                                }
                                else if ( niveau == 3){
                                        MAX = 10000;
                                        printf("Vous avez choisi le niveau difficile. C'est parti!\n\n");
                                }
                                // else    printf(" Je n'ai pas compris...reessayer !\n\n");
                                // Testes de mode
                                if(mode == 1){
                                    nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
                                }else{
                                    printf("\nJoueur 1: Entrez votre nombre mystere compris entre %d et %d \t: ",MIN,MAX);
                                    scanf("%d",&nombreMystere);
                                    system("cls");
                                    printf("\n\nJoueur 2: A vous de jouer\n\n");
                                }
                            /* La boucle du programme. Elle se répète tant que l'utilisateur
                            n'a pas trouvé le nombre mystère */
                            do{
                                printf("\tQuel est le nombre ? \t");
                                scanf("%d", &nombreEntre);          // le & à ne pas oublier
                                if (nombreMystere > nombreEntre){
                                        printf("\tC'est plus !\n\n");
                                        compteur++;
                                }
                                else if (nombreMystere < nombreEntre){
                                        printf("\tC'est moins !\n\n");
                                        compteur++;
                                }
                                else
                                    printf ("\n\n\tBravo, vous avez trouve le nombre mystere %d en %d essais!!!\n\n", nombreMystere, compteur);
                            } while (nombreEntre != nombreMystere);
                            fflush(stdin);
                            printf("Voulez vous jouez une autre partie \n\n");
                            printf("\t\t O: Oui, avec plaisir !\n\n");
                            printf("\t\t N: Non merci, c'est gentil...\n\n\t\t\t\t\t\t");
                            scanf("%c",&choix);
                            if(choix == 'N' || choix == 'n'){
                                continuerPartie = 0;
                            }
                            compteur =0;
                            system("cls");
                        }
                    return 0;
                    }
                    • Partager sur Facebook
                    • Partager sur Twitter
                      16 février 2017 à 15:47:34



                      Bonjour ! je me remet à l'entrainement après quelques mois d'arrêt, et je me rend compte que je retourne dans les mêmes travers. mon code compile, mais après le choix du niveau, il plante à nouveau. j'ai pourtant suivi vos conseils...pouvez vous me dire ou j'ai pu me tromper ? merci

                      #include <stdio.h>
                      #include <stdlib.h>
                      #include <time.h>
                      
                      int main(int argc, char** argv)
                      {
                          int nombreMystere =0, nombreEntre=0, tentatives=0, rejouer=1, niveau=1;
                          int MAX;
                          const int MIN =1;
                      
                          // generation du nombre au hasard
                      
                      
                          printf("###############\n");
                          printf("Plus ou moins ?\n");
                          printf("###############\n\n");
                      
                      
                          do{
                                      do{
                      
                                          printf("#####################################\n");
                                          printf("Choisissez votre niveau de difficulte\n");
                                          printf("1.Niveau facile (de 1 a 100)\n");
                                          printf("2. Niveau moyen (de 1 a 1000)\n");
                                          printf("3.Niveau difficile (de 1 a 10000)\n ");
                                          printf("#####################################\n\n");
                                          srand(time(NULL));
                                          nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
                      
                                          scanf("%d", &niveau);
                      
                                              if ( niveau == 1)
                                                  {
                                                      MAX = 100;
                                                      printf("Vous avez choisi le niveau facile. C'est parti!\n\n");
                                                  }
                                              else if ( niveau == 2)
                      
                                                  {
                                                      MAX = 1000;
                                                      printf(" Vous aver choisi le niveau moyen. C'est parti!\n\n");
                                                  }
                      
                                              else if ( niveau == 3)
                                                  {
                                                      MAX = 10000;
                                                      printf(" Vous avez choisi le niveau difficile. C'est parti!\n\n");
                                                  }
                                               else
                                                  {
                                                      printf(" Je n'ai pas compris...reessayez !\n\n");
                                                  }
                      
                      
                                      } while ( niveau != 1 && niveau != 2 && niveau != 3);
                      
                                      do{
                      
                      
                                  printf("Quel est le nombre mystere ?\n");
                                  scanf("%d", &nombreEntre);
                                  tentatives++;
                                      if (nombreEntre<nombreMystere)
                                          printf("c'est plus !");
                                      else if (nombreEntre>nombreMystere)
                                          printf("c'est moins !");
                                      else
                                          printf("\n\n Bravo vous avez trouve le nombre mystere en %d tentatives !\n\n", tentatives);
                      
                      
                      
                                      }   while ( nombreEntre != nombreMystere);
                      
                      
                      
                              printf("####################################\n\n");
                              printf("Voulez-vous faire une autre partie ?\n\n");
                              printf("1. Oui, avec plaisir !\n\n");
                              printf("2. Non merci, c'est gentil...\n\n");
                              printf("####################################\n\n");
                      
                              scanf( "%d", &rejouer);
                              tentatives = 0;
                      
                          if ( rejouer == 2)
                              {
                               printf("\n\nMerci d'avoir joue !\n\n");
                              }
                          else if ( rejouer==1)
                              {
                              printf("\n\nC'est reparti !\n\n");
                              }
                          else
                          {
                              printf("mauvaise réponse...tant pis !");
                          }
                      
                      
                      
                      } while ( rejouer == 1);
                          return 0;
                      
                      
                      
                      }
                      
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Thibault
                        16 février 2017 à 17:43:15

                        Bonjour, pour moi le programme ne plante pas.

                        En revanche certaines choses ne fonctionnent pas. Déplace: 

                                srand(time(NULL));
                                            nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;

                        A la ligne 57 sinon le maximum n'est pas modifié et donc l'intervalle dans lequel se trouve le nombre mystère ne

                        change pas selon les niveaux. 


                        -
                        Edité par PhoenixAce 16 février 2017 à 17:45:36

                        • Partager sur Facebook
                        • Partager sur Twitter
                          16 février 2017 à 18:37:04

                          le srand(time(null)) ne doit être fait qu'une seule fois. Il peut être mis ligne 10.
                          • Partager sur Facebook
                          • Partager sur Twitter
                          ** La doc, c'est comme le PQ: ça sert à se démerder tout seul **
                            17 février 2017 à 19:17:26

                            Bonjour,

                            je vois que vous avez réglé le problème. J'ai cependant remarqué qu'à la ligne 96, il y avait un accent aigu sur le "e" de "réponse", alors qu'on est en console.

                            De rien :D

                            • Partager sur Facebook
                            • Partager sur Twitter
                              17 février 2017 à 19:29:26

                              Chez moi les accents en console ne posent aucun problème (Xubuntu), mais je crois bien que cela dépend de l'OS.

                              J'ai un tuto en stock qu'il faudra que je lise un jour d'ailleurs : https://openclassrooms.com/courses/mettez-des-accents-dans-vos-programmes-avec-le-type-wchar-t

                              • Partager sur Facebook
                              • Partager sur Twitter
                                18 février 2017 à 9:40:00

                                Alors je peux faire la remarque inverse : il manque parfois des accents :D

                                Tant mieux pour toi.

                                • Partager sur Facebook
                                • Partager sur Twitter

                                Problème dans mon jeu "plus ou moins"

                                × 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