Accueil > > > BUVETTE POURSUITE VIRTUELLE
BUVETTE POURSUITE VIRTUELLE
Information sur la source
Description
Réplique du jeu de société buvette poursuite fait en vc++ 6 avec glut Bien marrant pour commencer une soirée
Source
- /*----------------------------------------------------------
-
- --------------CGame-------------CPlateau------------CLaRoue-----------CQuartierRoue
- | | | ^
- | | | |
- | | | -----------------------------------
- | | | | | |
- CMenu CPlayer CCase CQuartierTGenerale CQuartierTLMonde .....
- ^ ^
- | |
- -------------- ---------------------------
- | | | | |
- CMenuGlut CMenuConsole CCaseNoGage CCaseLaRoue ....
-
-
- //-----------------------------------------------------------
- v1.0.0 : 1/12/08
- - Base du jeu
-
- v1.1.0 : 2/12/08
- - Gestion de plusieurs joueurs sur la meme case
- (il ne se superpose plus) 5 joueurs max par case
-
- v1.1.1 : 10/12/08
- - Ajout des commentaires
- - Amelioration du systeme de blocage du clavier
- - Creation des classes menu et deplacement
- du code dans ces classes
- - Quelques autres corrections minimes
-
- -------------------------------------------------------------
-
-
- /*-------------------------------------------
- Classe principale du jeu
- elle contient les callback de glut et s'occupe
- de gerer l'initialisation du jeu
- --------------------------------------------*/
- class CGame
- {
- public:
- CGame();
- virtual ~CGame();
-
- //initialise le jeu (glut notament), demande
- //demande le nbr et le nom(facultatif) des joueurs
- void InitGame(int argc, char **argv);
-
- //appeler a chaque fois que la callback display
- //de glut est appelé, s'occupe d'afficher les informations
- //(joueur en cour, score du des) et
- //Apelle les fct draw des objets plateau, roue, joueur et case
- void Draw();
-
- //appeler lorsque le joueur appui sur j ou J
- //lance la partie : cherche le joueur en cour puis
- //appele sa methode joue
- void Joue();
-
- //met a jour la variable du score
- void SetScore(int iScore);
-
- //Bloque les touches lorsque une animation et en cour
- //(sauf la touche q pour quitter)
- void Block(bool bBlock);
-
- //retourne vrai si les touches sot bloquer
- bool IsBlocked() {return m_bBlock;}
-
- //met a jour la variable du resultat de la roue
- void SetRoueResult(std::string strRoueRsl);
-
- //Apeller lorsqu'un joueur a gagner
- void SetWinPlayer(CPlayer * pPlayer);
-
- //gestion du menu
- CMenu * GetGameMenu(){return m_pMenu;}
- void SetShowMenu(bool bShow){m_bShowMenu = bShow;}
- bool GetShowMenu() {return m_bShowMenu;}
-
- private:
-
- void DrawScore();//Affiche le dernier score du des
- void DrawPlayerInGame();//affiche le nom du joueur en cour
- void DrawPlayerLegend();//affiche le nom des joueur en face de leurs couleurs
- void DrawRoueGage();//Affiche le dernier gage de la roue
-
- private :
-
- int m_iActPlayer;//Num du joueur actuel (pos ds la liste PlayerList)
- std::vector<CPlayer*> m_PlayerList;//liste des joueurs
-
- CPlayer * m_pActPlayer;//ptr vers le joueur en cour
- CPlateau m_Plateau;//plateu du jeu
-
- bool m_bShowMenu;//a vrai si on doit afficher le menu
-
- bool m_bBlock;//a vrai si les touches sont bloquer
- int m_bScore;//score du dernier lancer de des
- CMenu * m_pMenu;//Menu du jeu
-
- std::string m_strRoueRsl;//Rsl de la roue en texte
- };
-
-
- /*------------------------------------------------
- Represente une case sur le jeu (il y en a 25)
- Chaque case contient la liste des joueurs
- actuelement posés sur elle
- ------------------------------------------------*/
- class CPlayer;
- class CCase
- {
- public:
- CCase();
- virtual ~CCase();
-
- //Dessine la case
- virtual void Draw(float x, float y);
-
- //dessine le titre pour la case
- virtual void DrawTitle() = 0;
-
- //retourne le type de case
- virtual int GetCaseType();
-
- void GetCoord(float * x, float * y, CPlayer * pPlayer);
-
- //Appeler lorsque un joueur arrive sur la case
- void AddPlayer(CPlayer * pPlayer);
-
- //Appeller lorsq'un joueur quitte la case
- void DelPlayer(CPlayer * pPlayer);
-
- private:
-
- int m_NbPlayerOnCase;//nbr de joueur sur la case
-
- protected :
-
- //Coord de la case (par rapport au point de base)
- float m_fXCoord;
- float m_fYCoord;
-
- char m_csTitle[20];//titre pour la case
-
- //liste des joueurs actuellemnt sur la case
- std::vector<CPlayer*> m_PlayerList;
- };
-
-
-
- /*************************************************/
- class CCaseNoGage : public CCase
- {
- public:
- CCaseNoGage() : CCase(){}
-
- virtual void Draw(float x, float y)
- {
- glColor3f(1,1,0);//jaune
- CCase::Draw(x,y);//appele le draw de la classe de base
- }
-
- virtual void DrawTitle()
- {
- return ; //on ecrit rien
- }
-
- virtual int GetCaseType(){return TYPE_NO_GAGE;}
- };
-
- /*************************************************/
- class CCaseLaRoue : public CCase
- {
- public:
- CCaseLaRoue() : CCase(){}
-
- virtual void Draw(float x, float y)
- {
- glColor3f(1,0.5,0);//orange
- CCase::Draw(x,y);
- }
-
- virtual void DrawTitle()
- {
- glColor3f(1,1,1);
- strcpy(m_csTitle,"La roue");
- CToolBox::render_string(m_fXCoord,m_fYCoord,GLUT_BITMAP_TIMES_ROMAN_24,m_csTitle);
- }
-
- virtual int GetCaseType(){return TYPE_LA_ROUE;}
- };
-
- /*************************************************/
- class CCaseRecule : public CCase
- {
- public:
- CCaseRecule() : CCase(){}
-
- virtual void Draw(float x, float y)
- {
- glColor3f(0,0,1);//bleu
- CCase::Draw(x,y);
- }
-
- virtual void DrawTitle()
- {
- glColor3f(1,1,1);
- strcpy(m_csTitle,"Recule de 6 cases");
-
- CToolBox::render_string(m_fXCoord,m_fYCoord,GLUT_BITMAP_TIMES_ROMAN_24,"Recule de");
- glLoadIdentity();
- CToolBox::render_string(m_fXCoord-0.9,m_fYCoord-0.48,GLUT_BITMAP_TIMES_ROMAN_24," 6 cases ");
- }
-
- virtual int GetCaseType(){return TYPE_RECULE_6_CASE;}
- };
-
- /*************************************************/
- class CCaseAvance : public CCase
- {
- public:
- CCaseAvance() : CCase(){}
-
- virtual void Draw(float x, float y)
- {
- glColor3f(0,1,0);//Vert
- CCase::Draw(x,y);
- }
-
- virtual void DrawTitle()
- {
- glColor3f(1,1,1);
- strcpy(m_csTitle,"Avance de 3 cases");
- CToolBox::render_string(m_fXCoord,m_fYCoord,GLUT_BITMAP_TIMES_ROMAN_24,"Avance de");
- glLoadIdentity();
- CToolBox::render_string(m_fXCoord-0.9,m_fYCoord-0.48,GLUT_BITMAP_TIMES_ROMAN_24," 3 cases ");
- }
-
- virtual int GetCaseType(){return TYPE_AVANCE_3_CASE;}
- };
-
- /*************************************************/
- class CCasePasseTour : public CCase
- {
- public:
- CCasePasseTour() : CCase(){}
-
- virtual void Draw(float x, float y)
- {
- glColor3f(1,0,0);//Rouge
- CCase::Draw(x,y);
- }
-
- virtual void DrawTitle()
- {
- glColor3f(1,1,1);
- strcpy(m_csTitle,"Passe ton tour");
- CToolBox::render_string(m_fXCoord,m_fYCoord,GLUT_BITMAP_TIMES_ROMAN_24,"Passe ton");
- glLoadIdentity();
- CToolBox::render_string(m_fXCoord-0.9,m_fYCoord-0.48,GLUT_BITMAP_TIMES_ROMAN_24," tour ");
- }
-
- virtual int GetCaseType(){return TYPE_PASSE_TOUR;}
- };
-
- /*************************************************/
- class CCaseRetDepart : public CCase
- {
- public:
- CCaseRetDepart() : CCase(){}
-
- virtual void Draw(float x, float y)
- {
- glColor3f(1,0,1);
- CCase::Draw(x,y);
- }
-
- virtual void DrawTitle()
- {
- glColor3f(1,1,1);
- strcpy(m_csTitle,"Retour case depart");
- CToolBox::render_string(m_fXCoord-0.02,m_fYCoord,GLUT_BITMAP_TIMES_ROMAN_24,"Retour case");
- glLoadIdentity();
- CToolBox::render_string(m_fXCoord-0.9,m_fYCoord-0.48,GLUT_BITMAP_TIMES_ROMAN_24," depart ");
- }
-
- virtual int GetCaseType(){return TYPE_RETOUR_DEPART;}
- };
-
- /*---------------------------------------------------
- Classe la roue, affiche la roue et gere l'annimation
- Contient les quartiers de la roue (8 en tout)
- et le thread qui gere l'animation
- ---------------------------------------------------*/
- class CPlayer;
- class CPlateau;
- class CRoueThread;
- class CLaRoue
- {
- //permet a la classe CRoueThread
- //d'acceder au membres priver de la roue
- friend class CRoueThread;
-
- public:
- CLaRoue();
- virtual ~CLaRoue();
-
- //permet d'initialiser le ptr vers le plateau
- void SetPlateau(CPlateau * pPlateau);
-
- //lance la roue (l'animation)
- void LanceRoue(CPlayer * pPlayer);
-
- //Dessine la roue
- void Draw();
-
- private :
-
- std::vector<CQuartierRoue*> m_ListQuartier;//Liste des quatier
- int m_iRsl; // resultat de la roue
- CPlateau * m_pPlateau;//ptr vers la plateau
- CPlayer * m_pGamePlayer;//ptr vers le jeu
-
- CRoueThread * m_pThread;//ptr ver le thread pour l'animation
-
- };
-
-
- //-------------------------------------------------------
- class CRoueThread
- {
- public:
- CRoueThread(CLaRoue * pLaRoue)
- {
- m_dwID = 0;
- m_hThread = 0;
- m_pLaRoue = pLaRoue;
- }
-
- ~CRoueThread()
- {
- CloseHandle(m_hThread);
- }
-
- bool InitThread()
- {
- m_hThread = CreateThread(0,
- 0,
- ThreadFunc,
- this,
- 0,
- &m_dwID);
- if(!m_hThread)
- {
- // Impossible de créer le thread !
- return false;
- }
- return true;
- }
-
- public:
-
- HANDLE m_hThread;
-
- private:
-
- DWORD m_dwID;
- CLaRoue * m_pLaRoue;
-
- static DWORD WINAPI ThreadFunc(LPVOID pvParam);
- };
-
- /*-----------------------------------------------
- Classe plateau, (gere les elements du plateau
- cases et roue
- Contient la liste des cases et la roue
- Initialise et dessine les cases
- -----------------------------------------------*/
- class CPlayer;
- class CGame;
- class CPlateau
- {
- public:
- CPlateau();
- virtual ~CPlateau();
-
- void SetGame(CGame * pGame);
- CGame * GetGame();
-
- //Dessine les cases
- void Draw();
-
- //retourne un ptr vers la case a la position iPos
- CCase * GetCaseInPos(int iPos);
-
- void SetScore(int iScore);
-
- //bloque les touches
- void Block(bool bBlock);
-
- //appeler si un joueur tombe sur une case "la roue"
- int LanceRoue(CPlayer * pPlayer);
-
- private:
-
- std::vector<CCase*> m_ListeCase;//liste des cases
-
- CGame * m_pGame; // ptr vers le jeu
- CLaRoue m_LaRoue;
-
- };
-
- /*----------------------------------------------------------
- Classe player gere un joueur (representer par un rond)
- analyse les resultats des cases ou de la roue
- Gere le des (moyen devrait etre gerer par le plateau)
- ----------------------------------------------------------*/
- class CPlayerThread;//forward declaration
- class CPlayer
- {
- public:
-
- //Param : ptr vers le plateau, couleur rgb, nom du joueur
- CPlayer(CPlateau * pPlateau, float fR,float fG, float fB,std::string strPlayer);
- virtual ~CPlayer();
-
- //Dessine le joueur (le rond) a la postion qu'il faut
- //definit par m_fPlayerPosY et m_fPlayerPosX
- //cette fct et appeler a chaque redisplay de glut
- void Draw();
-
- //joue le tour (lance le des et met a jour la pos du joueur)
- void Joue();
-
- //dessine la legende (en bas a droite)
- void DrawLegend(float x,float y);
-
- //analyse le resultat apres avoir joué
- void AnalyseRsl();
-
- //appeler lorsque la roue a été lancer (aux cas ou
- //il faille réactualiser la pos du joueur)
- void SetRoueResult(int iRsl);
-
- //dessine l'animation lorsque le joueur arrive sur un case
- //(le rond qui rapettise)
- void DrawAnim();
-
- //retourne vrai si le joueur doit passer sont tour
- bool GetIsPasseTour();
-
- //remet a jour le joueur pour une nouvelle partie
- void Restart();
-
- //retourne un ptr vers le plateau
- CPlateau * GetPlateau () {return m_pPlateau;}
-
- //initialise le ptr vers le plateau
- void SetPlateau(CPlateau * pPlateau){m_pPlateau = pPlateau;}
-
- //retourne le nom du joueur
- std::string GetPlayerName(){ return m_strPlayer;}
-
- private:
-
- int LanceLeDes();
-
- //Met a jour la position du joueur
- void SetPlayerPos(int iNbDes);
-
- private:
-
- bool m_bPasseTour;//a vrai si le joueur passe son tour
-
- std::string m_strPlayer;//nom du joueur
-
- //position par rapport aux coord reference
- float m_fPlayerPosY;
- float m_fPlayerPosX;
-
- int m_iPosPlayer;//pos du joueur (en nbr de case)
- CCase * m_pCase;//ptr vers la case actuelle du joueur
-
- CPlateau * m_pPlateau;// ptr vers le plateau
-
- //Couleur du joueur RGB
- float m_fR;
- float m_fG;
- float m_fB;
-
- float m_fSphereOffset;
-
- //thread associer au joueur (pour l'animation)
- CPlayerThread * m_pThread;
- };
-
-
- //-------------------------------------------------------
- class CPlayerThread
- {
- public:
- CPlayerThread(CPlayer * pPlayer)
- {
- m_dwID = 0;
- m_hThread = 0;
- m_pPlayer = pPlayer;
- }
-
- ~CPlayerThread()
- {
- CloseHandle(m_hThread);
- }
-
- bool InitThread()
- {
- m_hThread = CreateThread(0,
- 0,
- ThreadFunc,
- this,
- 0,
- &m_dwID);
- if(!m_hThread)
- {
- // Impossible de créer le thread !
- return false;
- }
- return true;
- }
-
- public:
-
- HANDLE m_hThread;
-
- private:
-
- DWORD m_dwID;
- CPlayer * m_pPlayer;
-
- static DWORD WINAPI ThreadFunc(LPVOID pvParam);
- };
-
- /*---------------------------------------------
- Represente un quartier de la roue
- chaque type de quartier et representer par
- une classe (herité de celle la) et un type
- -----------------------------------------------*/
- class CQuartierRoue
- {
- public:
- CQuartierRoue(float x, float y,float xOffset, float yOffset);
- virtual ~CQuartierRoue();
-
- virtual void Draw() = 0;
- virtual int GetType() = 0;
-
- void DrawLed();
- void SetDrawLed(bool bDraw);
-
- //Dessine l'animation de fin
- void DrawIsEnd();
-
- std::string GetGageStr();
-
- private:
-
- bool GetDrawLed();
-
- protected:
-
- //Offset sur le diametere de la led
- float m_fSphereOffset;
-
- //Coord du quartier (pour ecrire le titre du quartier)
- float m_fXCoord;
- float m_fYCoord;
-
- //Offset pour la position de la led
- float m_fXLedOffset;
- float m_fYLedOffset;
-
- //a vrai si on dessine la led sur le quartier
- bool m_bDrawLed;
-
- //Titre du gage
- std::string m_strNomGage;
-
- };
-
-
- //----------------------------------------------------
- class CQuartierCulSec : public CQuartierRoue
- {
- public:
- CQuartierCulSec(float x, float y,float xOffset, float yOffset) : CQuartierRoue(x,y,xOffset,yOffset)
- {
- m_strNomGage = "Boit ton verre cul sec";
- }
-
- virtual int GetType() {return QUATIER_CULSEC;}
-
- virtual void Draw()
- {
- glTranslatef(m_fXCoord,m_fYCoord,0);
- glColor3f(1, 0, 0);
- CToolBox::render_string(0,0,GLUT_BITMAP_HELVETICA_18,"Boit ton ");
- CToolBox::render_string(0,-0.07,GLUT_BITMAP_HELVETICA_18,"verre cul sec");
- }
- };
-
- //----------------------------------------------------
- class CQuartier3Fois : public CQuartierRoue
- {
- public:
- CQuartier3Fois(float x, float y,float xOffset, float yOffset) : CQuartierRoue(x,y,xOffset,yOffset)
- {
- m_strNomGage = "Boit ton verre en 3 fois";
- }
-
- virtual int GetType() {return QUATIER_3FOIS;}
-
- virtual void Draw()
- {
- glTranslatef(m_fXCoord,m_fYCoord,0);
- glColor3f(1, 0, 0);
- CToolBox::render_string(0,0,GLUT_BITMAP_HELVETICA_18,"Boit ton verre");
- CToolBox::render_string(0,-0.07,GLUT_BITMAP_HELVETICA_18," en 3 fois ");
- }
- };
-
- //----------------------------------------------------
- class CQuartierTGenerale : public CQuartierRoue
- {
- public:
- CQuartierTGenerale(float x, float y,float xOffset, float yOffset) : CQuartierRoue(x,y,xOffset,yOffset)
- {
- m_strNomGage = "Tournée Generale";
- }
-
- virtual int GetType() {return QUATIER_TGENERALE;}
-
- virtual void Draw()
- {
- glTranslatef(m_fXCoord,m_fYCoord,0);
- glColor3f(1, 0, 0);
- CToolBox::render_string(0,0,GLUT_BITMAP_HELVETICA_18,"Tournée Generale");
- }
- };
-
- //----------------------------------------------------
- class CQuartierTLMonde : public CQuartierRoue
- {
- public:
- CQuartierTLMonde(float x, float y,float xOffset, float yOffset) : CQuartierRoue(x,y,xOffset,yOffset)
- {
- m_strNomGage = "Boit le verre de tous le monde";
- }
-
- virtual int GetType() {return QUATIER_TLMONDE;}
-
- virtual void Draw()
- {
- glTranslatef(m_fXCoord,m_fYCoord,0);
- glColor3f(1, 0, 0);
- CToolBox::render_string(0,-0.02,GLUT_BITMAP_HELVETICA_18,"Boit ");
- CToolBox::render_string(-0.08,-0.1,GLUT_BITMAP_HELVETICA_18,"le verre");
- CToolBox::render_string(-0.2,-0.2,GLUT_BITMAP_HELVETICA_18,"de tous le monde");
- }
-
-
- };
-
- //----------------------------------------------------
- class CQuartierRecule3Case : public CQuartierRoue
- {
- public:
- CQuartierRecule3Case(float x, float y,float xOffset, float yOffset) : CQuartierRoue(x,y,xOffset,yOffset)
- {
- m_strNomGage = "Recule de 3 cases";
- }
-
- virtual int GetType() {return QUATIER_RECULE;}
-
- virtual void Draw()
- {
- glTranslatef(m_fXCoord,m_fYCoord,0);
- glColor3f(1, 0, 0);
- CToolBox::render_string(0,-0.02,GLUT_BITMAP_HELVETICA_18,"Recule de");
- CToolBox::render_string(0,-0.1,GLUT_BITMAP_HELVETICA_18,"3 cases");
- }
- };
-
- //----------------------------------------------------
- class CQuartierRetDepart: public CQuartierRoue
- {
- public:
- CQuartierRetDepart(float x, float y,float xOffset, float yOffset) : CQuartierRoue(x,y,xOffset,yOffset)
- {
- m_strNomGage = "Retour au depart";
- }
-
- virtual int GetType() {return QUATIER_RETDEPART;}
-
- virtual void Draw()
- {
- glTranslatef(m_fXCoord,m_fYCoord,0);
- glColor3f(1, 0, 0);
- CToolBox::render_string(0,0,GLUT_BITMAP_HELVETICA_18,"Retour au ");
- CToolBox::render_string(0,-0.1,GLUT_BITMAP_HELVETICA_18,"depart");
- }
-
-
- };
-
- //----------------------------------------------------
- class CQuartierVoisGage : public CQuartierRoue
- {
- public:
- CQuartierVoisGage(float x, float y,float xOffset, float yOffset) : CQuartierRoue(x,y,xOffset,yOffset)
- {
- m_strNomGage = "Le voisin choisi ton gage";
- }
-
- virtual int GetType() {return QUATIER_VOISIN;}
-
- virtual void Draw()
- {
- glTranslatef(m_fXCoord,m_fYCoord,0);
- glColor3f(1, 0, 0);
- CToolBox::render_string(0,-0.04,GLUT_BITMAP_HELVETICA_18,"Le voisin");
- CToolBox::render_string(0,-0.12,GLUT_BITMAP_HELVETICA_18,"choisi");
- CToolBox::render_string(0,-0.20,GLUT_BITMAP_HELVETICA_18,"ton gage");
- }
-
-
- };
-
- //----------------------------------------------------
- class CQuartierNoGage : public CQuartierRoue
- {
- public:
- CQuartierNoGage(float x, float y,float xOffset, float yOffset) : CQuartierRoue(x,y,xOffset,yOffset)
- {
- m_strNomGage = "Pas de gage";
- }
-
- virtual int GetType() {return QUATIER_VOISIN;}
-
- virtual void Draw()
- {
- glTranslatef(m_fXCoord,m_fYCoord,0);
- glColor3f(1, 0, 0);
- CToolBox::render_string(0,0,GLUT_BITMAP_HELVETICA_18,"Pas de gage");
- }
-
- };
-
/*----------------------------------------------------------
--------------CGame-------------CPlateau------------CLaRoue-----------CQuartierRoue
| | | ^
| | | |
| | | -----------------------------------
| | | | | |
CMenu CPlayer CCase CQuartierTGenerale CQuartierTLMonde .....
^ ^
| |
-------------- ---------------------------
| | | | |
CMenuGlut CMenuConsole CCaseNoGage CCaseLaRoue ....
//-----------------------------------------------------------
v1.0.0 : 1/12/08
- Base du jeu
v1.1.0 : 2/12/08
- Gestion de plusieurs joueurs sur la meme case
(il ne se superpose plus) 5 joueurs max par case
v1.1.1 : 10/12/08
- Ajout des commentaires
- Amelioration du systeme de blocage du clavier
- Creation des classes menu et deplacement
du code dans ces classes
- Quelques autres corrections minimes
-------------------------------------------------------------
/*-------------------------------------------
Classe principale du jeu
elle contient les callback de glut et s'occupe
de gerer l'initialisation du jeu
--------------------------------------------*/
class CGame
{
public:
CGame();
virtual ~CGame();
//initialise le jeu (glut notament), demande
//demande le nbr et le nom(facultatif) des joueurs
void InitGame(int argc, char **argv);
//appeler a chaque fois que la callback display
//de glut est appelé, s'occupe d'afficher les informations
//(joueur en cour, score du des) et
//Apelle les fct draw des objets plateau, roue, joueur et case
void Draw();
//appeler lorsque le joueur appui sur j ou J
//lance la partie : cherche le joueur en cour puis
//appele sa methode joue
void Joue();
//met a jour la variable du score
void SetScore(int iScore);
//Bloque les touches lorsque une animation et en cour
//(sauf la touche q pour quitter)
void Block(bool bBlock);
//retourne vrai si les touches sot bloquer
bool IsBlocked() {return m_bBlock;}
//met a jour la variable du resultat de la roue
void SetRoueResult(std::string strRoueRsl);
//Apeller lorsqu'un joueur a gagner
void SetWinPlayer(CPlayer * pPlayer);
//gestion du menu
CMenu * GetGameMenu(){return m_pMenu;}
void SetShowMenu(bool bShow){m_bShowMenu = bShow;}
bool GetShowMenu() {return m_bShowMenu;}
private:
void DrawScore();//Affiche le dernier score du des
void DrawPlayerInGame();//affiche le nom du joueur en cour
void DrawPlayerLegend();//affiche le nom des joueur en face de leurs couleurs
void DrawRoueGage();//Affiche le dernier gage de la roue
private :
int m_iActPlayer;//Num du joueur actuel (pos ds la liste PlayerList)
std::vector<CPlayer*> m_PlayerList;//liste des joueurs
CPlayer * m_pActPlayer;//ptr vers le joueur en cour
CPlateau m_Plateau;//plateu du jeu
bool m_bShowMenu;//a vrai si on doit afficher le menu
bool m_bBlock;//a vrai si les touches sont bloquer
int m_bScore;//score du dernier lancer de des
CMenu * m_pMenu;//Menu du jeu
std::string m_strRoueRsl;//Rsl de la roue en texte
};
/*------------------------------------------------
Represente une case sur le jeu (il y en a 25)
Chaque case contient la liste des joueurs
actuelement posés sur elle
------------------------------------------------*/
class CPlayer;
class CCase
{
public:
CCase();
virtual ~CCase();
//Dessine la case
virtual void Draw(float x, float y);
//dessine le titre pour la case
virtual void DrawTitle() = 0;
//retourne le type de case
virtual int GetCaseType();
void GetCoord(float * x, float * y, CPlayer * pPlayer);
//Appeler lorsque un joueur arrive sur la case
void AddPlayer(CPlayer * pPlayer);
//Appeller lorsq'un joueur quitte la case
void DelPlayer(CPlayer * pPlayer);
private:
int m_NbPlayerOnCase;//nbr de joueur sur la case
protected :
//Coord de la case (par rapport au point de base)
float m_fXCoord;
float m_fYCoord;
char m_csTitle[20];//titre pour la case
//liste des joueurs actuellemnt sur la case
std::vector<CPlayer*> m_PlayerList;
};
/*************************************************/
class CCaseNoGage : public CCase
{
public:
CCaseNoGage() : CCase(){}
virtual void Draw(float x, float y)
{
glColor3f(1,1,0);//jaune
CCase::Draw(x,y);//appele le draw de la classe de base
}
virtual void DrawTitle()
{
return ; //on ecrit rien
}
virtual int GetCaseType(){return TYPE_NO_GAGE;}
};
/*************************************************/
class CCaseLaRoue : public CCase
{
public:
CCaseLaRoue() : CCase(){}
virtual void Draw(float x, float y)
{
glColor3f(1,0.5,0);//orange
CCase::Draw(x,y);
}
virtual void DrawTitle()
{
glColor3f(1,1,1);
strcpy(m_csTitle,"La roue");
CToolBox::render_string(m_fXCoord,m_fYCoord,GLUT_BITMAP_TIMES_ROMAN_24,m_csTitle);
}
virtual int GetCaseType(){return TYPE_LA_ROUE;}
};
/*************************************************/
class CCaseRecule : public CCase
{
public:
CCaseRecule() : CCase(){}
virtual void Draw(float x, float y)
{
glColor3f(0,0,1);//bleu
CCase::Draw(x,y);
}
virtual void DrawTitle()
{
glColor3f(1,1,1);
strcpy(m_csTitle,"Recule de 6 cases");
CToolBox::render_string(m_fXCoord,m_fYCoord,GLUT_BITMAP_TIMES_ROMAN_24,"Recule de");
glLoadIdentity();
CToolBox::render_string(m_fXCoord-0.9,m_fYCoord-0.48,GLUT_BITMAP_TIMES_ROMAN_24," 6 cases ");
}
virtual int GetCaseType(){return TYPE_RECULE_6_CASE;}
};
/*************************************************/
class CCaseAvance : public CCase
{
public:
CCaseAvance() : CCase(){}
virtual void Draw(float x, float y)
{
glColor3f(0,1,0);//Vert
CCase::Draw(x,y);
}
virtual void DrawTitle()
{
glColor3f(1,1,1);
strcpy(m_csTitle,"Avance de 3 cases");
CToolBox::render_string(m_fXCoord,m_fYCoord,GLUT_BITMAP_TIMES_ROMAN_24,"Avance de");
glLoadIdentity();
CToolBox::render_string(m_fXCoord-0.9,m_fYCoord-0.48,GLUT_BITMAP_TIMES_ROMAN_24," 3 cases ");
}
virtual int GetCaseType(){return TYPE_AVANCE_3_CASE;}
};
/*************************************************/
class CCasePasseTour : public CCase
{
public:
CCasePasseTour() : CCase(){}
virtual void Draw(float x, float y)
{
glColor3f(1,0,0);//Rouge
CCase::Draw(x,y);
}
virtual void DrawTitle()
{
glColor3f(1,1,1);
strcpy(m_csTitle,"Passe ton tour");
CToolBox::render_string(m_fXCoord,m_fYCoord,GLUT_BITMAP_TIMES_ROMAN_24,"Passe ton");
glLoadIdentity();
CToolBox::render_string(m_fXCoord-0.9,m_fYCoord-0.48,GLUT_BITMAP_TIMES_ROMAN_24," tour ");
}
virtual int GetCaseType(){return TYPE_PASSE_TOUR;}
};
/*************************************************/
class CCaseRetDepart : public CCase
{
public:
CCaseRetDepart() : CCase(){}
virtual void Draw(float x, float y)
{
glColor3f(1,0,1);
CCase::Draw(x,y);
}
virtual void DrawTitle()
{
glColor3f(1,1,1);
strcpy(m_csTitle,"Retour case depart");
CToolBox::render_string(m_fXCoord-0.02,m_fYCoord,GLUT_BITMAP_TIMES_ROMAN_24,"Retour case");
glLoadIdentity();
CToolBox::render_string(m_fXCoord-0.9,m_fYCoord-0.48,GLUT_BITMAP_TIMES_ROMAN_24," depart ");
}
virtual int GetCaseType(){return TYPE_RETOUR_DEPART;}
};
/*---------------------------------------------------
Classe la roue, affiche la roue et gere l'annimation
Contient les quartiers de la roue (8 en tout)
et le thread qui gere l'animation
---------------------------------------------------*/
class CPlayer;
class CPlateau;
class CRoueThread;
class CLaRoue
{
//permet a la classe CRoueThread
//d'acceder au membres priver de la roue
friend class CRoueThread;
public:
CLaRoue();
virtual ~CLaRoue();
//permet d'initialiser le ptr vers le plateau
void SetPlateau(CPlateau * pPlateau);
//lance la roue (l'animation)
void LanceRoue(CPlayer * pPlayer);
//Dessine la roue
void Draw();
private :
std::vector<CQuartierRoue*> m_ListQuartier;//Liste des quatier
int m_iRsl; // resultat de la roue
CPlateau * m_pPlateau;//ptr vers la plateau
CPlayer * m_pGamePlayer;//ptr vers le jeu
CRoueThread * m_pThread;//ptr ver le thread pour l'animation
};
//-------------------------------------------------------
class CRoueThread
{
public:
CRoueThread(CLaRoue * pLaRoue)
{
m_dwID = 0;
m_hThread = 0;
m_pLaRoue = pLaRoue;
}
~CRoueThread()
{
CloseHandle(m_hThread);
}
bool InitThread()
{
m_hThread = CreateThread(0,
0,
ThreadFunc,
this,
0,
&m_dwID);
if(!m_hThread)
{
// Impossible de créer le thread !
return false;
}
return true;
}
public:
HANDLE m_hThread;
private:
DWORD m_dwID;
CLaRoue * m_pLaRoue;
static DWORD WINAPI ThreadFunc(LPVOID pvParam);
};
/*-----------------------------------------------
Classe plateau, (gere les elements du plateau
cases et roue
Contient la liste des cases et la roue
Initialise et dessine les cases
-----------------------------------------------*/
class CPlayer;
class CGame;
class CPlateau
{
public:
CPlateau();
virtual ~CPlateau();
void SetGame(CGame * pGame);
CGame * GetGame();
//Dessine les cases
void Draw();
//retourne un ptr vers la case a la position iPos
CCase * GetCaseInPos(int iPos);
void SetScore(int iScore);
//bloque les touches
void Block(bool bBlock);
//appeler si un joueur tombe sur une case "la roue"
int LanceRoue(CPlayer * pPlayer);
private:
std::vector<CCase*> m_ListeCase;//liste des cases
CGame * m_pGame; // ptr vers le jeu
CLaRoue m_LaRoue;
};
/*----------------------------------------------------------
Classe player gere un joueur (representer par un rond)
analyse les resultats des cases ou de la roue
Gere le des (moyen devrait etre gerer par le plateau)
----------------------------------------------------------*/
class CPlayerThread;//forward declaration
class CPlayer
{
public:
//Param : ptr vers le plateau, couleur rgb, nom du joueur
CPlayer(CPlateau * pPlateau, float fR,float fG, float fB,std::string strPlayer);
virtual ~CPlayer();
//Dessine le joueur (le rond) a la postion qu'il faut
//definit par m_fPlayerPosY et m_fPlayerPosX
//cette fct et appeler a chaque redisplay de glut
void Draw();
//joue le tour (lance le des et met a jour la pos du joueur)
void Joue();
//dessine la legende (en bas a droite)
void DrawLegend(float x,float y);
//analyse le resultat apres avoir joué
void AnalyseRsl();
//appeler lorsque la roue a été lancer (aux cas ou
//il faille réactualiser la pos du joueur)
void SetRoueResult(int iRsl);
//dessine l'animation lorsque le joueur arrive sur un case
//(le rond qui rapettise)
void DrawAnim();
//retourne vrai si le joueur doit passer sont tour
bool GetIsPasseTour();
//remet a jour le joueur pour une nouvelle partie
void Restart();
//retourne un ptr vers le plateau
CPlateau * GetPlateau () {return m_pPlateau;}
//initialise le ptr vers le plateau
void SetPlateau(CPlateau * pPlateau){m_pPlateau = pPlateau;}
//retourne le nom du joueur
std::string GetPlayerName(){ return m_strPlayer;}
private:
int LanceLeDes();
//Met a jour la position du joueur
void SetPlayerPos(int iNbDes);
private:
bool m_bPasseTour;//a vrai si le joueur passe son tour
std::string m_strPlayer;//nom du joueur
//position par rapport aux coord reference
float m_fPlayerPosY;
float m_fPlayerPosX;
int m_iPosPlayer;//pos du joueur (en nbr de case)
CCase * m_pCase;//ptr vers la case actuelle du joueur
CPlateau * m_pPlateau;// ptr vers le plateau
//Couleur du joueur RGB
float m_fR;
float m_fG;
float m_fB;
float m_fSphereOffset;
//thread associer au joueur (pour l'animation)
CPlayerThread * m_pThread;
};
//-------------------------------------------------------
class CPlayerThread
{
public:
CPlayerThread(CPlayer * pPlayer)
{
m_dwID = 0;
m_hThread = 0;
m_pPlayer = pPlayer;
}
~CPlayerThread()
{
CloseHandle(m_hThread);
}
bool InitThread()
{
m_hThread = CreateThread(0,
0,
ThreadFunc,
this,
0,
&m_dwID);
if(!m_hThread)
{
// Impossible de créer le thread !
return false;
}
return true;
}
public:
HANDLE m_hThread;
private:
DWORD m_dwID;
CPlayer * m_pPlayer;
static DWORD WINAPI ThreadFunc(LPVOID pvParam);
};
/*---------------------------------------------
Represente un quartier de la roue
chaque type de quartier et representer par
une classe (herité de celle la) et un type
-----------------------------------------------*/
class CQuartierRoue
{
public:
CQuartierRoue(float x, float y,float xOffset, float yOffset);
virtual ~CQuartierRoue();
virtual void Draw() = 0;
virtual int GetType() = 0;
void DrawLed();
void SetDrawLed(bool bDraw);
//Dessine l'animation de fin
void DrawIsEnd();
std::string GetGageStr();
private:
bool GetDrawLed();
protected:
//Offset sur le diametere de la led
float m_fSphereOffset;
//Coord du quartier (pour ecrire le titre du quartier)
float m_fXCoord;
float m_fYCoord;
//Offset pour la position de la led
float m_fXLedOffset;
float m_fYLedOffset;
//a vrai si on dessine la led sur le quartier
bool m_bDrawLed;
//Titre du gage
std::string m_strNomGage;
};
//----------------------------------------------------
class CQuartierCulSec : public CQuartierRoue
{
public:
CQuartierCulSec(float x, float y,float xOffset, float yOffset) : CQuartierRoue(x,y,xOffset,yOffset)
{
m_strNomGage = "Boit ton verre cul sec";
}
virtual int GetType() {return QUATIER_CULSEC;}
virtual void Draw()
{
glTranslatef(m_fXCoord,m_fYCoord,0);
glColor3f(1, 0, 0);
CToolBox::render_string(0,0,GLUT_BITMAP_HELVETICA_18,"Boit ton ");
CToolBox::render_string(0,-0.07,GLUT_BITMAP_HELVETICA_18,"verre cul sec");
}
};
//----------------------------------------------------
class CQuartier3Fois : public CQuartierRoue
{
public:
CQuartier3Fois(float x, float y,float xOffset, float yOffset) : CQuartierRoue(x,y,xOffset,yOffset)
{
m_strNomGage = "Boit ton verre en 3 fois";
}
virtual int GetType() {return QUATIER_3FOIS;}
virtual void Draw()
{
glTranslatef(m_fXCoord,m_fYCoord,0);
glColor3f(1, 0, 0);
CToolBox::render_string(0,0,GLUT_BITMAP_HELVETICA_18,"Boit ton verre");
CToolBox::render_string(0,-0.07,GLUT_BITMAP_HELVETICA_18," en 3 fois ");
}
};
//----------------------------------------------------
class CQuartierTGenerale : public CQuartierRoue
{
public:
CQuartierTGenerale(float x, float y,float xOffset, float yOffset) : CQuartierRoue(x,y,xOffset,yOffset)
{
m_strNomGage = "Tournée Generale";
}
virtual int GetType() {return QUATIER_TGENERALE;}
virtual void Draw()
{
glTranslatef(m_fXCoord,m_fYCoord,0);
glColor3f(1, 0, 0);
CToolBox::render_string(0,0,GLUT_BITMAP_HELVETICA_18,"Tournée Generale");
}
};
//----------------------------------------------------
class CQuartierTLMonde : public CQuartierRoue
{
public:
CQuartierTLMonde(float x, float y,float xOffset, float yOffset) : CQuartierRoue(x,y,xOffset,yOffset)
{
m_strNomGage = "Boit le verre de tous le monde";
}
virtual int GetType() {return QUATIER_TLMONDE;}
virtual void Draw()
{
glTranslatef(m_fXCoord,m_fYCoord,0);
glColor3f(1, 0, 0);
CToolBox::render_string(0,-0.02,GLUT_BITMAP_HELVETICA_18,"Boit ");
CToolBox::render_string(-0.08,-0.1,GLUT_BITMAP_HELVETICA_18,"le verre");
CToolBox::render_string(-0.2,-0.2,GLUT_BITMAP_HELVETICA_18,"de tous le monde");
}
};
//----------------------------------------------------
class CQuartierRecule3Case : public CQuartierRoue
{
public:
CQuartierRecule3Case(float x, float y,float xOffset, float yOffset) : CQuartierRoue(x,y,xOffset,yOffset)
{
m_strNomGage = "Recule de 3 cases";
}
virtual int GetType() {return QUATIER_RECULE;}
virtual void Draw()
{
glTranslatef(m_fXCoord,m_fYCoord,0);
glColor3f(1, 0, 0);
CToolBox::render_string(0,-0.02,GLUT_BITMAP_HELVETICA_18,"Recule de");
CToolBox::render_string(0,-0.1,GLUT_BITMAP_HELVETICA_18,"3 cases");
}
};
//----------------------------------------------------
class CQuartierRetDepart: public CQuartierRoue
{
public:
CQuartierRetDepart(float x, float y,float xOffset, float yOffset) : CQuartierRoue(x,y,xOffset,yOffset)
{
m_strNomGage = "Retour au depart";
}
virtual int GetType() {return QUATIER_RETDEPART;}
virtual void Draw()
{
glTranslatef(m_fXCoord,m_fYCoord,0);
glColor3f(1, 0, 0);
CToolBox::render_string(0,0,GLUT_BITMAP_HELVETICA_18,"Retour au ");
CToolBox::render_string(0,-0.1,GLUT_BITMAP_HELVETICA_18,"depart");
}
};
//----------------------------------------------------
class CQuartierVoisGage : public CQuartierRoue
{
public:
CQuartierVoisGage(float x, float y,float xOffset, float yOffset) : CQuartierRoue(x,y,xOffset,yOffset)
{
m_strNomGage = "Le voisin choisi ton gage";
}
virtual int GetType() {return QUATIER_VOISIN;}
virtual void Draw()
{
glTranslatef(m_fXCoord,m_fYCoord,0);
glColor3f(1, 0, 0);
CToolBox::render_string(0,-0.04,GLUT_BITMAP_HELVETICA_18,"Le voisin");
CToolBox::render_string(0,-0.12,GLUT_BITMAP_HELVETICA_18,"choisi");
CToolBox::render_string(0,-0.20,GLUT_BITMAP_HELVETICA_18,"ton gage");
}
};
//----------------------------------------------------
class CQuartierNoGage : public CQuartierRoue
{
public:
CQuartierNoGage(float x, float y,float xOffset, float yOffset) : CQuartierRoue(x,y,xOffset,yOffset)
{
m_strNomGage = "Pas de gage";
}
virtual int GetType() {return QUATIER_VOISIN;}
virtual void Draw()
{
glTranslatef(m_fXCoord,m_fYCoord,0);
glColor3f(1, 0, 0);
CToolBox::render_string(0,0,GLUT_BITMAP_HELVETICA_18,"Pas de gage");
}
};
Historique
- 01 décembre 2008 23:43:54 :
- Ajout du screen shoot
- 02 décembre 2008 23:56:57 :
- Maintenant si il y a plusieurs joueur sur une même case ils ne se superpose plus (il peut y avoir 5 joueurs au max sur la même case)
- 08 décembre 2008 22:38:26 :
- ajout de l'exe dans le zip (ex a renomer en exe, ne pas oublier la dll glut32)
- 25 décembre 2008 20:34:51 :
- - Ajout des commentaires
- Amelioration du systeme de blocage du clavier
- Creation des classes menu et deplacement
du code dans ces classes
- Quelques autres corrections minimes
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Pour 2d opengl/glut > ddraw ? [ par gimli123 ]
Bonjour à tous, j'ai tester les 2, à savoir direct draw et opengl/glut, mais j'aimerai savoir si il y en as un qui est plus performant que l'autre et
Glut et console [ par JoebarGlut ]
Salut, eske kelkun sait comment empecher d'avoir la console MS-dos qui s'affiche apres le mode fullscreen de glut ? La console me sert pour entrer un
Aide pour la console Win32 [ par Adeon ]
Adeon Salut! je vous ecris parce que j'ai un probleme, pour faire un "jeu d'action" en win32, j'utilise un programme qui marche
Quelles sont les bases... [ par Zeil ]
Bon, attention, le pavé est en cours de rédaction.Commençons par ma présentation:Je suis étudiant en 2eme candidature informatique (Belgique) et je co
algo ou source ? [ par JoebarGlut ]
Salut, Je suis en train de coder mon premier jeu en mode multijoueur en LAN et j'aurais une ou deux kestions algorithmiques.1- doit-il forcement y avo
Jeu baston [ par Aasea ]
Si jpeu trouver un programme adjoint pour taffer sur un jeu de baston possiblement komercial, c parfait :).(jeu en 2D)
superposer 2 écrans ?!? [ par leptidev ]
Bonjour, je voudrais savoir si il est possible sous glut de superposer 2 tampons images à l'écran, par exemple un jeu et son interface comme dans n'im
runtime error [ par james159 ]
bonjour,j'ai un message d'erreur qui s'affiche au bout de 5 min de jeu lorsque je joue a counter strike.l'ecran se fige et une boite apparait avec cec
Dev C++, Glub (`_Z) GRRRRRR [ par BirD ]
Salut les zamis,Je suis débutant en C, et j'ai un problème pour linker les fichier, j'ai passé déjà 1h30 sur le forum a essayer tous les trucs proposé
Pb Dev C++ 5 et OpenGl [ par guillaume21 ]
J'ai installé glut avec Dev c++ 5. J'ai mis glut.h dans include, glut32.lib dans lib et le dll dans system32 (et mem ds lib lol).J'ai aussi ajouté les
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
MATRICE TEMPLATEMATRICE TEMPLATE par hjr2610
Cliquez pour lire la suite par hjr2610 RE : SAC A DOS RE : SAC A DOS par hadjkaddour
Cliquez pour lire la suite par hadjkaddour
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|