Partage
  • Partager sur Facebook
  • Partager sur Twitter

TP plus ou moins C

Sujet résolu
    24 septembre 2021 à 13:56:48

    Bonjour, 

    Je pense avoir (enfin !!) finis le TP du plus ou moins en C.

    J'ai eu beaucoup de difficulté pour le réaliser (quasiment 3jours... ) et je trouve mon code très long, je voulais savoir si il est "bon" ou si effectivement il est beaucoup trop long.

    J'ai fait un compteur de coups, un mode solo et un mode 2 joueurs, et 3 niveau de difficultés et la possibilité de rejouer.

    Voici mon code:

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    int main ()
    {
        int nombreEntre = 0, nombreJoueur = 0, difficulte = 0, nombreChoixJoueur = 0, nombreMystere = 0, compteur = 0, rejouer = 0;
        int MAX = 100;
        const MIN = 1;
        srand(time(NULL));
        nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
    
        do//Boucle pour rejouer
        {
            system("cls");
            printf("\t\t*****Bienvenue au Jeu du PLUS ou MOINS*****\n\n");
            printf("A vous de trouver le nombre choisis par l'ordinateur ou par votre adversaire.\n\n");
            printf("1.Joueur vs Ordinateur.\n2.Joueur vs Joueur.\n", nombreJoueur);
            scanf("%d", &nombreJoueur);
            system("cls");
    
    
            if(nombreJoueur == 1)//Debut Partie SOLO
            {
                printf("Niveau de difficulte\n1.Facil : 1-10\n2.Normal : 1-100\n3.Extreme : 1-1000\n", difficulte);
                scanf("%d", &difficulte);
    
                switch(difficulte)
                {
                    case 1:
                        MAX = 10;
                        break;
                    case 2:
                        MAX = 100;
                        break;
                    case 3:
                        MAX = 1000;
                        break;
                    default:
                        printf("Cette difficulte n'existe pas , difficulte normal active");
                        MAX = 100;
                        break;
                }
                system("cls");
                printf("\t\t*****Joueur VS Ordinateur*****\n\n");
                srand(time(NULL));
                nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
                do
                {
                    printf("\nQuel est le nombre\n", nombreEntre);
                    scanf("%d", &nombreEntre);
    
                    if(nombreEntre < nombreMystere)
                        printf("C'est plus !\n");
                    else if(nombreEntre > nombreMystere)
                        printf("C'est moins !\n");
                    else
                        printf("\n*****Bravo, vous avez trouve le nombre mystere en %d coups !!!*****\n\n", compteur);
                        scanf("d", &compteur);
                        compteur++;
                }while(nombreMystere != nombreEntre);
            }
    
            if(nombreJoueur == 2)//Début Partie DUO
            {
                printf("Niveau de difficulte\n1.Facil : 1-10\n2.Normal : 1-100\n3.Extreme : 1-1000\n", difficulte);
                scanf("%d", &difficulte);
                system("cls");
    
                switch(difficulte)
                {
                    case 1:
                        printf("Entrer un nombre entre 1 et 10\n\n", nombreChoixJoueur);
                        scanf("%d", &nombreChoixJoueur);
                        break;
                    case 2:
                        printf("Entrer un nombre entre 1 et 100\n\n", nombreChoixJoueur);
                        scanf("%d", &nombreChoixJoueur);
                        break;
                    case 3:
                        printf("Entrer un nombre entre 1 et 1000\n\n", nombreChoixJoueur);
                        scanf("%d", &nombreChoixJoueur);
                        break;
                    default:
                        printf("Cette difficulte n'existe pas , entrer un nombre entre 1 et 100", nombreChoixJoueur);
                        break;
                }
                system("cls");
                printf("\t\t*****Joueur VS Joueur*****\n\n");
    
                do
                {
    
                    printf("\nQuel est le nombre\n", nombreEntre);
                    scanf("%d", &nombreEntre);
    
                if(nombreEntre < nombreChoixJoueur)
                    printf("C'est plus !\n");
                else if(nombreEntre > nombreChoixJoueur)
                    printf("C'est moins !\n");
                else
                    printf("\n*****Bravo, vous avez trouve le nombre mystere en %d coups !!!*****\n\n", compteur);
                    scanf("d", &compteur);
                    compteur++;
                }while(nombreChoixJoueur != nombreEntre);
            }
    
                printf("Une autre partie ?\n1. Oui.\n2. Non\n", rejouer);
                scanf("%d", &rejouer);
    
        }while(rejouer == 1);
            system("cls");
            printf("\n\t\t*****A Bientot !*****\n\n");
    
        return 0;
    }

      Merci par avance pour vos retour :)

    • Partager sur Facebook
    • Partager sur Twitter
      24 septembre 2021 à 15:19:08

      As-tu appris les tableaux et les fonctions à ce niveau du cours?

      Tu ne devrais avoir besoin de calculer le nombre mystère qqu'une fois juste après la difficulté.

      Tu n'as besoin d'appeler cls qu'une fois dans le mode 2 joueurs juste après la saisie.
      Tu devrais pouvoir t'arranger pour n'avoir qu'une copie du jeu lui-même.

      -
      Edité par PierrotLeFou 24 septembre 2021 à 15:24:16

      • Partager sur Facebook
      • Partager sur Twitter

      Le Tout est souvent plus grand que la somme de ses parties.

        24 septembre 2021 à 15:40:01

        Ton code fonctionne, mais il y a quelques étourderies :

        revois l'utilisation de la fonction printf ou tu mets un second paramètre que tu n'affiche pas !

        et tes scanf ligne 59 et 103 qui ne font rien !

        srand ne devrait être appelé qu'une seule fois lors de l'exécution de ton programme.

        -
        Edité par rouIoude 24 septembre 2021 à 15:43:35

        • Partager sur Facebook
        • Partager sur Twitter
          24 septembre 2021 à 15:58:02

          Comme l'écrit Pierrot, il y a moyen de ne faire qu'une seule boucle pour la recherche du nombre mystère:
          si mode_1_joueur
          	nombre_mystère ← nombre généré par le programme
          sinon
          	nombre_mystère ← nombre donné par le joueur 2
          
          faire
              nombre_entré ← nombre donné par le joueur 1
              ....
          tant que nombre_entré <> de nombre_mystère

          -
          Edité par edgarjacobs 24 septembre 2021 à 15:58:54

          • Partager sur Facebook
          • Partager sur Twitter

          Il y a ceux qui font des sauvegardes, et ceux qui n'ont pas encore eu d'incident....

            24 septembre 2021 à 16:32:24

            Bonjour, 

            Je vous remercie pour vos réponses :) .

            Je n'ai pas encore vu les tableaux et fonctions j'attends de bien avoir assimilé le début du cours pour passer a la suite.

            Je vais mettre en place vos conseils et pistes et posterais le code "corrigé". 

            Encore merci !

            -
            Edité par benjamin.T 25 septembre 2021 à 15:05:53

            • Partager sur Facebook
            • Partager sur Twitter
              25 septembre 2021 à 16:37:27

              Bonjour, 

              Voici mon code 'corrigé":

              #include <stdio.h>
              #include <stdlib.h>
              #include <time.h>
              
              int main ()
              {
                  int nombreEntre = 0, nombreJoueur = 0, difficulte = 0, nombreChoixJoueur = 0, nombreMystere = 0, compteur = 1, rejouer = 0, MAX = 100;
                  const int MIN = 1;
                  srand(time(NULL));
              
                  do//Boucle pour rejouer
                  {
                      system("cls");
                      compteur = 1;
                      printf("\t\t*****Bienvenue au Jeu du PLUS ou MOINS*****\n\n");
                      printf("A vous de trouver le nombre choisis par l'ordinateur ou par votre adversaire.\n\n");
                      printf("1.Joueur vs Ordinateur.\n2.Joueur vs Joueur.\n");
                      scanf("%d", &nombreJoueur);
                      system("cls");
                      printf("Niveau de difficulte\n1.Facil : 1-10\n2.Normal : 1-100\n3.Extreme : 1-1000\n");
                      scanf("%d", &difficulte);
                      system("cls");
              
                      if(nombreJoueur == 1)//Difficulte Partie SOLO
                      {
                          switch(difficulte)
                          {
                              case 1:
                                  MAX = 10;
                                  break;
                              case 2:
                                  MAX = 100;
                                  break;
                              case 3:
                                  MAX = 1000;
                                  break;
                              default:
                                  printf("Cette difficulte n'existe pas , difficulte normal active");
                                  MAX = 100;
                                  break;
                          }
                          system("cls");
                          printf("\t\t*****Joueur VS Ordinateur*****\n\n");
                      }
              
                      if(nombreJoueur == 2)//Difficulte Partie DUO
                      {
                          switch(difficulte)
                          {
                              case 1:
                                  printf("Entrer un nombre entre 1 et 10\n\n");
                                  scanf("%d", &nombreChoixJoueur);
                                  break;
                              case 2:
                                  printf("Entrer un nombre entre 1 et 100\n\n");
                                  scanf("%d", &nombreChoixJoueur);
                                  break;
                              case 3:
                                  printf("Entrer un nombre entre 1 et 1000\n\n");
                                  scanf("%d", &nombreChoixJoueur);
                                  break;
                              default:
                                  printf("Cette difficulte n'existe pas , entrer un nombre entre 1 et 100");
                                  break;
                          }
                          system("cls");
                          printf("\t\t*****Joueur VS Joueur*****\n\n");
                      }
              
                      if (nombreJoueur == 1)
                          nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
                      else
                          nombreMystere = nombreChoixJoueur;
                      do
                      {
                          printf("\nQuel est le nombre\n");
                          scanf("%d", &nombreEntre);
              
                          if(nombreEntre < nombreMystere)
                              printf("C'est plus !\n");
                          else if(nombreEntre > nombreMystere)
                              printf("C'est moins !\n");
                          else
                              printf("\n*****Bravo, vous avez trouve le nombre mystere en %d coups !!!*****\n\n", compteur);
                          compteur++;
                      }while(nombreEntre != nombreMystere);
                          printf("Une autre partie ?\n1. Oui.\n2. Non.\n");
                          scanf("%d", &rejouer);
              
                  }while(rejouer == 1);
                      system("cls");
                      printf("\n\t\t*****A Bientot !*****\n\n");
              
                  return 0;
              }
              



              • Partager sur Facebook
              • Partager sur Twitter
                25 septembre 2021 à 19:25:20

                Si tu tiens à tes "cls" ... C'est essentiel seulement après la saisie en mode deux joueurs.
                Tu n'as pas besoin de tester si le nombre de joueurs est 2 si ce n'est pas 1, mets un else à la place.
                Mets le compteur à 0 plutôt que 1 et fais le juste avant le début du jeu.
                Augmentes le une seule fois après le scanf du nombre à essayer.
                Tu peux calculer le nombre mystère tout de suite après le switch en mode un joueur
                Et tu le lis directement en mode deux joueurs.
                Tu sauves une variable et un test juste avant le jeu.
                • Partager sur Facebook
                • Partager sur Twitter

                Le Tout est souvent plus grand que la somme de ses parties.

                TP plus ou moins C

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                • Editeur
                • Markdown