Pierre feuille ciseaux [Résolu]

wilvart
Messages postés
47
Date d'inscription
samedi 7 janvier 2006
Dernière intervention
13 décembre 2012
- 18 août 2006 à 18:47 - Dernière réponse : cs_algori
Messages postés
870
Date d'inscription
dimanche 26 décembre 2004
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;
}
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
luhtor
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Dernière intervention
28 juillet 2008
- 18 août 2006 à 21:44
3
Merci
"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);

Merci luhtor 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 95 internautes ce mois-ci

Commenter la réponse de luhtor
luhtor
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Dernière intervention
28 juillet 2008
- 18 août 2006 à 19:00
0
Merci
"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 :)
Commenter la réponse de luhtor
wilvart
Messages postés
47
Date d'inscription
samedi 7 janvier 2006
Dernière intervention
13 décembre 2012
- 18 août 2006 à 19:06
0
Merci
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.
Commenter la réponse de wilvart
luhtor
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Dernière intervention
28 juillet 2008
- 18 août 2006 à 19:29
0
Merci
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;

}
Commenter la réponse de luhtor
luhtor
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Dernière intervention
28 juillet 2008
- 18 août 2006 à 19:32
0
Merci
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()

{

...

}
Commenter la réponse de luhtor
luhtor
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Dernière intervention
28 juillet 2008
- 18 août 2006 à 19:33
0
Merci
Bon tu corrigeras: if ((utilisateur > 2) || (utilisateur < 0)) à
la place de ca: if ((utilisateur > 2) && (utilisateur <
0))
Commenter la réponse de luhtor
wilvart
Messages postés
47
Date d'inscription
samedi 7 janvier 2006
Dernière intervention
13 décembre 2012
- 18 août 2006 à 19:54
0
Merci
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;
Commenter la réponse de wilvart
wilvart
Messages postés
47
Date d'inscription
samedi 7 janvier 2006
Dernière intervention
13 décembre 2012
- 18 août 2006 à 22:11
0
Merci
Ok merci de ton aide et bon developpement à toi!!
Commenter la réponse de wilvart
cs_algori
Messages postés
870
Date d'inscription
dimanche 26 décembre 2004
Dernière intervention
26 février 2008
- 19 août 2006 à 16:55
0
Merci
Salut,
Si tu veux encore plus esthétique que la vieille console :
http://www.cppfrance.com/codes/JINADE-PETIT-JEU-RESEAU_24128.aspx
@++
Commenter la réponse de cs_algori

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.