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__