Pierre feuille ciseaux

Résolu
wilvart
Messages postés
47
Date d'inscription
samedi 7 janvier 2006
Statut
Membre
Dernière intervention
13 décembre 2012
- 18 août 2006 à 18:47
cs_algori
Messages postés
868
Date d'inscription
dimanche 26 décembre 2004
Statut
Membre
Dernière intervention
26 février 2008
- 19 août 2006 à 16:55
Bonjour; je programme en C++ depuis peu de temps et j'ai voulu créer un mini-jeu, à savoir le jeu du pierre-feuille-ciseaux. J'ai une version qui marche correctement mais qui n'est pas très "belle". J'ai essayer une autre façon de faire mais j'ai des problèmes.
Merci de m'aider.

VERSION OPERATIONNELLE :

#include <cstdio>
#include <cstdlib>
#include
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;
}

VERSION A PROBLEMES :

#include <cstdio>
#include <cstdlib>
#include
using namespace std;

// Où je dois mettre ça " srand(time(NULL)) " pour avoir un vrai nombre aléatoire ?
int TUt 0, TComp 0, randComp = rand() % 4; // C'est variables sont elles globales ?

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;
}
A voir également:

9 réponses

luhtor
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
18 août 2006 à 21:44
"flush" pour pas passer a la ligne et pour une histoire de buffer (faut pas m'en demandé plus sur flush et endl).


Je retourne 1 car le programme s'arrete sur une erreur. Dans le cas de
succès, on retourne 0. Mais ici c'est juste par logique, ca ne sert pas
a grand chose pour XP.


Si tu connais pas les enums => Google : C++ enum


"char *conversion[] = {"Pierre", "Feuille", "Ciseau"};" <= ca n'est
valide que parce que je donne une valeur par défaut. Sinon il faut
d'abord allouer de la mémoire.


"bool operator < (const Choix c1, const Choix c2)" <= et ca c'est
juste pour définir l'opérateur d'infériorité entre deux élements de
l'enumération (Choix).

ca reviendrait au meme de faire une fonction : bool PlusPetitQue(c1, c2);
3
luhtor
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
18 août 2006 à 19:00
"Où je dois mettre ça " srand(time(NULL)) " pour avoir un vrai nombre aléatoire ?"
=> Au début de main()

"C'est variables sont elles globales ?"
=> Oui, mais tu fais appel au générateur aléatoire alors qu'il est pas initialisé par srand()

"Je ne retourne rien avec main(), écrire " void main(int nNumberofArgs) " ne serait pas plus correct?"
=> Si tu retournes 0. C'est l'os qui veut ca.
Pour toutes les autres fonctions, tu peux mettre void.

Mais je me permets de dire, que ca reste le boxon ton programme :)
0
wilvart
Messages postés
47
Date d'inscription
samedi 7 janvier 2006
Statut
Membre
Dernière intervention
13 décembre 2012

18 août 2006 à 19:06
Merci pour ton aide, je sais que c'est pas encore très bon comme programme, et justement je me suis inscrit sur ce forum pour apprendre, si tu as des conseils à me donner, des fautes à corriger, ou carrement une version de ce programme qui marche et qui est compréhensible je veux bien de ton aide.
0
luhtor
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
18 août 2006 à 19:29
Celle la me parait mieux, pas on pourrait bcp en dire encore.


#include


using namespace std;


enum Choix { PIERRE = 0, FEUILLE, CISEAU };

char *conversion[] = {"Pierre", "Feuille", "Ciseau"};


// Creation de l'opéateur d'infériorité

bool operator < (const Choix c1, const Choix c2)

{

    if ((c1 PIERRE) && (c2 FEUILLE))

        return true;

    if ((c1 FEUILLE) && (c2 CISEAU))

        return true;

    if ((c1 CISEAU) && (c2 PIERRE))

        return true;

    // Dans tous les autres cas

    return false;

}


/* Fonction MAIN */

int main()

{

    srand(time(NULL));

   

    int utilisateur 0, aleatoire 0;


    cout << "Entrez votre choix : " << flush;

    cin >> utilisateur;

    if ((utilisateur > 2) && (utilisateur < 0))

    {

        cout << "Valeur incorrecte" << endl;

        return 1;

    }

   

    aleatoire = rand() % 4;

   

    Choix choix_utilisateur = (Choix)utilisateur;

    Choix choix_aleatoire = (Choix)aleatoire;

   

    cout << endl;

    cout << conversion[choix_utilisateur] <<
" - " << conversion[choix_aleatoire] << endl;


    // On cherche le vainqueur

    if (choix_utilisateur < choix_aleatoire)

        cout << "VOUS AVEZ PERDU !" << endl;

    else if (choix_utilisateur == choix_aleatoire)

        cout << "EGALITE ! " << endl;

    else cout << "VOUS AVEZ GAGNE ! " << endl;

   

    system("PAUSE");

   

    return 0;

}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
luhtor
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
18 août 2006 à 19:32
Oula j'avais pas vu. Tu inclues tes fonctions dans main(). Ca n'a pas de sens (enfin si un peu), mais ca sert a rien ca.

Faut créer les fonctions au dessus du main() sinon elles ne sont pas visible:


void ta_fonction()

{

...

}


int main()

{

...

}


OU ALORS


void ta_fonction();   // <= POINT VIRGULE


int main()

{

...}


void ta_fonction()

{

...

}
0
luhtor
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
18 août 2006 à 19:33
Bon tu corrigeras: if ((utilisateur > 2) || (utilisateur < 0)) à
la place de ca: if ((utilisateur > 2) && (utilisateur <
0))
0
wilvart
Messages postés
47
Date d'inscription
samedi 7 janvier 2006
Statut
Membre
Dernière intervention
13 décembre 2012

18 août 2006 à 19:54
Merci pour printf ;)
Je ne comprend pas tout ton code pourrait tu m'expliquer certaine partie?
(désolé si j'ai mit plus de la moitié du code :D)



enum Choix { PIERRE = 0, FEUILLE, CISEAU };
char *conversion[] = {"Pierre", "Feuille", "Ciseau"};

// Creation de l'opéateur d'infériorité
bool operator < (const Choix c1, const Choix c2)
{
if ((c1 PIERRE) && (c2 FEUILLE))
return true;
if ((c1 FEUILLE) && (c2 CISEAU))
return true;
if ((c1 CISEAU) && (c2 PIERRE))
return true;
// Dans tous les autres cas
return false;
}



cout << "Entrez votre choix : " << flush; ici "flush"????
cin >> utilisateur;
if ((utilisateur > 2) || (utilisateur < 0))
{
cout << "Valeur incorrecte" << endl;
return 1; pourquoi retourné 1 et pourquoi au milieu du programme?




Choix choix_utilisateur = (Choix)utilisateur;
Choix choix_aleatoire = (Choix)aleatoire;

cout << endl;
cout << conversion[choix_utilisateur] << " - " << conversion[choix_aleatoire] << endl;
0
wilvart
Messages postés
47
Date d'inscription
samedi 7 janvier 2006
Statut
Membre
Dernière intervention
13 décembre 2012

18 août 2006 à 22:11
Ok merci de ton aide et bon developpement à toi!!
0
cs_algori
Messages postés
868
Date d'inscription
dimanche 26 décembre 2004
Statut
Membre
Dernière intervention
26 février 2008
1
19 août 2006 à 16:55
Salut,
Si tu veux encore plus esthétique que la vieille console :
http://www.cppfrance.com/codes/JINADE-PETIT-JEU-RESEAU_24128.aspx
@++
0