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;
}

9 réponses

luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
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