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
L'INTERFACE NATURELLE DE WINDOWS PHONE 7 SERIESL'INTERFACE NATURELLE DE WINDOWS PHONE 7 SERIES par odewit
La tendance est aux interfaces naturelles (NUI), et le keynote de Bill Buxton au MIX l'a bien souligné.
La charte graphique et ergonomique de Windows Phone 7 a donc été entièrement repensée en vue d'obtenir un maximum d'efficacité sur ce point. En re...
Cliquez pour lire la suite de l'article par odewit COMMENT MAPPER UNE VUE SQL SUR UNE COLLECTION DE COMPLEX TYPE?COMMENT MAPPER UNE VUE SQL SUR UNE COLLECTION DE COMPLEX TYPE? par Matthieu MEZIL
Avec EF, les vues doivent être mappées sur des entity types. Le problème c'est que les entity types doivent avoir une clé. Avec EF, nous avons les complex type qui n'ont pas de clé mais les vues ne peuvent pas être mappées dessus. Avec EF4, il est possibl...
Cliquez pour lire la suite de l'article par Matthieu MEZIL [WF4] UN BINDING ACTIVITY/ACTIVITYDESIGNER QUI PASSE MAL?[WF4] UN BINDING ACTIVITY/ACTIVITYDESIGNER QUI PASSE MAL? par JeremyJeanson
Certain d'entre vous on peut être vécu cette situation embarrassante après quelques temps passer avec WF4 : Au début avec mon " ActivityDesigner" , tout allait bien. Et puis un jour j'ai au des problèmes de " Binding" . Alors nous sommes allé sur le site ...
Cliquez pour lire la suite de l'article par JeremyJeanson
Logiciels
Academy System (10.9.4.0)ACADEMY SYSTEM (10.9.4.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods
|