|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
Sujet : pierre feuille ciseaux [ Divers / Débutant(e) ] (wilvart)
Informations & options pour cette discussion
vendredi 18 août 2006 à 18:47:06 |
pierre feuille ciseaux

wilvart
|
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 <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; } VERSION A PROBLEMES :
#include <cstdio> #include <cstdlib> #include <iostream> 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; }
|
|
|
vendredi 18 août 2006 à 19:00:37 |
Re : pierre feuille ciseaux

luhtor
|
"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 :)
|
|
|
vendredi 18 août 2006 à 19:06:06 |
Re : pierre feuille ciseaux

wilvart
|
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.
|
|
|
vendredi 18 août 2006 à 19:29:10 |
Re : pierre feuille ciseaux

luhtor
|
Celle la me parait mieux, pas on pourrait bcp en dire encore.
#include <iostream>
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;
}
|
|
|
vendredi 18 août 2006 à 19:32:29 |
Re : pierre feuille ciseaux

luhtor
|
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()
{
...
}
|
|
|
vendredi 18 août 2006 à 19:33:26 |
Re : pierre feuille ciseaux

luhtor
|
Bon tu corrigeras: if ((utilisateur > 2) || (utilisateur < 0)) à
la place de ca: if ((utilisateur > 2) && (utilisateur <
0))
|
|
|
vendredi 18 août 2006 à 19:54:04 |
Re : pierre feuille ciseaux

wilvart
|
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;
|
|
|
vendredi 18 août 2006 à 21:44:05 |
Re : pierre feuille ciseaux

luhtor
|
Réponse acceptée !
"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);
|
|
|
vendredi 18 août 2006 à 22:11:40 |
Re : pierre feuille ciseaux

wilvart
|
Ok merci de ton aide et bon developpement à toi!!
|
|
|
samedi 19 août 2006 à 16:55:52 |
Re : pierre feuille ciseaux
|
Cette discussion est classé dans : int, goto, cout, re, randcomp
Répondre à ce message
Sujets en rapport avec ce message
Pas compris les arguments [ par Bog ]
Bonjour.Voila à chaque fois que je me lance dans un projet de programmation C++, je suis tjrs bloqué par certaines choses, surtout les arguments, et c
Pas compris les arguments [ par Bog ]
Bonjour.Voila à chaque fois que je me lance dans un projet de programmation C++, je suis tjrs bloqué par certaines choses, surtout les arguments, et c
Dans le genre prenant........ [ par Xs ]
oui !c 'est trés chiant !j'explique mon pb : j'ai un code source, fais par moi-meme, et dedans, je veux que l'on saisisse des renseignement comme le l
implicit declaration of function `int getchar(...)' [ par cognac ]
À chaque fois que j'utilise getch(); j'obtien le message suivant:getch();Voici mon programme (en fait mon exercice):#include //bibliotheque d'entree
Reference pour arguments de fonction! [ par CoxJoe ]
Hello,Voila mon code qui est tres simple :# include # include using namespace std;// fonction pour entrer des lettresvoid getchar(char& name[]){ cout
une fiche de renseignement [ par cabarrus ]
je cherche à faire un programme qui demande des renseignements pour pouvoir ensuite les affiché comme une fiche d'identité!!!voici monprogramme mais m
Pobleme de debutant bas niveau [ par zzzzzz ]
#include ?iostream.h? /* pour cout cin */int a;int factorielle(int n) { if(n==0) { return 1; } else { return n*factorielle(n-1); }}void main()
tableau de structures type pointeur [ par chocho ]
Merci d'avoir répondu à ma demande d'aide.Voici la source sur laquelle je coince:#include#include#define maxlist 10int indicecourant;struct abonne
simplifier une fraction ( débutant ) !!! [ par myogtha ]
#include int main (){int denominateur,mulfac1,mulfac2,facmul1,facmul2,facmulfinal;int a,b,c,d;coutcin>>a;coutcin>>
Les nombres aléatoires en C++ (Visual C++ 6.0) [ par Yabo ]
Tout d'abord voilà le code :CODE #include #include #include #include using namespace std;void animstartscreen() { int n
Livres en rapport
|
Comparez les prix Nouvelle version
|