Accueil > Forum > > > > pierre feuille ciseaux
pierre feuille ciseaux
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ée 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
|
Derniers Blogs
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
RE : WIN APIRE : WIN API par racpp
Cliquez pour lire la suite par racpp WIN APIWIN API par omarino_007
Cliquez pour lire la suite par omarino_007
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|