begin process at 2010 02 10 07:02:14
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Débutant(e)

 > 

pierre feuille ciseaux


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

pierre feuille ciseaux

vendredi 18 août 2006 à 18:47:06 | pierre feuille ciseaux

wilvart

Membre Club
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

Membre Club
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

Membre Club
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

Membre Club
Ok merci de ton aide et bon developpement à toi!!
samedi 19 août 2006 à 16:55:52 | Re : pierre feuille ciseaux

algori

Salut,
Si tu veux encore plus esthétique que la vieille console :
http://www.cppfrance.com/codes/JINADE-PETIT-JEU-RESEAU_24128.aspx
@++


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>&gt 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


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,264 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales