IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Pierre Feuille Ciseaux


Sujet :

C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 13
    Points : 8
    Points
    8
    Par défaut Pierre Feuille Ciseaux
    Bonjour, je m'essaye au C++ et j'ai voulu faire un mini-jeux avec mes connaissances. Mais je ne comprend pas où sa plante.
    Ce jeux est celui du pierre feuille ciseaux, faites un petit test pour voir comment il nemarche pas ^^.
    Merci de m'aider dans un premier temps à le faire marcher et dans un deuxieme temps à simplifier mon code, des if tout le long je pense qu'il y a mieux mais je ne connais pas.
    Merci d'avance.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    #include <cstdio>
    #include <cstdlib>
    #include <iostream>
    using namespace std;
     
    int main(int nNumberofArgs, char* pszArgs[])
    {
        cout << "Voici le jeux du pierre-feuille-ciseaux.\n 0 = pierre\n 1=feuille\n 2=ciseaux\n 3 pour quitter" << endl;
     
        int chxUt, randComp, TUt, TComp;
     
        re:
            randComp = rand() % 3;
     
            cin >> chxUt;
            if (chxUt > 3)
            {
                      cout << "Entrez un nombre compris entre 0 et 3" << endl;
                      goto re;
            }
     
            if (chxUt = 0)
            {
                  if (randComp = 1)
                  {
                               cout << "pierre - pierre" << endl;
                               cout << "   EGALITE" << endl;
                  }
     
                  if (randComp = 2)
                  {
                               cout << "pierre - feuille" << endl;
                               cout << "   PERDU" << endl;
                               TComp++;
                  }
     
                  if (randComp = 3)
                  {
                               cout << "pierre - ciseaux" << endl;
                               cout << "   GAGNE" << endl;
                               TUt++;
                  }
     
                  goto re;
            }
     
            if (chxUt = 1)
            {
                  if (randComp = 1)
                  {
                               cout << "feuille - pierre" << endl;
                               cout << "   GAGNE" << endl;
                               TUt++;
                  }
     
                  if (randComp = 2)
                  {
                               cout << "feuille - feuille" << endl;
                               cout << "   EGALITE" << endl;
                  }
     
                  if (randComp = 3)
                  {
                               cout << "feuille - ciseaux" << endl;
                               cout << "   PERDU" << endl;
                               TComp++;
                  }
     
                  goto re;
            }
     
            if (chxUt = 2)
            {
                  if (randComp = 1)
                  {
                               cout << "ciseaux - pierre" << endl;
                               cout << "   PERDU" << endl;
                               TComp++;
                  }
     
                  if (randComp = 2)
                  {
                               cout << "ciseaux - feuille" << endl;
                               cout << "   GAGNE" << endl;
                               TUt++;
                  }
     
                  if (randComp = 3)
                  {
                               cout << "ciseaux - ciseaux" << endl;
                               cout << "   EGALITE" << endl;
                  }
     
                  goto re;
            }
     
        if (chxUt = 3)
        {
                  cout << "Fin de la partie.\n Score:\n Utilisateur : " << TUt << "\n Ordinateur : " << TComp << endl;
                  goto fin;
        }
        fin:
        system("PAUSE");
        return 0; 
    }

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 36
    Points : 33
    Points
    33
    Par défaut
    essaye de faire des fonction plutot que tes goto ou bien des boucles....
    Pour les if tu peut utiliser switch, case.
    ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    switch(x)
    {
    case 1 : // on fait ce qu'il faut si x=1
      break; // on sort du switch
    case 2 : // on fait ce qu'il faut si x=2
      break;
    default : // on fait ce qu'il faut pour les autres cas...
    }

  3. #3
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 370
    Points : 40 164
    Points
    40 164
    Par défaut
    tu entends quoi par "il ne marche pas ?"

    déjà, et c'est un erreur fréquente, l'opérateur = est celui d'affectation et non celui de comparaison. Pour comparer deux valeurs, il faut prendre ==
    Tu peux déjà changer ça dans tous tes if
    Ensuite, il va falloir sérieusement penser aux boucles et à la suppression des goto.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 66
    Points : 26
    Points
    26
    Par défaut
    Comme à dit mnaulet tu devrais simplifier ton code en le décomposant dans des fonctions que tu crées dans une source separé(function.cpp par ex) et ensuite tu appeles tes quelques fonctions dans le int main() et la tu verras que ca sera plus simple à regler,
    ggcourtois

  5. #5
    Membre habitué
    Avatar de superspag
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 153
    Points : 186
    Points
    186
    Par défaut
    Quelques petites remarques (si ça peut t'aider)

    - N'utilise pas de "goto"... essais de faire des fonctions ou alors utilise des instructions conditionnelles comme while(...) par exemple.

    - Tu confonds l'opérateur d'affectation = et l'opérateur d'égalité ==

    - Attention, les formules du type R = rand() % N; ne sont pas uniformes.

    - Attention, quand tu utilises des rand() il faut initialiser un germe... sinon les séquences pseudo-aléatoires sont toujours les mêmes.

    Essais de travailler sur ça déjà. Normalement, tu trouveras des réponses dans la FAQ.

    Si tu as besoin d'aide... Essai de re-ecrire un bout de code déjà

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 94
    Points : 64
    Points
    64
    Par défaut
    Attention a la commande random : quand tu l'appelles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     int x;
     x=random(3);
     // ou encore
     x=rand()%3;
    Il faut que tu fasses un random de 4 ainsi tu auras le 0,1,2,3...
    Ou incrémente la valeur x suivante
    Rajoute aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    srand(time(NULL));
    Tes chiffres seront vraiment des chiffres pris au hasard... avec un temps égal à 0... tu peux aussi mettre un interval par exemple : srand(3);
    où 3 correspond à un int _seed.


    Et un détail m'échappe : n'y a t-il pas de puit dans ce jeu?

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 66
    Points : 26
    Points
    26
    Par défaut
    Bonjour,
    A l'occasion de ta question j'ai écrit un petit-tac toe; comme toi sauf qu'il me semble qu'il est plus structuré(il me semble )
    Tu peux l'essayer si tu veux.

    le main :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    #include "function.h"
     
     
     
    int main()
    {
     
    int yours;
    int his;
    int score = 0 ;
    int scorehim = 0;
    int turns = 1;
    while(yours != 0)
     
    {
    srand(time(NULL));//choisis un numéro random
    his = (rand()%3)+1; //crée le numero entre 1 et 3 
    if(turns==1)
    {
    printindications(); // ne copie que les indications le 1er tour de jeu
    }
     
    cout << endl << endl << "turn " << turns  << " : " << endl; 
    cout << endl << endl << " What do you choose : ";
    cin >> yours; // input de ton choix
    cout << endl << endl;
    drawshape(yours,his); //envoye son rnd number ainsi que ton input dans la fonction qui se trouve dans fonction.cpp
    cout << choosemove(yours,his) << endl;
    turns+=1;
     
    }
     
     
     
     
     
    exit(0);
    system("PAUSE");
    return 0;
     
     
    }
    le function.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    #ifndef FUNCTION_H
    #define FUNCTION_H
     
    #include <iostream>
    #include <cstdlib>
    #include <string>
    #include <ctime> 
     
    using namespace std;
     
    void printindications();
    void drawshape(int yourmove,int hismove);
    string choosemove(int yourmove,int hismove);
     
     
    #endif
    le function.cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
     
    #include "function.h"
     
    string choosemove(int yourmove,int hismove)
    {
     
    string draw = "Its a Tie !";
    string win = "You won !";
    string lost = "You lost !";
    string falsemove = "Choose either the number 1,2 or 3; please";
    if(hismove==1)//pierre
    {
    	switch(yourmove)
    	{	
     
    	case 1 :
    			//pierre
    			return draw;
     
    			break;
    	case 2 ://paper
    			return win;
     
    			break;
    	case 3 ://ciseaux
    			return lost;
     
    			break;
    	default :
    			return falsemove;
    			break;
     
    	}
     
    }
    if(hismove==2)//papier
    {
    	switch(yourmove)
    	{	
     
    	case 1 ://pierre
    			return lost;
     
    			break;
    	case 2 ://papier
    			return draw;
     
    			break;
    	case 3 ://ciseaux
    			return win;
     
    			break;
    	default :
    			return falsemove;
    			break;
     
    	}
     
    }
    if(hismove==3)//ciseaux
    {
    	switch(yourmove)
    	{	
     
    	case 3 ://ciseaux
    			return draw;
     
    			break;
    	case 1 ://pierre
    			return win;
     
    			break;
    	case 2 ://papier
    			return lost;
     
    			break;
    	default : 
    			return falsemove;
    			break;
     
    	}
     
     
    }
     
     
    }
     
    void drawshape(int yourmove,int hismove)
    {
    	bool stopplay = false;
     
    	switch(yourmove)
    	{
    	case 3 : //ciseaux
     
    		cout << " <  vs " ; 
    		break;
     
    	case 1 : //pierre
     
    		cout << " [-]   vs";
    		break;
     
    	case 2 ://papier
     
    		cout << " /~~/  vs ";
    		break;
     
    	default :
     
    		cout << "[~_~] " ; 
    		stopplay = true;
    		break;
     
    }
     
    if(stopplay !=true)
    {
    	switch(hismove)
    	{
    	case 3 : //ciseaux
     
    		cout << "  >" << endl <<endl;
    		break;
     
    	case 1 : //pierre
     
    		cout << "  [-]" << endl << endl;
    		break;
     
    	case 2 ://papier
     
    		cout << "  /~~/" << endl << endl;
    		break;
     
    	default :
     
    		cout << "[~_~]" << endl << endl ; 
    		break;
     
     
    }
    }
    }
    void printindications()
    {
    	cout << " Type : " << endl << " 1 for rock ([-]) " << endl << " 2 for paper (/~~/) " << endl << " 3 for cissors (<)" << endl;
    }
    ggcourtois

  8. #8
    Membre habitué
    Avatar de superspag
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 153
    Points : 186
    Points
    186
    Par défaut
    C'est un peu long est compliqué tous ces switch non ?

    Ne vaudrait il pas mieux utiliser une petite fonction du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    enum fcp { feuille, ciseaux, pierre };
    enum wld { win, loose, draw };
     
    // Fonction qui verifie le jeu du joueur A par rapport à celui du joueur B.
    wld verify( fcp A, fcp B ) {
      if( A == B )
        return draw;
      else if( A == feuille && B == pierre  ||
               A == ciseaux && B == feuille ||
               A == pierre  && B == ciseaux )
        return win;
      else
        return loose;
    }
    Enfin j'dis ça... j'dis rien

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Merci tout le monde pour vos aides, mais je debute vraiment en C++ et il y a un max de truc que je ne comprends absolument pas ....
    Je vais essayer ce que vous m'avez suggéré et si ça bloque je vous dirait ce qui va pas.

    Merci encore ^^

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Je sais que ces lignes font peur rien que lorsqu'on les regardent, mais je pense qu'il n'y a pas trop de vrai fautes, plutot des choses que je ne sais pas faire. (comment on fait la mise en page?)
    A vous de m'aider ^^.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    #include <cstdio>
    #include <cstdlib>
    #include <iostream>
    using namespace std;
     
                                                                                    // Où je dois mettre ça " srand(time(NULL)) " ?
     
    int TUt = 0, TComp = 0, randComp = rand() % 4;                                  // Si quelqu'un a l'envie de faire ça avec des pointeurs je prends ^^
     
    int main(int nNumberofArgs)                                                     // Je ne retourne rien avec main(), écrire " void main(int nNumberofArgs) " ne serait pas plus correct?
        {        
            cout << "Voici le jeux du pierre-feuille-ciseaux.\n 1 = pierre\n 2=feuille\n 3=ciseaux\n 4 pour quitter" << endl;
     
            int chxUt = 0;
     
            cin >> chxUt;
     
            if (chxUt == 1)
               {
                    pierre();
               }
     
             if (chxUt == 2)
               {
                    feuille();
               }
     
             if (chxUt == 3)
               {
                    ciseaux();
               }
            return 0;
        }
     
    int pierre (int randComp)                                                       // Je ne retourne rien avec pierre(), écrire " void pierre(int randComp) " ne serait pas plus correct?
            {
                switch(randComp)
                {
                case 1 : cout << "pierre - pierre" << endl;
                         cout << "   EGALITE" << endl;
                  break;
                case 2 : cout << "pierre - feuille" << endl;
                         cout << "   PERDU" << endl;
                         TComp++;
                    break;
                case 3 : cout << "pierre - ciseaux" << endl;
                         cout << "   GAGNE" << endl;
                         TUt++;
                    break;
                case 4 : end();
                    break;
                default : error();
                }
                return 0;
            }
     
    int feuille (int randComp)                                                      // Je ne retourne rien avec feuille(), écrire " void feuille(int randComp) " ne serait pas plus correct?
            {
                switch(randComp)
                {
                case 1 : cout << "feuille - pierre" << endl;
                         cout << "   GAGNE" << endl;
                         TUt++;
                  break;
                case 2 : cout << "feuille - feuille" << endl;
                         cout << "   EGALITE" << endl;
                    break;
                case 3 : cout << "feuille - ciseaux" << endl;
                         cout << "   PERDU" << endl;
                         TComp++;
                    break;
                case 4 : end();
                    break;
                default : error();
                }
                return 0;
            }
     
    int ciseaux (int randComp)                                                      // Je ne retourne rien avec ciseaux(), écrire " void ciseaux(int randComp) " ne serait pas plus correct?
            {
                switch(randComp)
                {
                case 1 : cout << "ciseaux - pierre" << endl;
                         cout << "   PERDU" << endl;
                         TComp++;
                  break;
                case 2 : cout << "ciseaux - feuille" << endl;
                         cout << "   GAGNE" << endl;
                         TUt++;
                    break;
                case 3 : cout << "ciseaux - ciseaux" << endl;
                         cout << "   EGALITE" << endl;
                    break;
                case 4 : end();
                    break;
                default : error();
                }
                return 0;
            }
     
    void error (int chxUt)
         {
               cout << "Entrez un nombre compris entre 1 et 4" << endl;
     
               main();
     
               return 0;
         }
     
    void end (int TUt, TComp)
         {
             cout << "Fin de la partie.\n Score Utilisateur : " << TUt << "\n Score Ordinateur : " << TComp << endl;
     
        system("PAUSE");
        return 0;
         }
    PS: En bonus je vous offre de merveilleuses lignes d'erreurs :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    C:\Dev-Cpp\Pierre feuille ciseaux fonction switch.cpp In function `int main(int)':
    20 C:\Dev-Cpp\Pierre feuille ciseaux fonction switch.cpp `pierre' undeclared (first use this function)
    (Each undeclared identifier is reported only once for each function it appears in.)
    25 C:\Dev-Cpp\Pierre feuille ciseaux fonction switch.cpp `feuille' undeclared (first use this function)
    30 C:\Dev-Cpp\Pierre feuille ciseaux fonction switch.cpp `ciseaux' undeclared (first use this function)  
     C:\Dev-Cpp\Pierre feuille ciseaux fonction switch.cpp In function `int pierre(int)':
    41 C:\Dev-Cpp\Pierre feuille ciseaux fonction switch.cpp `int pierre(int)' used prior to declaration
    55 C:\Dev-Cpp\Pierre feuille ciseaux fonction switch.cpp `end' undeclared (first use this function)
    57 C:\Dev-Cpp\Pierre feuille ciseaux fonction switch.cpp `error' undeclared (first use this function)
     C:\Dev-Cpp\Pierre feuille ciseaux fonction switch.cpp In function `int feuille(int)':
    68 C:\Dev-Cpp\Pierre feuille ciseaux fonction switch.cpp `int feuille(int)' used prior to declaration
    82 C:\Dev-Cpp\Pierre feuille ciseaux fonction switch.cpp `end' undeclared (first use this function)
    84 C:\Dev-Cpp\Pierre feuille ciseaux fonction switch.cpp `error' undeclared (first use this function)
     C:\Dev-Cpp\Pierre feuille ciseaux fonction switch.cpp In function `int ciseaux(int)':
    95 C:\Dev-Cpp\Pierre feuille ciseaux fonction switch.cpp `int ciseaux(int)' used prior to declaration
    109 C:\Dev-Cpp\Pierre feuille ciseaux fonction switch.cpp `end' undeclared (first use this function)
    111 C:\Dev-Cpp\Pierre feuille ciseaux fonction switch.cpp `error' undeclared (first use this function)
     C:\Dev-Cpp\Pierre feuille ciseaux fonction switch.cpp In function `void error(int)':
    122 C:\Dev-Cpp\Pierre feuille ciseaux fonction switch.cpp `void error(int)' used prior to declaration
    11 C:\Dev-Cpp\Pierre feuille ciseaux fonction switch.cpp too few arguments to function `int main(int)'
    125 C:\Dev-Cpp\Pierre feuille ciseaux fonction switch.cpp at this point in file
    127 C:\Dev-Cpp\Pierre feuille ciseaux fonction switch.cpp return-statement with a value, in function returning 'void'
    127 C:\Dev-Cpp\Pierre feuille ciseaux fonction switch.cpp At global scope:
    135 C:\Dev-Cpp\Pierre feuille ciseaux fonction switch.cpp `TComp' is not a type
    136 C:\Dev-Cpp\Pierre feuille ciseaux fonction switch.cpp ISO C++ forbids declaration of `parameter' with no type
     C:\Dev-Cpp\Pierre feuille ciseaux fonction switch.cpp In function `void end(int, int)':
    136 C:\Dev-Cpp\Pierre feuille ciseaux fonction switch.cpp `void end(int, int)' used prior to declaration
    140 C:\Dev-Cpp\Pierre feuille ciseaux fonction switch.cpp return-statement with a value, in function returning 'void'

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    C'est pas beau mais ça marche YEEEEEEAAAAAAAHHHHHHHH.
    Pourquoi il ne faut pas utiliser de "goto" ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    #include <cstdio>
    #include <cstdlib>
    #include <iostream>
    using namespace std;
     
    int main(int nNumberofArgs, char* pszArgs[])
    {
        cout << "Voici le jeux du pierre-feuille-ciseaux.\n 1 = pierre\n 2=feuille\n 3=ciseaux\n 4 pour quitter" << endl;
     
        int  TUt = 0, TComp = 0;
     
        re:
     
            int  randComp = 0, chxUt = 0;
     
            randComp = rand() % 4;
     
            cin >> chxUt;
     
     
     
     
            if (chxUt > 4)
            {
                      cout << "Entrez un nombre compris entre 0 et 3" << endl;
                      goto re;
            }
     
            if (chxUt <= 0)
            {
                      cout << "Entrez un nombre compris entre 0 et 3" << endl;
                      goto re;
            }
     
            if (chxUt == 1)
            {
                  if (randComp == 1)
                  {
                               cout << "pierre - pierre" << endl;
                               cout << "   EGALITE" << endl;
                               goto re;
                  }
     
                  if (randComp == 2)
                  {
                               cout << "pierre - feuille" << endl;
                               cout << "   PERDU" << endl;
                               TComp++;
                               goto re;
                  }
     
                  if (randComp == 3)
                  {
                               cout << "pierre - ciseaux" << endl;
                               cout << "   GAGNE" << endl;
                               TUt++;
                               goto re;
                  }
     
                  goto re;
     
            }
     
            if (chxUt == 2)
            {
                  if (randComp == 1)
                  {
                               cout << "feuille - pierre" << endl;
                               cout << "   GAGNE" << endl;
                               TUt++;
                               goto re;
                  }
     
                  if (randComp == 2)
                  {
                               cout << "feuille - feuille" << endl;
                               cout << "   EGALITE" << endl;
                               goto re;
                  }
     
                  if (randComp == 3)
                  {
                               cout << "feuille - ciseaux" << endl;
                               cout << "   PERDU" << endl;
                               TComp++;
                               goto re;
                  }
     
                  goto re;
     
            }
     
            if (chxUt == 3)
            {
                  if (randComp == 1)
                  {
                               cout << "ciseaux - pierre" << endl;
                               cout << "   PERDU" << endl;
                               TComp++;
                               goto re;
                  }
     
                  if (randComp == 2)
                  {
                               cout << "ciseaux - feuille" << endl;
                               cout << "   GAGNE" << endl;
                               TUt++;
                               goto re;
                  }
     
                  if (randComp == 3)
                  {
                               cout << "ciseaux - ciseaux" << endl;
                               cout << "   EGALITE" << endl;
                               goto re;
                  }
     
                  goto re;
     
            }
     
        if (chxUt == 4)
        {
                  cout << "Fin de la partie.\n Score Utilisateur : " << TUt << "\n Score Ordinateur : " << TComp << endl;
                  goto fin;
        }
     
        fin:
     
        system("PAUSE");
        return 0; 
    }

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    C'est toujours pas bon mais c'est tout de meême un peu mieux.
    A l'aide ^^




    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    #include <cstdio>
    #include <cstdlib>
    #include <iostream>
    using namespace std;
     
    int TUt = 0, TComp = 0, randComp = rand() % 4;                                  // Si quelqu'un a l'envie de faire ça avec des pointeurs je prends ^^
     
    void pierre (int randComp);
    void feuille (int randComp);
    void ciseaux (int randComp);
    void error (int chxUt);
    void end (int TUt, int TComp);
     
    int main(int nNumberofArgs)
        {   
            srand(time(NULL));
     
            cout << "Voici le jeux du pierre-feuille-ciseaux.\n 1 = pierre\n 2=feuille\n 3=ciseaux\n 4 pour quitter" << endl;
     
            int chxUt = 0;
     
            cin >> chxUt;
     
            if (chxUt == 1)
               {
                    pierre();
               }
     
             if (chxUt == 2)
               {
                    feuille();
               }
     
             if (chxUt == 3)
               {
                    ciseaux();
               }
            return 0;
        }
     
     
     
     
     
     
    void pierre (int randComp)
            {
                switch(randComp)
                {
                case 1 : cout << "pierre - pierre" << endl;
                         cout << "   EGALITE" << endl;
                  break;
                case 2 : cout << "pierre - feuille" << endl;
                         cout << "   PERDU" << endl;
                         TComp++;
                    break;
                case 3 : cout << "pierre - ciseaux" << endl;
                         cout << "   GAGNE" << endl;
                         TUt++;
                    break;
                case 4 : end();
                    break;
                default : error();
                }
                return 0;
            }
     
     
     
     
     
     
    void feuille (int randComp)
            {
                switch(randComp)
                {
                case 1 : cout << "feuille - pierre" << endl;
                         cout << "   GAGNE" << endl;
                         TUt++;
                  break;
                case 2 : cout << "feuille - feuille" << endl;
                         cout << "   EGALITE" << endl;
                    break;
                case 3 : cout << "feuille - ciseaux" << endl;
                         cout << "   PERDU" << endl;
                         TComp++;
                    break;
                case 4 : end();
                    break;
                default : error();
                }
                return 0;
            }
     
     
     
     
     
     
    void ciseaux (int randComp)
            {
                switch(randComp)
                {
                case 1 : cout << "ciseaux - pierre" << endl;
                         cout << "   PERDU" << endl;
                         TComp++;
                  break;
                case 2 : cout << "ciseaux - feuille" << endl;
                         cout << "   GAGNE" << endl;
                         TUt++;
                    break;
                case 3 : cout << "ciseaux - ciseaux" << endl;
                         cout << "   EGALITE" << endl;
                    break;
                case 4 : end();
                    break;
                default : error();
                }
                return 0;
            }
     
     
     
     
     
     
    void error (int chxUt)
         {
               cout << "Entrez un nombre compris entre 1 et 4" << endl;
     
               main();
     
               return 0;
         }
     
     
     
     
     
     
    void end (int TUt, TComp)
         {
             cout << "Fin de la partie.\n Score Utilisateur : " << TUt << "\n Score Ordinateur : " << TComp << endl;
     
        system("PAUSE");
        return 0;
         }

  13. #13
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 629
    Points : 30 692
    Points
    30 692
    Par défaut
    Salut,

    Dans ta fonction main, tu peux très bien AUSSI remplacer tes instructions if par un seul switch...

    D'autant plus que, quand on y pense un tout petit peu, si chxUt vaut 1, il ne vaudra pas 2 ni 3

    Cela deviendra donc un truc du genre de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    //je passe ce qui précede ;)
    switch(chxUt)
    {
        case 1:
            pierre();
            break;
        case 2:
            papier();
            break;
        case 3:
            ciseaux();
            break;
        case 4:
            //on ne fait rien
            break;
        default:
    //un cas que tu as oublié de gérer: l'utilisateur est un imbécile ou il est distrait:
    //il a introduit une valeur incorrecte
            cout<<"veuillez choisir entre 1, 2 et 3 uniquement"<<endl;
    }
    Et, tant qu'à faire, plutot que d'obliger l'utilisateur à relancer à chaque fois l'application, on pourrait très bien tout mettre dans une boucle lui proposant de rejouer

    Ca deviendrait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    #include <iostream>//gestion des flux d'entree/sorties standards 
    #include <stdexcept>//on va utiliser les exception STL par facilité ;)
    //normalement, aucun parametre n'est necessaire lors de l'appel, mais bon, c'est plus "portable" ;)
    int main(int argc, char *argv)
    {
        int choix //un entier pour notre switch ;)
        srand(time(NULL));//initialisation du generateur aleatoire
        // la boucle doit etre effectuée au minimum une fois
        // la boucle do...while est géniale pour cela.
        do
        {
            cout << "Voici le jeux du pierre-feuille-ciseaux.\n 1 = pierre\n 2=feuille\n 3=ciseaux\n 4 pour quitter" 
                    << endl;
            // si la récupération du choix de l'utilisateur échoue, c'est qu'il est distrait
            // raison de l'utilisation de try... catch(...) 
            try
            {
                //sécurisons un peu le choix de l'utilisateur
                if(!(cin>>choix))
                    throw std::invalid_argument("mauvaise entree");
                //grace au code ci-dessus, on passera dans le catch() si l'utilisateur introduit
                //autre chose qu'une variable numérique
                switch (choix)
                {
                    case 4:
                    //l'utilisateur a choisi de sortir, on ne fait rien
                        break;
                    case 1:
                    //l'utilisateur a choisi pierre
                        pierre();
                        break;
                    case 2:
                    //l'utilisateur a choisi papier
                        papier();
                        break;
                    case 3:
                    //l'utilisateur a choisi ciseaux
                        ciseaux();
                        break;
                    default:
                    //l'utilisateur a bien introduit une valeur numérique, mais non prise en compte
                    //on n'est pas content, et on le lui dit
                        cout<<"veuillez limiter votre choix à 1, 2, 3 ou 4"<<endl;
                }
            }
            catch(...)
            {
                //toutes les exceptions seront récupérées ici
                //la conversion a échoué: on demande à l'utilisateur de choisir 1, 2, 3 ou 4
                cout<<"Veuillez limiter votre choix à 1, 2, 3, ou 4"<<std::endl;
            }
        }while(tempo!="4");
        //si on sort de la boucle, on quitte l'application, on renvoi 0 qui  est le signe que tout s'est bien passé
        return 0;
    }
    //je passe les fonctions pierre, papier et ciseaux
    Je ne prétend nullement que ce code est le meilleur qui soit, simplement parce que je ne l'ai pas testé ni rien (et que je n'ai pas cherché non plus d'autres manières pour l'optimiser), mais, au moins, il sécurise un peu les choses...

    L'un des principes à garder en tete est en effet que l'utilisateur est d'office un "imbécile distrait", et qu'il ne faut pas compter sur lui pour introduire à chaque fois les valeurs qu'on s'attend à ce qu'il introduise

Discussions similaires

  1. pierre papier ciseaux shell
    Par Phoenix2025 dans le forum Linux
    Réponses: 9
    Dernier message: 31/03/2009, 14h02
  2. [Conception] Concevoir le jeu Pierre Feuille Ciseau
    Par websurfeur dans le forum Général Java
    Réponses: 14
    Dernier message: 17/03/2006, 19h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo