www.pudn.com > goodchessGame.zip > CallBreak.h
#ifndef __CALLBREAK_H__
#define __CALLBREAK_H__
//CallBreak is a particular card game
//which involves one packet of cards
#include "GameController.h"
#include "ScoreDialog.h"
#include "StakeDialog.h"
#include "SortableUintArray.h"
struct AnimStruct
{
CCard *s_pCard;
int s_PlayerID;
CPoint s_StartingPoint;
CPoint s_EndingPoint;
int s_RptCounter;
int s_DiffX;
int s_DiffY;
~AnimStruct()
{
s_pCard->DestroyWindow();
delete s_pCard;
}
};
class CCallBreakPlayer: virtual public CPlayer
{
public:
CCallBreakPlayer();
virtual ~CCallBreakPlayer();
void DrawStat(CDC *pDC, CRect *Rect, int CurrentCounter);
void DrawAnimation(CDC *pDC, int GameCounter, int AnimationCounter);
void CleanUp();
virtual CCard* Play(int GameCounter, CList *pAlreadyThrownCardList, CPtrList *pValidationList, int &WinnerCardIndex)
{
return NULL;
}
void Reset()
{
for(int i = 0; i <= 4; ++i)
{
m_nStake[i] = 0;
m_nHandsWon[i] = 0;
}
}
public:
int m_nStake[5];
int m_nHandsWon[5];
CRect m_StatRect;
};
class CHumanCallBreakPlayer : virtual public CCallBreakPlayer, virtual public CHumanPlayer
{
public:
CHumanCallBreakPlayer();
~CHumanCallBreakPlayer();
};
class CHostHumanCallBreakPlayer : public CHumanCallBreakPlayer
{
public:
CHostHumanCallBreakPlayer();
virtual ~CHostHumanCallBreakPlayer();
};
class CClientHumanCallBreakPlayer : public CHumanCallBreakPlayer
{
public:
CClientHumanCallBreakPlayer();
virtual ~CClientHumanCallBreakPlayer();
};
class CComputerCallBreakPlayer : public CCallBreakPlayer, public CComputerPlayer
{
public:
CComputerCallBreakPlayer();
CComputerCallBreakPlayer(int nPlayerID);
virtual ~CComputerCallBreakPlayer();
virtual void CleanUp();
public:
void CalculateStakeHands(int GameCounter);
virtual CCard* Play(int GameCounter, CList *pAlreadyThrownCardList, CPtrList *pValidationList, int &WinnerCardIndex);
protected:
CSortableUintArray m_SpadeArray;
CSortableUintArray m_HeartsArray;
CSortableUintArray m_ClubArray;
CSortableUintArray m_DiamondArray;
int WhatCardsAlreadyThrown(int Suite, CList *pAlreadyThrownCardList);
int HasEkkaBadshaMissiOfSpade(int &EkkaIndex, int &BadshaIndex, int &MissiIndex, int &GulamIndex);
int HasEkkaBadshaMissiOfHearts(int &EkkaIndex, int &BadshaIndex, int &MissiIndex, int &GulamIndex);
int HasEkkaBadshaMissiOfDiamond(int &EkkaIndex, int &BadshaIndex, int &MissiIndex, int &GulamIndex);
int HasEkkaBadshaMissiOfClub(int &EkkaIndex, int &BadshaIndex, int &MissiIndex, int &GulamIndex);
CCard* FindTheMostSuitableClub(int nPlayCounter, int WinnerCardIndex, CList *pAlareadyThrownCardList, int &rWinnerCard);
CCard* FindTheMostSuitableDiamond(int nPlayCounter, int WinnerCardIndex, CList *pAlareadyThrownCardList, int &rWinnerCard);
CCard* FindTheMostSuitableHearts(int nPlayCounter, int WinnerCardIndex, CList *pAlareadyThrownCardList, int &rWinnerCard);
CCard* FindTheMostSuitableSpade(int nPlayCounter, int WinnerCardIndex, CList *pAlareadyThrownCardList, int &rWinnerCard);
int FindCard(int Suite, int BitmapIndex);
int FindLeastCard();
void Remove(int nBitmapIndex);
};
class CCallBreakGameSingleCompController : public CSingleCompGameController
{
protected:
DECLARE_DYNCREATE(CCallBreakGameSingleCompController)
public:
CCallBreakGameSingleCompController();
virtual ~CCallBreakGameSingleCompController();
public:
virtual void Begin();
virtual CMenu * GetMainMenu()
{
return &m_MainMenu;
}
virtual void CreationOfPlayers();
void CleanUp();
void Deal();
void CalcPos();
CRect CalcStatRect(CCallBreakPlayer *pPlayer, int GameCounter);
BOOL IsValid(CPlayer *pCallBreakPlayer);
void RemoveFromValidationList(int nBitmapIndex);
BOOL Play();
CCallBreakPlayer* WhoWon();
protected:
int m_nCommandID;
BOOL m_bAlreadyPlayed;
CTypedPtrList m_AnimStructList;
CPtrList m_ValidationList;
CList m_AlreadyThrownCardList;
int m_WinnerCardIndex;
int m_GameCounter;
int m_PlayCounter;
int m_AnimationCounter;
CCallBreakPlayer *m_pWinnerPlayer;
CCard *m_ptmpCard;
CCallBreakPlayer *m_pCurrentPlayer;
POSITION m_pos;
int m_StatAnimationCounter;
static int StakeCntr;
BOOL m_bHandEnded;
BOOL m_bWaitForPlay;
public:
CTypedPtrList m_HumanCallBreakPlayerList;
CTypedPtrList m_ComputerCallBreakPlayerList;
DECLARE_MESSAGE_MAP()
afx_msg void OnFileDeal();
afx_msg void OnUpdateFileDeal(CCmdUI *pCmdUI);
afx_msg void OnTimer(UINT nIDEvent);
afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnPopup2Arrange();
afx_msg void OnUpdatePopup2Arrange(CCmdUI *pCmdUI);
afx_msg void OnPopup2Play();
afx_msg void OnUpdatePopup2Play(CCmdUI *pCmdUI);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
protected:
virtual void OnDraw(CDC* /*pDC*/);
};
struct HandStruct
{
int s_BitmapIndex;
CCallBreakPlayer* s_Player;
};
class CCallBreakGameNetworkController : public CNetworkGameController
{
protected:
DECLARE_DYNCREATE(CCallBreakGameNetworkController)
protected:
void CreationOfPlayers();
void DealHost();
void CalcPos();
BOOL IsValid(CPlayer *pCallBreakPlayer);
void RemoveFromValidationList(int nBitmapIndex);
CCallBreakPlayer* WhoWon();
void CleanUp();
public:
CCallBreakGameNetworkController();
virtual ~CCallBreakGameNetworkController();
virtual void OnDraw(CDC* pDC);
public:
virtual void Begin();
virtual CMenu* GetMainMenu()
{
return &m_MainMenu;
}
virtual void ProcessMessage(DataPacket & dp);
protected:
CHostHumanCallBreakPlayer* m_pHostHumanCallBreakPlayer;
CClientHumanCallBreakPlayer* m_pClientHumanCallBreakPlayer;
CHumanCallBreakPlayer* m_pHumanCallBreakPlayer;
CPlayer *m_pCurrentPlayer;
static int StakeCntr;
int m_PlayCounter;
CCard *m_ptmpCard;
int m_nCommandID;
BOOL m_bAlreadyPlayed;
CTypedPtrList m_AnimStructList;
CPtrList m_ValidationList;
int m_WinnerCardIndex;
int m_GameCounter;
BOOL m_bHandEnded;
public:
CTypedPtrList m_HostHumanCallBreakPlayerList;
CTypedPtrList m_ClientHumanCallBreakPlayerList;
CTypedPtrList m_HumanCallBreakPlayerList;
protected:
int m_TrackCounter;
int TestCounter;
POSITION m_pos;
int m_nPlayerIDCounter;
int m_AnimationCounter;
CCallBreakPlayer *m_pWinnerPlayer;
public:
DECLARE_MESSAGE_MAP()
afx_msg void OnFileDeal();
afx_msg void OnUpdateFileDeal(CCmdUI *pCmdUI);
afx_msg void OnTimer(UINT nIDEvent);
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg void OnPopup2Arrange();
afx_msg void OnUpdatePopup2Arrange(CCmdUI *pCmdUI);
afx_msg void OnPopup2Play();
afx_msg void OnUpdatePopup2Play(CCmdUI *pCmdUI);
virtual void OnInitialUpdate();
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
};
#endif //__CALLBREAK_H__