Partage
  • Partager sur Facebook
  • Partager sur Twitter

aidez moi papier caillou ciseau

<H1>à voir urgence !</H1>

Sujet résolu
    15 janvier 2006 à 20:39:21

    Je voudrais que mon jeu s'arrête quand un des deux joueurs(joueur ou ordinateur) à 3 points.
    Et je ne vois pas où est le bug car le jeu ne s'arrête seulement que quand les 2 joueurs ont minimum 3 points.

    Qui peut m'aider ?


    Voici le code source du jeu !




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


    int main ( int argc, char** argv )


    {
        printf("Le jeu papier caillou ciseau contre l'ordinateur !\n\n\n");
    printf("Createur : berli888 ---->Programmeur debutant en C et bientot C++ !\n\n\n");
    printf("N'entrez pas des lettres sinon mon jeu bug !\n\n\n\n");
    system("pause");
       
        long ordi = 0, player = 0, scoreordi = 0, scoreplayer = 0;
        const long MAX = 3, MIN = 1;

        // Génération du nombre aléatoire

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

        /* La boucle du programme. Elle se répète tant que l'utilisateur
        ou l'ordi n'as pas 3 points. */


        do
        {
            system("cls");
            // On demande quel nombre on choisir
            srand(time(NULL));
        ordi = (rand() % (MAX - MIN + 1)) + MIN;
       
            printf("1. papier\n");
            printf("2. caillou\n");
            printf("3. ciseau\n");
            printf("Que choississez vous ?");
            scanf("%ld", &player);

            // Comparaison ordi vs player

            if (ordi == 1 && player == 1)
            {
            printf("Papier / Papier -- Egalite !\n\n");
            }
            else if (ordi == 1 && player == 2)
            {
                printf("Papier / Caillou -- l'ordinateur gagne !\n\n");
                scoreordi++;
                }
            else if (ordi == 1 && player == 3)
            {
                printf("Papier / Ciseau -- Vous gagnez !\n\n");
                scoreplayer++;
                }
               
               
               
               
            else if(ordi == 2 && player == 1)
            {
                printf("Caillou / Papier -- Vous gagnez !\n\n");
                scoreplayer++;
               
                }
            else if (ordi == 2 && player == 2)
            {
                printf("Caillou / Caillou -- Egalite !\n\n");
                }
            else if (ordi == 2 && player == 3)
            {
                printf("Caillou / Ciseau -- l'ordinateur gagne !\n\n");
                scoreordi++;
                }
               
               
               
               
            else if (ordi == 3 && player == 1)
            {
                printf("Ciseau / Papier -- L'ordinateur gagne !\n\n");
                scoreordi++;
                }
            else if (ordi == 3 && player == 2)
            {
                printf("Ciseau / Caillou -- Vous gagnez !\n\n");
                scoreplayer++;
                }
            else if (ordi == 3 && player == 3)
            {
                printf("Ciseau / Ciseau -- Egalite !\n\n");
                }
               
               
               
               
           
            else
                printf ("Vous devez choisir entre 1,2 et 3.\n\n");
        } while (scoreordi < 3 || scoreplayer < 3);
    printf("fin du match. Score :\n");
    printf("ordi : %ld\n", scoreordi);
    printf("vous : %ld\n", scoreplayer);
        system("PAUSE");
    }
    • Partager sur Facebook
    • Partager sur Twitter
      15 janvier 2006 à 21:05:04

      tu t'es tromper dans ton while
      }while(scoreordi != 3 || scoreplayer != 3);

      cela veut dire " recommence tant que scoreordi n'est pas égal à trois OU tant que scoreplayer n'est pas égal à trois"
      • Partager sur Facebook
      • Partager sur Twitter
        15 janvier 2006 à 21:17:58

        Salut, en fait le code de fock est encore pire, il ne va s'arreter que si les deux joueurs ont 3 en meme temps, donc si le joueur a 4 points et l'ordinateur en a 2, le jeu ne finira jamais.

        Le premier code :
        while (scoreordi < 3 || scoreplayer < 3)

        signifie, tant que un des deux joueurs a moins de 3, continue. Il attendra donc que les deux joueurs aient au moins 3.

        Le deuxième code :
        while(scoreordi != 3 || scoreplayer != 3)

        signifie, tant que qu'un des deux joueurs n'a pas 3 continue. Il faudrait donc que les deux joueur aient 3 pour que la boucle arrête


        Il faudrait simplement changer le premier pour
        while (scoreordi < 3 && scoreplayer < 3)

        qui signifie, continue tant que les deux joueurs ont moins de 3 points, il s'arrêtera donc dès qu'un joueur atteint les 3 points

        Tu pourrais aussi faire :
        while (scoreordi != 3 && scoreplayer != 3)

        qui signifie, continue tant que les deux joueurs ont un score différent de 3.

        Voila.
        • Partager sur Facebook
        • Partager sur Twitter
          15 janvier 2006 à 21:31:30

          pourquoi n'utilise-tu pas une boucle while ?
          • Partager sur Facebook
          • Partager sur Twitter
            16 janvier 2006 à 12:48:42

            @fjxokt : c'est ce qu'il a fait!

            @acidrain : ben je vois pas en quoi mon code est faux... si un joueur a 3 points la boucle s'arrête. ton 2 ème code est faux car lui il veux que dès qu'un des deux joueurs à 3 points cela s'arrête, mais si un joueur a 3 et l'autre 2 la boucle ne va pas s'arrêter. c'est bien ça ?

            ps : j'ai lu vite fait donc si j'ai dit des co... bêtises :D
            • Partager sur Facebook
            • Partager sur Twitter
              16 janvier 2006 à 16:34:09

              il utilise une do while
              perso j'aurai plutot fait

              while (scoreordi < 3 && scoreplayer < 3)
              {
              blabla
              }
              • Partager sur Facebook
              • Partager sur Twitter
                16 janvier 2006 à 19:05:50

                @ fock : quand tu fais :
                while (scoreordi != 3 || scoreplayer != 3)

                continue si un des deux joueurs n'a pas 3 points, la boucle ne va s'arreter que dans le cas ou les deux joueurs ont 3 points

                Par contre, avec :
                while (scoreordi != 3 && scoreplayer != 3)

                la boucle tourne tant que les deux scores sont différent de 3 et s'arrete des qu'un des deux joueurs arrive a 3

                Je viens tout juste de vérifier et je suis sur que ca fonctionne
                • Partager sur Facebook
                • Partager sur Twitter
                  16 janvier 2006 à 19:10:19

                  oula...moi je ne suis pas ta logique mais tu doit avoir raison
                  • Partager sur Facebook
                  • Partager sur Twitter
                    16 janvier 2006 à 19:29:27

                    Salut.

                    J'ai un peu améliorer ton code, histoire de te permettre de comprendre tes erreurs, et de voir aussi à quel point il était lourd.
                    Le mien est encore loin d'être optimisé, même avec ce que je connais seulement grâce au cours de mateo.
                    Dis-toi toujours qu'il y a généralement un moyen de faire plus simple quand tu commence à empiler les if.

                    J'espere que je t'aurais aider.
                    A+


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


                    int main ( int argc, char** argv )
                    {   
                         
                         
                        long ordi = 0, player = 0, scoreordi = 0, scoreplayer = 0;
                        const long MAX = 3, MIN = 1;


                        /* La boucle du programme. Elle se répète tant que l'utilisateur
                        ou l'ordi n'as pas 3 points. */


                       while ( scoreordi < 3 && scoreplayer < 3 )
                       {
                         
                            // On demande quel nombre on choisir
                            srand(time(NULL));
                            ordi = (rand() % (MAX - MIN + 1)) + MIN;
                       
                            printf("1. papier\n");
                            printf("2. caillou\n");
                            printf("3. ciseau\n");
                            printf("Que choississez vous ?");
                            scanf("%ld", &player);

                            // Comparaison ordi vs player

                            switch(player)
                            {
                                        case 1:
                                             switch(ordi)
                                             {
                                                           case 1:
                                                                printf("Papier / Papier -- Egalite !\n\n");
                                                                break;
                                                           case 2:
                                                                printf("Caillou / Papier -- Vous gagnez !\n\n");
                                                                scoreplayer++;
                                                                break;
                                                           case 3:
                                                                printf("Ciseau / Papier -- L'ordinateur gagne !\n\n");
                                                                scoreordi++;
                                                                break;
                                             }
                                             break;
                                       
                                        case 2:
                                             switch(ordi)
                                             {
                                                           case 1:
                                                                printf("Papier / Caillou -- l'ordinateur gagne !\n\n");
                                                                scoreordi++;
                                                                break;
                                                           case 2:
                                                                printf("Caillou / Caillou -- Egalite !\n\n");
                                                                break;
                                                           case 3:
                                                                printf("Caillou / Ciseau -- l'ordinateur gagne !\n\n");
                                                                scoreordi++;
                                                                break;
                                             }
                                             break;
                                         
                                        case 3:
                                             switch(ordi)
                                             {
                                                           case 1:
                                                                printf("Papier / Ciseau -- Vous gagnez !\n\n");
                                                                scoreplayer++;
                                                                break;
                                                           case 2:
                                                                printf("Papier / Caillou -- l'ordinateur gagne !\n\n");
                                                                scoreordi++;
                                                                break;
                                                           case 3:
                                                                printf("Ciseau / Ciseau -- Egalite !\n\n");
                                                                break;
                                             }
                                             break;
                                                 
                                        default:
                                        printf ("Vous devez choisir entre 1,2 et 3.\n\n");         
                            }                                                                                                 
                               
                                system("pause");
                                system("cls");
                               
                                }
                               
                    printf("fin du match. Score :\n");
                    printf("ordi : %ld\n", scoreordi);
                    printf("vous : %ld\n", scoreplayer);
                        system("PAUSE");
                    }
                    • Partager sur Facebook
                    • Partager sur Twitter
                      16 janvier 2006 à 19:52:44

                      oui oui c'est bien ca : quand on utilise && les deux test doivent etre vrai pour que la boucle continue. si l'un des deux n'est plus vérifié la boucle s'arrête.
                      quand on utilise || seulement un des deux test doit être vérifié pour que la boucle continue. elle ne s'arrêtera que si les deux test ne sont plus vérifiés.
                      • Partager sur Facebook
                      • Partager sur Twitter

                      aidez moi papier caillou ciseau

                      × 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