Partage
  • Partager sur Facebook
  • Partager sur Twitter

Pierre, papier, ciseau

On s'amuse comme on peut^^

    27 novembre 2005 à 21:49:15

    Bonjours! :)
    Venant à peinde de me mettre au C/C++, j'ai fait un petit jeu de pierre/papier/ciseau pour m'exercer : Telechargement
    Avez-vous quelques conseils ?
    Nottement, si au lieu des choix proposés on entre une lettre, le programme plante.
    Comment eviter ca ?
    Merci d'avance ;)

    Edit : Source

    #include <cstdlib>
    #include <iostream>

    using namespace std;

    int tirage (int min, int max)
    {
        int tirage = rand();
       
        while (tirage>max || tirage<min)
        {
            tirage = rand();
        }
           
            return tirage;
    }

    int gain (int choix, int adversaire)
    {
            int retour = 0;
            //1 pierre
            //2 papier
            //3 ciseaux
            //4 puit
            if (choix == 1 and adversaire == 2)
            {
                    retour = 0;
            }
           
            if (choix == 1 and adversaire == 3)
            {
                    retour = 1;
            }
           
            if (choix == 1 and adversaire == 4)
            {
                    retour = 0;
            }
            if (choix==2 and adversaire==1)
            {
                    retour = 1;
            }
            if (choix==2 and adversaire==3)
            {
                    retour = 0;
            }
            if (choix==2 and adversaire==4)
            {
                    retour= 1;
            }
            if (choix==3 and adversaire==1)
            {
                    retour= 0;
            }
            if (choix==3 and adversaire==2)
            {
                    retour= 1;
            }
            if (choix==3 and adversaire==4)
            {
                    retour= 0;
            }
            if (choix==4 and adversaire==1)
            {
                    retour= 1;
            }
            if (choix==4 and adversaire==2)
            {
                    retour= 0;
            }
           
            if (choix==4 and adversaire==3)
            {
                    retour= 1;
            }
           
            if (choix == adversaire)
            {
           retour = 2;       
                  }
            return retour ;

    }

    void choix_adv(int adversaire1)
    {
           
            if(adversaire1==1)
            {
                    cout << "pierre";
            }
            if(adversaire1==2)
            {
                    cout << "papier";
            }
            if(adversaire1==3)
            {
                    cout << "ciseaux";
            }
            if(adversaire1==4)
            {
                    cout << "puit";
            }
            //1 pierre
            //2 papier
            //3 ciseaux
            //4 puit
           


    }

    int main(int argc, char *argv[])
    {
             srand(time(NULL));
            int choix1;
            int valid=0;
            char rejouer='r';
            cout << "Jouons a pierre-papier-ciseaux !";
            while (rejouer=='r')
            {
                    int adversaire2 = tirage (1,4);
                    cout << "\n______________________________________ \n \n";
                    cout << "\n 1 pour pierre";
                    cout << "\n 2 pour papier ";
                    cout << "\n 3 pour ciseaux";
                    cout << "\n 4 pour puit \n Choix>";
                    cin >> choix1;
                    if (choix1==1 || choix1==2 || choix1==3 || choix1==4 )
                    {
                            int gagnant = gain(choix1, adversaire2);
                            cout << "\n ";
                            choix_adv(choix1);
                cout << " ? J'ai tire ";
                            choix_adv(adversaire2);
                            cout << endl;
                   
                   
                   
                            if(gagnant==1)
                            {
                                    cout << " Felicitation, tu as donc gagne !"<< endl;
                            }
                            else if(gagnant==0)
                            {
                                    cout << " Haha ! J ai gagne !" << endl;
                            }
                            else
                            {
                                    cout << " Match nul !" << endl;
                            }
                   
                            cout << "\n Pour rejouer, appuyer sur r , sinon sur n'importe quelle touche pour quitter \n Choix>";
                           
                            cin >> rejouer ;
                    }
                    else
                    {
                            cout << "\nVous n'avez pas rentre un caractere valide. \nTapez r pour recommencer, ou n'importe quelle autre caractere pour quitter\nChoix>";
                           
                            cin >> rejouer ;
                    }
                              
     
           
            }

     
    }
    • Partager sur Facebook
    • Partager sur Twitter
      27 novembre 2005 à 21:51:11

      Hmm et le source il est où ?
      • Partager sur Facebook
      • Partager sur Twitter
        27 novembre 2005 à 21:54:19

        Oh dsl je suis *** moi ! voilà j'ai mis la source ;)
        • Partager sur Facebook
        • Partager sur Twitter
          27 novembre 2005 à 21:57:04

          salut!
          bon je suis beaucoup plus nul que toi en c/c++ (je sais a peine afficher un message) mais je pense que tu peux faire mieux en enlevant toutes ces conditions en les remplaçant parexemple par un tableau ??
          • Partager sur Facebook
          • Partager sur Twitter
            27 novembre 2005 à 21:59:45

            Citation : nemesisTHEone

            salut!
            bon je suis beaucoup plus nul que toi en c/c++ (je sais a peine afficher un message) mais je pense que tu peux faire mieux en enlevant toutes ces conditions en les remplaçant parexemple par un tableau ??


            Oui c'est vrai que ca fait lourd toutes ces conditions... mais avec un tableau, comment faire ? Est-ce pareil qu'en php ?
            • Partager sur Facebook
            • Partager sur Twitter
              28 novembre 2005 à 7:31:38

              Citation : Tyr@el

              Citation : nemesisTHEone

              salut!
              bon je suis beaucoup plus nul que toi en c/c++ (je sais a peine afficher un message) mais je pense que tu peux faire mieux en enlevant toutes ces conditions en les remplaçant parexemple par un tableau ??


              Oui c'est vrai que ca fait lourd toutes ces conditions... mais avec un tableau, comment faire ? Est-ce pareil qu'en php ?


              NON CE N'EST PAS PAREIL QU'EN PHP ET CE NE SERA JAMAIS PAREIL !

              Je crois que jevais le mettre dans ma signature lol
              Et sinon je sais pas si c'est possible avec u tableau je vois pas trop ce que vous voulez dire o_O
              • Partager sur Facebook
              • Partager sur Twitter
                28 novembre 2005 à 7:39:37

                On peut mettre un tableau mais sinon plus simple :
                r = 0;
                if (a == 1 && b == 3 || a == 2 && b == 1 || ...)
                r = 1;
                • Partager sur Facebook
                • Partager sur Twitter
                  28 novembre 2005 à 8:30:35

                  Ou sinon un switch, mais je pense qsue la meilleure solution reste:
                  int gain (int choix, int adversaire)
                  {
                          int retour = 0;
                          //1 pierre
                          //2 papier
                          //3 ciseaux
                          //4 puit
                         
                  if (choix == adversaire)
                          {
                         return 2;       
                          }

                  if ((choix == 1 && adversaire == 2)) OR (choix == 1 && adversaire == 4) OR (choix==2 && adversaire==3) OR (choix==3 && adversaire==1) OR (choix==3 && adversaire==4) OR (choix==4 && adversaire==2)
                          {
                                  return 0;
                          }
                  else 
                          {   
                                  return 1
                          }
                  }
                       



                  et pour ça:
                  if(gagnant==1)
                                          {
                                                  cout << " Felicitation, tu as donc gagne !"<< endl;
                                          }
                                          else if(gagnant==0)
                                          {
                                                  cout << " Haha ! J ai gagne !" << endl;
                                          }
                                          else
                                          {
                                                  cout << " Match nul !" << endl;
                                          }


                  Moi je mettrai plutôt:

                   switch (gagnant){
                     case 1:{
                        cout << " Felicitation, tu as donc gagne !"<< endl;
                        break;
                     }                     
                     case 0:{
                        cout << " Haha ! J ai gagne !" << endl;
                        break;
                     }
                        defaut:{
                        cout << " Match nul !" << endl;
                        break;
                     }
                  }
                  • Partager sur Facebook
                  • Partager sur Twitter
                    28 novembre 2005 à 13:40:00

                    un tableau en C++, c'est pas trop evident, en fait, oui, mais il est pas dinamique (les tableau normal)

                    Donc si tu sait que il y a 4 possibilite, tu peut faire un tableau 4x4, ou Matrice 4x4, et t'amuser un peut

                    Pour declare un tableau £4x4 tu fait

                    int Tableau[4][4];

                    Tableau est le nom, et les indices sont entre 0 et 3, donc 0,1,2,3

                    Apres tu doit initialiser le tableau, donc metres des valeurs a l'interieur, (un double boucle for)

                    Et pour finir, tu regard, si Utilisateur 1 met 2 et Utilisateur 2 met 3, tu regarde la valeur pour dans Tableua de [2][3] qui aura une valuer, ou 1 ou 2, et tu saure quel jouer a gagne
                    • Partager sur Facebook
                    • Partager sur Twitter
                      28 novembre 2005 à 14:07:38

                      Je crois que ton else, tu devrais le mêtre dans les conditions "si il a joué ça et l'autre ça...".
                      Parce que là, daprès moi, il commence à faire la boucle, il arrive dans les conditions, il atteint rien... donc sa continue à tourner... il sort jamais de la boucle, donc fais jamais le else qui dit que ça ne fais pas partit des choix.

                      Sinons, tu pourrais faire "si c'est une de ses valeur, fais la boucle. Sinons, c'est pas correct"
                      (en gros, mêtre un if(ces valeurs) fais la boucle, else ça fais pas partit des choix)
                      En fais, je crois que ton else est tout seul :p Comment ça sinons?


                      De tout façon, je ocnnais pas grand chose au C. J'ai juste lut le cours de m@téo :p

                      Edit: Bon, je sais que ce message n'est pas très clair, mais j'ai pas le temps de le clarifier...
                      En gros, je te dit que celon moi, ce else n'est pas bien placé:
                                      else
                                      {
                                              cout << "\nVous n'avez pas rentre un caractere valide. \nTapez r pour recommencer, ou n'importe quelle autre caractere pour quitter\nChoix>";
                                             
                                              cin >> rejouer ;
                                      }

                      parce que ton programme n'y arrive jamais
                      et je te propose des endroits où le mêtre :p
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        28 novembre 2005 à 18:50:25

                        Une optimisation trouvée par un copain sur le Papier Caillou Ciseau (sans ce foutu puit gacheur de règles ^^ ) consistait à faire des soustractions.

                        Voilà son code source (en Python)

                        http://dashuhn.free.fr/pcc.py.html

                        Si ça vous intéresse.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          28 novembre 2005 à 19:01:11

                          Oula, c'est bien trouvé ça :) Il a bien du se creser la tête ...
                          • Partager sur Facebook
                          • Partager sur Twitter
                            28 novembre 2005 à 19:06:32

                            Citation : Cocio_16

                            Je crois que ton else, tu devrais le mêtre dans les conditions "si il a joué ça et l'autre ça...".
                            Parce que là, daprès moi, il commence à faire la boucle, il arrive dans les conditions, il atteint rien... donc sa continue à tourner... il sort jamais de la boucle, donc fais jamais le else qui dit que ça ne fais pas partit des choix.

                            Sinons, tu pourrais faire "si c'est une de ses valeur, fais la boucle. Sinons, c'est pas correct"
                            (en gros, mêtre un if(ces valeurs) fais la boucle, else ça fais pas partit des choix)
                            En fais, je crois que ton else est tout seul :p Comment ça sinons?


                            De tout façon, je ocnnais pas grand chose au C. J'ai juste lut le cours de m@téo :p

                            Edit: Bon, je sais que ce message n'est pas très clair, mais j'ai pas le temps de le clarifier...
                            En gros, je te dit que celon moi, ce else n'est pas bien placé:

                                            else
                                            {
                                                    cout << "\nVous n'avez pas rentre un caractere valide. \nTapez r pour recommencer, ou n'importe quelle autre caractere pour quitter\nChoix>";
                                                   
                                                    cin >> rejouer ;
                                            }


                            parce que ton programme n'y arrive jamais
                            et je te propose des endroits où le mêtre :p



                            C'est pas vraiment ca le problème : en fait si tu rentres par exemple 5 qui est un nombre non compris entre 1 et 4, le else est exécuté, mais si tu rentre une chaine de caractère ou un caractère, le else n'est pas éxécuté car on ne peut pas mettre des caractères dans une variable de type int !
                            Quelqu'un connait-il une fonction qui renvoie le type d'une variable ? Si oui,
                            je suis preneur :p
                            => Je vais me pencher sur la source en python pour voir un peu, mais de toute facon, ce pierre-papier-ciseau; je compte pas y passer ma vie :p
                            Merci à tous pour vos réponses !
                            Tyr@el
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Anonyme
                              28 novembre 2005 à 19:07:14

                              007> Surtout qu'il touche à un code maximum une fois par moi.

                              Comme quoi, la créativité c'est important, et la prog est aussi un art ;) .
                              • Partager sur Facebook
                              • Partager sur Twitter
                                28 novembre 2005 à 19:51:30

                                Un petit lien qui explique comment demander quelquechose jusqu'à l'obtenir.

                                http://perso.numericable.fr/~fvirtman/info/tuto/1_05_while.cpp
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  28 novembre 2005 à 20:40:49

                                  Citation : Insomniak

                                  Un petit lien qui explique comment demander quelquechose jusqu'à l'obtenir.

                                  http://perso.numericable.fr/~fvirtman/info/tuto/1_05_while.cpp


                                  Merci, c'est logique, mais comme je l'ai expliqué plus haut si on entre une variable d'un autre type que int ca ne marche pas, car on essaie de tester un entier et non une chaine de caractère.
                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  Pierre, papier, 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