wilvart
Messages postés47Date d'inscriptionsamedi 7 janvier 2006StatutMembreDernière intervention13 décembre 2012
-
18 août 2006 à 18:47
cs_algori
Messages postés868Date d'inscriptiondimanche 26 décembre 2004StatutMembreDernière intervention26 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 == 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;
luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 20086 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);
luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 20086 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 :)
wilvart
Messages postés47Date d'inscriptionsamedi 7 janvier 2006StatutMembreDernière intervention13 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.