Partage
  • Partager sur Facebook
  • Partager sur Twitter

TP plus ou moins

Optimisation

Anonyme
    22 octobre 2008 à 20:28:14

    Bonjour,tout d'abord,j'adore ce site :)

    Donc voilà,j'ai fais le premier TP plus ou moins pour le C,j'essaye de l'optimiser des 4 façons proposées:

    Mode de difficultés différentes : X
    Le nombre de coups comptés : V
    Le Mode Multijoueur : V(bugué)
    Autre Partie : V(bugé avec le mode multi)

    x = pas encore fait,v = fait

    Bref,j'ai plusieurs bugs,notamment,à la fin de partie,en mode 1 ou 2 joueurs,c'est égale,j'ai beau mettre 1 pout oui,et 0 pour non,sa me reprends toujours dans les 2 cas,comment faire ?Merci d'avance :)

    Voici le cod

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    
    
    int main()
    {
        const long MAX = 100, MIN = 1;
        long NombreEntre = 0, NombreEntre2, NombreMystere = 0, Compteur = 0, NombreJoueur = 0, NombreEntre3 = 0;
    
        srand(time(NULL));
        NombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
    
    do
    {
        NombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
        Compteur = 0;
        NombreJoueur = 0;
    
        printf("Bienvenue,le jeux consiste a trouver le nombre mystere\n\n");
        printf("Vous avez la possibilite de jouer a 1 ou 2 joueurs \n\npour 1 joueur,tapez 1,pour 2 joueur tapez2\nVous tapez : ");
        scanf("%ld", &NombreJoueur);
    
    switch (NombreJoueur)
    {
        case 1:
        printf("Vous avez choisi le mode 1 joueur\n\n");
    
        do
    {
        NombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
        Compteur = 0;
        NombreJoueur = 0;
    
        do
        {
        printf("Tapez un nombre : ");
        scanf("%ld", &NombreEntre);
        Compteur++;
    
    
            if (NombreEntre > NombreMystere)
            printf("C'est moins grand !\n\n");
    
            else if (NombreEntre < NombreMystere)
            printf("C'est plus grand !\n\n");
    
            else
            printf("Bravo,vous avez trouve le nombre mystere qui etait %ld, en %ld de coups\n\n", NombreMystere, Compteur);
    
        }while (NombreEntre != NombreMystere);
    
            printf("Nouvelle Partie?\n\n 1 = Oui  0 = Non\n Alors ?");
            scanf("%ld", &NombreEntre2);
    
            if (NombreEntre2 == 1 )
            printf("C'est partit !\n\n");
    
            else
            printf("A une autre fois!\n\n");
    
        }while (NombreEntre2 == 0);
        break;
    
        case 2:
        printf("Vous avez choisi le mode 2 joueurs\n\n");
    
            do
    {
        Compteur = 0;
    
    
        if (NombreJoueur == 2)
    
        do
        {
        printf("Joueur numero 1,tapez un nombre : \n\n");
        scanf("%ld", &NombreEntre3);
        printf("Joueur Numero 2,tapez un nombre : ");
        scanf("%ld", &NombreEntre);
        Compteur++;
    
    
            if (NombreEntre > NombreEntre3)
            printf("C'est moins grand !\n\n");
    
            else if (NombreEntre < NombreEntre3)
            printf("C'est plus grand !\n\n");
    
            else
            printf("Bravo,vous avez trouve le nombre mystere qui etait %ld, en %ld de coups\n\n", NombreEntre3, Compteur);
    
        }while (NombreEntre != NombreEntre3);
    
            printf("Nouvelle Partie?\n\n 1 = Oui  0 = Non\n Alors ?");
            scanf("%ld", &NombreEntre2);
    
            if (NombreEntre2 == 1 )
            printf("C'est partit !\n\n");
    
            else
            printf("A une autre fois!\n\n");
    
        }while (NombreEntre2 == 1);
        break;
    
        default :
        printf("C'est nombre n'est pas compris en 1 et 2.\n\n\n\n\n\n\Clikez sur la croix pour quitter le programme,fait par DiegoAntogninin\n\n\n\n\n\n\n\n\n\n\n");
        break;
    }
        do
        {
        printf("Tapez un nombre : ");
        scanf("%ld", &NombreEntre);
        Compteur++;
    
    
            if (NombreEntre > NombreMystere)
            printf("C'est moins grand !\n\n");
    
            else if (NombreEntre < NombreMystere)
            printf("C'est plus grand !\n\n");
    
            else
            printf("Bravo,vous avez trouve le nombre mystere qui etait %ld, en %ld de coups\n\n", NombreMystere, Compteur);
    
        }while (NombreEntre != NombreMystere);
    
                printf("Nouvelle Partie?\n\n 1 = Oui  0 = Non\n Alors ?");
            scanf("%ld", &NombreEntre2);
    
            if (NombreEntre2 == 1 )
            printf("C'est partit !\n\n");
    
            else
            printf("A une autre fois!\n\n");
    
        }while (NombreEntre2 == 1);
        return 0;
    }
    
    • Partager sur Facebook
    • Partager sur Twitter
      23 octobre 2008 à 14:03:04

      Citation : XogoX


      Bref,j'ai plusieurs bugs,notamment,à la fin de partie,en mode 1 ou 2 joueurs,c'est égale,j'ai beau mettre 1 pout oui,et 0 pour non,sa me reprends toujours dans les 2 cas,comment faire ?Merci d'avance :)



      Dans ton "case 1" le premier while,il faut mettre while(NombreEntre2 == 1) et non while(NombreEntre2 == 0) .

      case 1:
          printf("Vous avez choisi le mode 1 joueur\n\n");
      
          do
      {
          NombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
          Compteur = 0;
          NombreJoueur = 0;
      
          do
          {
          printf("Tapez un nombre : ");
          scanf("%ld", &NombreEntre);
          Compteur++;
      
      
              if (NombreEntre > NombreMystere)
              printf("C'est moins grand !\n\n");
      
              else if (NombreEntre < NombreMystere)
              printf("C'est plus grand !\n\n");
      
              else
              printf("Bravo,vous avez trouve le nombre mystere qui etait %ld, en %ld de coups\n\n", NombreMystere, Compteur);
      
          }while (NombreEntre != NombreMystere);
      
              printf("Nouvelle Partie?\n\n 1 = Oui  0 = Non\n Alors ?");
              scanf("%ld", &NombreEntre2);
      
              if (NombreEntre2 == 1 )
              printf("C'est partit !\n\n");
      
              else
              printf("A une autre fois!\n\n");
      
          }while (NombreEntre2 == 0); //ici
          break;
      



      Je comprends pas pourquoi tu rajoute du code après le switch? Cela oblige l'utilisateur à faire au moins 2 parties.
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        23 octobre 2008 à 14:33:27

        salut,j'ai fait ce que tu as dis,sauf quand j'ai testé en mode 1 joueueur,quand tu trouves le nombremystere,sa devient une boucle infi,et la sa bug :(

        PS : sans la modification le mode 2joueurs bugs aussi,car,le joueur 1 doit taper le nombremystere après le joueur 2,donc sa change tout le temps!
        • Partager sur Facebook
        • Partager sur Twitter
          23 octobre 2008 à 14:37:17

          l'indentation est aussi à revoir.
          Et tu as une boucle infinie parce que tu as fait une boucle infinie, si je comprend bien ton code, pour sortir du jeu, il faut que le nombre de joueur change. Fait une fonction aussi pour le jeu, ca éviterait la répétition de code et tu verrais plus facilement l'enchainement des événements.
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            23 octobre 2008 à 17:38:03

            Je ne comprends pas ce que tu veux dire par là :

            Fait une fonction aussi pour le jeu, ca éviterait la répétition de code et tu verrais plus facilement l'enchainement des événements.

            si tu pouvais m'éclairer :O)
            • Partager sur Facebook
            • Partager sur Twitter
              24 octobre 2008 à 0:59:54

              Tu n'es sûrement pas encore arrivé à cette partie du cours de matéo. C'est pour bientôt, c'est juste après le TP plus ou moins je pense. Tu comprendras très vite l'intérêt des fonctions qui te permettront d'éviter les redondances dans ton code. Dans le cas du TP plus ou moins par exemple, tu pourrais écrire une fonction "jouer" qui serait appelée dans chaque "case" plutôt que de récrire 2 fois pratiquement le même code. Mais bon tu n'es pas encore là, contente toi de déboguer ton programme avant, et après avoir lu le chapitre des fonctions tu l'optimisera.

              En ce qui concerne la boucle infinie, je peux pas t'aider, j'ai fait un copier-coller de ton code, j'ai changer ce que je t'ai dis de changer et ça marche ^^ .
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                24 octobre 2008 à 12:30:14

                en effet,je ne suis pas arriver,sinon ce qui concerne pour la condition,si je remplace 0 par 1,quand je fini la parti à 1 joueur,et que je mets non,sa me dit à bientot,puis tapez un nombre....

                donc je sais pas si tu avais mis non pour test...
                • Partager sur Facebook
                • Partager sur Twitter
                  24 octobre 2008 à 13:47:26

                  C'est normal que cela te demande à nouveau un nombre vu que tu as mis du code après ton switch. Ton code pourrais être 2 fois plus court, il y a beaucoup d'instructions inutiles. Il y a comme je t'ai dis le code après le switch mais également avant : il génère 2 fois un nombre aléatoire et dans le switch tu en génère un autre donc ça fait 3 en tout alors que tu n'a besoin de le faire qu'une seule fois par "case".
                  • Partager sur Facebook
                  • Partager sur Twitter

                  TP 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