Partage
  • Partager sur Facebook
  • Partager sur Twitter

Jeu de craps

Léger problème de variable

    15 mars 2007 à 22:33:09

    Bonsoir à tous,
    En tp on a commencé un jeu de craps et je n'arrive pas à le finir.
    On a commencé les objets donc cela commence à devenir dur.
    Le programme marche quand le joueur perd ou gagne au premier tour mais quand cela relance les dés cela ne veut plus marcher.
    Craps.h
    #if !defined(__CRAPS_H)
    #define   __CRAPS_H
    #include"De.h"
    class CCraps
    {
            private:
                            unsigned char somme1tour;
                            unsigned char nbTour;
                            char etat;
                            CDe de1, de2;
            public:
                            CCraps();
                            void LancerDe();
                            unsigned char AnalyserJet() ;
                            unsigned char Jouer();
                            bool CCraps::FinPartie();
                            void AfficheDe();
                            ~CCraps();
    };
    #endif

    Craps.cpp
    #include<iostream.h>
    #include<stdio.h>
    #include<stdlib.h>
    #include"craps.h"
    #include"De.h"

    CCraps::CCraps():de1(6,0),de2(6,0)
    {
            somme1tour=0;
            nbTour=0;
            etat=0;
    }

    /*fonction: LancerDe
    /role: Lance 2 dés
    /parametre:
    /retour:
    */

    void CCraps::LancerDe()
    {
            de1.LanceToi();
            de2.LanceToi();
    }

    /*fonction: AnalyserJet
    /role: Donne un état en fonction de la somme des dés
    /parametre:
    /retour: etat
    */

    unsigned char CCraps::AnalyserJet()
    {
            unsigned char sommeTourSuivant; 

           
            if (etat==3)
            {
                    printf ("\t Ancienne somme des D: %d\n",somme1tour);
                    sommeTourSuivant = de1.DonneTaValeur() + de2.DonneTaValeur();
                    printf ("\t Somme des D relance (lancer suivant): %d\n\n\n",sommeTourSuivant);
                    switch (sommeTourSuivant)
                    {       
                            case 7:
                                            etat=2;
                                            printf("cas 7 donc perdu normalement!\n");
                                            break;
                            default:
                                            if ( sommeTourSuivant == somme1tour)
                                            {
                                                    etat=1;
                                                    printf("meme somme\n");
                                            }
                                            else
                                            {
                                                    etat=3;
                                                    printf("Va relancer car dans le cas autre\n");
                                            }
                                            break;
                    }
                    return etat;
            }
            if (etat == 0)
            {
                    switch (somme1tour)
                    {       
                            case 7:
                            case 11:
                                            etat=1;
                                            break;

                            case 2:
                            case 3:
                            case 12:
                                            etat=2;
                                            break;

                            default:
                                            etat=3;
                                            break
                    }       
            }

            return etat;
    }

    void CCraps::AfficheDe()
    {
            de1.Affiche();
            de2.Affiche();
    }

    unsigned char CCraps::Jouer()
    {
            if (etat==3)
            {
                    de1.LanceToi();
                    de2.LanceToi();
                   
                    return somme1tour;
            }
            else
            {
                    de1.DonneTaValeur();
                    de2.DonneTaValeur();
                    somme1tour = de1.DonneTaValeur() + de2.DonneTaValeur();
                    printf ("\t Somme des D: %d\n\n\n",somme1tour);
                    return somme1tour;
            }
    }

    CCraps::~CCraps()
    {
           
    }

    main_craps.cpp
    #include "De.h"
    #include"craps.h"
    #include<stdio.h>
    #include<stdlib.h>
    #include<time.h>
    #include<conio.h>
    #include<iostream.h>

    void main()
    {
            unsigned char etatVariable;
            bool finPartie;
            srand( (unsigned)time( NULL ) );
            CCraps test;
            test.LancerDe();
            test.AfficheDe();
            test.Jouer();
           
            etatVariable=test.AnalyserJet();

           
            printf ("Etat de la partie: %d\n",etatVariable);
           
           
                    if (etatVariable == 1)
                    {
                            printf("Vous avez gagne!!\n\n ");
                    }
                    if (etatVariable == 2)
                    {
                            printf("Vous avez perdu!!\n\n ");
                    }
                    if (etatVariable == 3)
                    {
                            do
                            {
                                    printf("Relance du jeu:\n");
                                    getch();
                                    test.Jouer();
                                    test.AnalyserJet();
                            }while (etatVariable==3);
                    }

    }

    Merci de votre aide
    • Partager sur Facebook
    • Partager sur Twitter
      15 mars 2007 à 23:14:02

      Que vois-je ! Hérésie ! :o

      Tu n'as que 2 possibilités pour le prototype de la fonction main() :


      int main(void);

      // et

      int main(int argc, char **argv);
      // ou équivalent :
      int main(int argc, char *argv[]);


      Tu dois aussi du coup renvoyer un résultat à la fin de main(). 0 si tout s'est bien passé, et… autre chose s'il y a eu un problème. Tu peux te contenter de toujours renvoyer 0 : le résultat renvoyé n'est pas d'une importance capitale.

      Change déjà ça… afin de rendre ton code plus… propre. Je connais mal le C++ donc je ne peux t'aider beaucoup plus que ça. À vrai dire le problème ne requiert probablement pas une connaissance du C++ importante, mais il se fait tard :D .
      • Partager sur Facebook
      • Partager sur Twitter
        15 mars 2007 à 23:17:20

        Je ne suis pas d'accord avec le prototype de la fonction main car mon main ne renvoi pas d'info donc j'ai le droit de mettre void main().
        J'ai déjà essayé de mettre int main(int argc, char *argv[]); dans un TP, mon prof a failli avoir une crise cardiaque ^^:d
        • Partager sur Facebook
        • Partager sur Twitter
          15 mars 2007 à 23:24:03

          Les profs sont si fragiles que ça de nos jours ? :D

          Pour rester dans du code propre, tu dois écrire la fonction main avec un type de renvoi INT et non pas VOID. Tu dois par la même occasion ajouter le RETURN à la fin de la fonction main. C'est quand même pas bien sorcier :


          int main(void)
          {

               // tout ton code

               return 0;
          }


          C'est si difficile que ça ?

          P.S.: si je ne me trompe pas, void main() n'est tout simplement pas conforme à la norme actuelle du C.
          • Partager sur Facebook
          • Partager sur Twitter
            15 mars 2007 à 23:48:00

            je vais faire cela mais cela ne résoudra pas mon problème
            (tout du moins je ne vois pas pourquoi cela marcherait)
            • Partager sur Facebook
            • Partager sur Twitter
              16 mars 2007 à 16:19:43

              Désolé j'apporte pas d'aide à ton problème,
              juste une grosse intérogation:

              Citation :

              #include<iostream.h>
              #include<stdio.h>


              C'est.. légale, ça ?
              • Partager sur Facebook
              • Partager sur Twitter
                16 mars 2007 à 16:56:03

                légale ??
                Cela sert à afficher les cout mais je les ai enlevé car je n'aime pas trop ^^
                • Partager sur Facebook
                • Partager sur Twitter
                  16 mars 2007 à 17:23:41

                  Ce que je voulais dire c'est que chacun de ces header servent à définir la façon dont sont conçu les flux, mais stdio c'est du C, iostream c'est du c++.. :o

                  Citation :


                  Cela sert à afficher les cout


                  on "affiche pas les cout", on s'en sert pour afficher, c'est quand même pas pareil :D
                  • Partager sur Facebook
                  • Partager sur Twitter
                    16 mars 2007 à 19:57:36

                    ainsi que c'est iostream et non iostream.h et en Cpp on utilise cstdio et non stdio.h
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Jeu de craps

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown