www.pudn.com > goodchessGame.zip > Marriage.h


#ifndef __MARRIAGE_H__ 
#define __MARRIAGE_H__ 
 
//Marriage is a particular card game 
//which involves three packets of cards 
 
#include "GameController.h" 
#include "JokerDialog.h" 
#include "ScoreDialog.h" 
#include "FiveInOneWaitDialog.h" 
#include "MarriagePointsDialog.h" 
 
class CMarriagePlayer; 
class CMarriageGameSingleCompController; 
 
#pragma pointers_to_members(full_generality, virtual_inheritance) 
 
#pragma warning( disable : 4250 ) 
 
enum Status 
{ 
	NODRAWNORPICKED =0, 
	DRAWN, 
	PICKED 
}; 
 
enum Tunnela_Type 
{ 
	JOKER_TUNNELA, 
	TIPLU_TUNNELA, 
	POPLU_TUNNELA, 
	JHIPLU_TUNNELA, 
	SIMPLE_TUNNELA 
}; 
 
//If a player has three of the same card then he has a tunnela like 2 of spades, 2 of spades and 2 of spades 
class CTunnela : public CObject 
{ 
public: 
	CCard m_FirstCard;		//here all the three cards are same 
	CCard m_SecondCard; 
	CCard m_ThirdCard; 
public: 
	int m_TunnelaType; 
	void SetTunnela(int BmpIndex) 
	{ 
		ASSERT(BmpIndex >= 1 && BmpIndex <= 52); 
		m_FirstCard.SetBitmapIndex(BmpIndex); 
		m_SecondCard.SetBitmapIndex(BmpIndex); 
		m_ThirdCard.SetBitmapIndex(BmpIndex); 
	} 
	int GetTunnelaBmpIndex() 
	{ 
		return m_FirstCard.GetBitmapIndex(); 
	} 
	BOOL CheckTunnela() 
	{ 
		if(m_FirstCard.GetBitmapIndex() == m_SecondCard.GetBitmapIndex() && 
			m_FirstCard.GetBitmapIndex() == m_ThirdCard.GetBitmapIndex()) 
		{  
			return TRUE; 
		} 
		else 
			return FALSE; 
	} 
public: 
	CTunnela() 
	{} 
	~CTunnela() 
	{} 
}; 
 
enum { 
	TUNNELA, 
	PURESEQUENCE, 
	PROBABLESEQUENCE, 
	TRIPLET, 
	PROBABLETRIPLET, 
	DISCARD, 
	JOKER 
}; 
 
//If a player has three cards in a sequence like 1 of spades, 2 of spades and 3 of spades then the player has a puresequence 
class CPureSequence : public CObject 
{ 
public: 
	CCard m_FirstCard; 
	CCard m_SecondCard; 
	CCard m_ThirdCard; 
public: 
	void SetFirstCard(int BmpIndex) 
	{ 
		m_FirstCard.SetBitmapIndex(BmpIndex); 
	} 
	void SetSecondCard(int BmpIndex) 
	{ 
		m_SecondCard.SetBitmapIndex(BmpIndex); 
	} 
	void SetThirdCard(int BmpIndex) 
	{ 
		m_ThirdCard.SetBitmapIndex(BmpIndex); 
	} 
	int GetFirstCard() 
	{ 
		return m_FirstCard.GetBitmapIndex(); 
	} 
	int GetSecondCard() 
	{ 
		return m_SecondCard.GetBitmapIndex(); 
	} 
	int GetThirdCard() 
	{ 
		return m_ThirdCard.GetBitmapIndex(); 
	} 
	int m_PureSequenceType; 
public: 
	CPureSequence() 
	{} 
	~CPureSequence() 
	{} 
	BOOL CheckPureSequence() 
	{ 
		int CardArray[3]; 
		CardArray[0] = m_FirstCard.GetBitmapIndex(); 
		CardArray[1] = m_SecondCard.GetBitmapIndex(); 
		CardArray[2] = m_ThirdCard.GetBitmapIndex(); 
 
		int temp; 
		BOOL flag; 
 
		do  
		{ 
			flag = FALSE; 
			for (int i = 0; i <= 1; i++) 
			{ 
				if(CardArray[i] < CardArray[i+1]) 
				{ 
					temp = CardArray[i]; 
					CardArray[i] = CardArray[i+1]; 
					CardArray[i+1] = temp; 
					flag = TRUE; 
				} 
			} 
		} while (flag); 
 
		if((CardArray[0] - CardArray[1]) == 1 && 
			((CardArray[0] - CardArray[2]) == 2 || (CardArray[0] - CardArray[2]) == 12)  && (int((m_FirstCard.GetBitmapIndex()-1)/13)+1) == (int((m_SecondCard.GetBitmapIndex()-1)/13)+1) && 
			(int((m_FirstCard.GetBitmapIndex()-1)/13)+1) == (int((m_ThirdCard.GetBitmapIndex()-1)/13)+1)) 
		{ 
			return TRUE; 
		} 
		else 
			return FALSE; 
		} 
	void operator=(CPureSequence&); 
}; 
 
//A probable sequence is two cards in series like 1 of spades and 2 of spades 
class CProbableSequence : public CObject 
{ 
public: 
	CCard m_FirstCard; 
	CCard m_SecondCard; 
public: 
	CProbableSequence() 
	{} 
	~CProbableSequence() 
	{} 
}; 
 
//If three cards are same but their suites differ like 1 of spades, 1 of clubs and 1 of hearts 
class CTriplet : public CObject 
{ 
public: 
	CCard m_FirstCard; 
	CCard m_SecondCard; 
	CCard m_ThirdCard; 
public: 
	CTriplet() 
	{} 
	~CTriplet() 
	{} 
 
	void SetFirstCard(int BmpIndex) 
	{ 
		m_FirstCard.SetBitmapIndex(BmpIndex); 
	} 
	void SetSecondCard(int BmpIndex) 
	{ 
		m_SecondCard.SetBitmapIndex(BmpIndex); 
	} 
	void SetThirdCard(int BmpIndex) 
	{ 
		m_ThirdCard.SetBitmapIndex(BmpIndex); 
	} 
	int GetFirstCard() 
	{ 
		return m_FirstCard.GetBitmapIndex(); 
	} 
	int GetSecondCard() 
	{ 
		return m_SecondCard.GetBitmapIndex(); 
	} 
	int GetThirdCard() 
	{ 
		return m_ThirdCard.GetBitmapIndex(); 
	} 
	BOOL CheckTriplet() 
	{ 
		if(m_FirstCard.GetBitmapIndex() != m_SecondCard.GetBitmapIndex() 
			&& m_FirstCard.GetBitmapIndex() != m_ThirdCard.GetBitmapIndex() 
			&& m_SecondCard.GetBitmapIndex() != m_ThirdCard.GetBitmapIndex() 
			&& ((m_FirstCard.GetBitmapIndex()-1) % 13)+1 == ((m_SecondCard.GetBitmapIndex()-1) % 13)+1 
			&& ((m_FirstCard.GetBitmapIndex()-1) % 13)+1 == ((m_ThirdCard.GetBitmapIndex()-1) % 13)+1) 
		{ 
			return TRUE; 
		} 
		else 
			return FALSE; 
	} 
}; 
 
//two similar cards with different suites  
class CProbableTriplet : public CObject 
{ 
public: 
	CCard m_FirstCard; 
	CCard m_SecondCard; 
public: 
	CProbableTriplet() 
	{} 
	~CProbableTriplet() 
	{} 
}; 
 
//The card that is kept aside for throwing 
class CDiscard : public CObject 
{ 
public: 
	CCard m_Card; 
public: 
	CDiscard() 
	{} 
	~CDiscard() 
	{} 
	void SetDiscard(int BmpIndex) 
	{ 
		m_Card.SetBitmapIndex(BmpIndex); 
	} 
	int GetDiscard() 
	{ 
		return m_Card.GetBitmapIndex(); 
	} 
}; 
 
enum { 
	ORDINARY_JOKER, 
	TIPLU_JOKER, 
	POPLU_JOKER, 
	JHIPLU_JOKER 
}; 
 
 
class CJoker : public CObject 
{ 
private: 
	CCard m_Card; 
public: 
	int m_nJokerType; 
public: 
	CJoker() 
	{} 
	~CJoker() 
	{} 
 
	void SetJoker(int BmpIndex) 
	{ 
		m_Card.SetBitmapIndex(BmpIndex); 
	} 
	int GetJoker() 
	{ 
		return m_Card.GetBitmapIndex(); 
	} 
	int CheckJoker(int val) 
	{ 
		if(((m_Card.GetBitmapIndex()-1) % 13)+1 == ((val-1) % 13)+1 
			|| m_Card.GetBitmapIndex() == val 
			|| ((m_Card.GetBitmapIndex()+1 == val) && (int((m_Card.GetBitmapIndex()-1)/13)+1 == int((val-1)/13)+1)) 
			|| ((m_Card.GetBitmapIndex()-1 == val) && (int((m_Card.GetBitmapIndex()-1)/13)+1 == int((val-1)/13)+1)) 
			|| ((m_Card.GetBitmapIndex()-12 == val) && (int((m_Card.GetBitmapIndex()-1)/13)+1 == int((val-1)/13)+1)) 
			|| ((m_Card.GetBitmapIndex()+12 == val) && (int((m_Card.GetBitmapIndex()-1)/13)+1 == int((val-1)/13)+1))) 
		{ 
			return 1; 
		} 
		else 
			return 0; 
	} 
}; 
 
class CDirtySequence : public CObject 
{ 
public: 
	CCard m_FirstCard; 
	CCard m_SecondCard; 
	CCard m_ThirdCard; 
public: 
	CDirtySequence() 
	{} 
	~CDirtySequence() 
	{} 
 
	void SetFirstCard(int BmpIndex) 
	{ 
		m_FirstCard.SetBitmapIndex(BmpIndex); 
	} 
	void SetSecondCard(int BmpIndex) 
	{ 
		m_SecondCard.SetBitmapIndex(BmpIndex); 
	} 
	void SetThirdCard(int BmpIndex) 
	{ 
		m_ThirdCard.SetBitmapIndex(BmpIndex); 
	} 
	int GetFirstCard() 
	{ 
		return m_FirstCard.GetBitmapIndex(); 
	} 
	int GetSecondCard() 
	{ 
		return m_SecondCard.GetBitmapIndex(); 
	} 
	int GetThirdCard() 
	{ 
		return m_ThirdCard.GetBitmapIndex(); 
	} 
	BOOL CheckDirtySequence(CJoker* pJoker) 
	{ 
		BOOL flag; 
		int index; 
		int counter=0; 
		int temp; 
		int CardArray[3]; 
		CardArray[0] = m_FirstCard.GetBitmapIndex(); 
		CardArray[1] = m_SecondCard.GetBitmapIndex(); 
		CardArray[2] = m_ThirdCard.GetBitmapIndex(); 
 
		do  
		{ 
			flag = FALSE; 
			for (int i = 0; i <= 1; i++) 
			{ 
				if(CardArray[i] < CardArray[i+1]) 
				{ 
					temp = CardArray[i]; 
					CardArray[i] = CardArray[i+1]; 
					CardArray[i+1] = temp; 
					flag = TRUE; 
				} 
			} 
		} while (flag); 
 
 
		for (int i = 0; i <= 2; i++) 
		{ 
			if(pJoker->CheckJoker(CardArray[i]) == 1) 
			{ 
				counter++; 
				index = i; 
			} 
		} 
 
		if(counter == 2) 
			return TRUE; 
		else if(counter == 3) 
			return TRUE; 
		else if(counter == 1) 
		{ 
			switch(index) 
			{ 
			case 0: 
				{ 
					if((CardArray[1] - 1 == CardArray[2] || CardArray[1] - 2 == CardArray[2] || CardArray[1] - 11 == CardArray[2] || CardArray[1] - 12 == CardArray[2] ) && int((CardArray[1]-1)/13)+1 == int((CardArray[2]-1)/13)+1) 
						return TRUE; 
					else  
						return FALSE; 
				} 
				break; 
			case 1: 
				{ 
					if((CardArray[0] - 1 == CardArray[2] || CardArray[0] - 2 == CardArray[2] || CardArray[0] - 11 == CardArray[2] || CardArray[0] - 12 == CardArray[2]) && int((CardArray[0]-1)/13)+1 == int((CardArray[2]-1)/13)+1) 
						return TRUE; 
					else 
						return FALSE; 
				} 
				break; 
			case 2: 
				{ 
					if((CardArray[0] - 1 == CardArray[1] || CardArray[0] - 2 == CardArray[1] || CardArray[0] - 11 == CardArray[1] || CardArray[0] - 12 == CardArray[1]  ) && int((CardArray[0]-1)/13)+1 == int((CardArray[1]-1)/13)+1) 
						return TRUE; 
					else 
						return FALSE; 
				} 
				break; 
			} 
		} 
		else 
			return FALSE; 
 
		return FALSE; 
	} 
}; 
 
class CDirtyTriplet : public CObject 
{ 
public: 
	CCard m_FirstCard; 
	CCard m_SecondCard; 
	CCard m_ThirdCard; 
public: 
	CDirtyTriplet() 
	{} 
	~CDirtyTriplet() 
	{} 
 
	void SetFirstCard(int BmpIndex) 
	{ 
		m_FirstCard.SetBitmapIndex(BmpIndex); 
	} 
	void SetSecondCard(int BmpIndex) 
	{ 
		m_SecondCard.SetBitmapIndex(BmpIndex); 
	} 
	void SetThirdCard(int BmpIndex) 
	{ 
		m_ThirdCard.SetBitmapIndex(BmpIndex); 
	} 
	int GetFirstCard() 
	{ 
		return m_FirstCard.GetBitmapIndex(); 
	} 
	int GetSecondCard() 
	{ 
		return m_SecondCard.GetBitmapIndex(); 
	} 
	int GetThirdCard() 
	{ 
		return m_ThirdCard.GetBitmapIndex(); 
	} 
	BOOL CheckDirtyTriplet(CJoker* pJoker) 
	{ 
		int index; 
		int counter=0; 
		int CardArray[3]; 
		CardArray[0] = m_FirstCard.GetBitmapIndex(); 
		CardArray[1] = m_SecondCard.GetBitmapIndex(); 
		CardArray[2] = m_ThirdCard.GetBitmapIndex(); 
 
		for (int i = 0; i <= 2; i++) 
		{ 
			if(pJoker->CheckJoker(CardArray[i]) == 1) 
			{ 
				counter++; 
				index = i; 
			} 
		} 
 
		if(counter == 2) 
			return TRUE; 
		else if(counter == 3) 
			return TRUE; 
		else if(counter == 1) 
		{ 
			switch(index) 
			{ 
			case 0: 
				{ 
					if(CardArray[1] != CardArray[2] && ((CardArray[1]-1) % 13)+1 == ((CardArray[2]-1) % 13)+1) 
						return TRUE; 
					else  
						return FALSE; 
				} 
				break; 
			case 1: 
				{ 
					if(CardArray[0] != CardArray[2] && ((CardArray[0]-1) % 13)+1 == ((CardArray[2]-1) % 13)+1) 
						return TRUE; 
					else 
						return FALSE; 
				} 
				break; 
			case 2: 
				{ 
					if(CardArray[0] != CardArray[1] && ((CardArray[0]-1) % 13)+1 == ((CardArray[1]-1) % 13)+1) 
						return TRUE; 
					else 
						return FALSE; 
				} 
				break; 
			} 
		} 
		else 
			return FALSE; 
 
		return FALSE; 
	} 
}; 
 
class CFirstThreePureSequence : public CObject 
{ 
public: 
	CPureSequence *m_PureSequenceOne; 
	CPureSequence *m_PureSequenceTwo; 
	CPureSequence *m_PureSequenceThree; 
public: 
	CFirstThreePureSequence(); 
	~CFirstThreePureSequence(); 
public: 
	int m_OverlappingDistance; 
public: 
	void Creation(CWnd *pParentWnd, int NumberOfPlayer, CMarriagePlayer *pPlayer); 
}; 
 
//  This class represents a player who is playing a marriage game 
//  The members and member function are arbitary; they are not fixed  
//  they maybe modified as the project progresses 
class CMarriagePlayer: virtual public CPlayer 
{ 
protected: 
	CPureSequence *m_pPureSequence; 
	CTriplet *m_pTriplet; 
	CTunnela *m_pTunnela; 
	CArray m_ShowingCardArray; 
 
public: 
	CMarriagePlayer(); 
 
	virtual ~CMarriagePlayer(); 
 
	CTypedPtrList m_PureSequenceStaticList; 
	CTypedPtrList m_PureSequenceDynamicList; 
	CTypedPtrList m_TripletList; 
	CTypedPtrList m_JokerList; 
	CTypedPtrList m_TunnelaAtHandList; 
 
	int m_nTiplu; 
	int m_nPoplu; 
	int m_nJhiplu; 
	int m_nMarriage; 
	int m_nPoints; 
	virtual void CalTunnelaAtHand(CJoker* Joker); 
	virtual void CalTiplu(CJoker* Joker); 
	virtual void CalPoplu(CJoker* Joker); 
	virtual void CalJhiplu(CJoker* Joker); 
	virtual void CalMarriage(CJoker* Joker); 
 
	CFirstThreePureSequence m_FirstThreePureSequence; 
	BOOL m_bJokerSeen; 
	BOOL m_bIMadeTheGame; 
	int m_nPureSequenceCounter; 
	void CleanUp(); 
}; 
 
// This class represents a human player playing a game of Marriage. The player can be a client or a host 
// The members and member function are arbitary; they are not fixed  
// they maybe modified as the project progresses 
class CHumanMarriagePlayer :virtual public CMarriagePlayer, virtual public CHumanPlayer 
{ 
public: 
	CTypedPtrList m_DirtySequenceList; 
	CTypedPtrList m_DirtyTripletList; 
 
	CDirtySequence *m_pDirtySequence; 
	CDirtyTriplet *m_pDirtyTriplet; 
public: 
	CHumanMarriagePlayer(); 
	~CHumanMarriagePlayer(); 
 
	virtual void CalTunnelaAtHand(CJoker* Joker); 
	virtual void CalTiplu(CJoker* Joker); 
	virtual void CalPoplu(CJoker* Joker); 
	virtual void CalJhiplu(CJoker* Joker); 
	virtual void CalMarriage(CJoker* Joker); 
	void ShowCards(CWnd * pParentWnd, int nNumOfPlayers); 
	void CleanUp(); 
}; 
 
// This class represents the human marriage player who is also the host 
// The members and member function are arbitary; they are not fixed  
// they maybe modified as the project progresses 
class CHostHumanMarriagePlayer : public CHumanMarriagePlayer 
{ 
public: 
	CHostHumanMarriagePlayer(); 
	virtual ~CHostHumanMarriagePlayer(); 
 
}; 
 
 
// This class represents a human marriage player who is also a client 
// The members and member function are arbitary; they are not fixed  
// they maybe modified as the project progresses 
class CClientHumanMarriagePlayer : public CHumanMarriagePlayer 
{ 
public: 
	CClientHumanMarriagePlayer(); 
	virtual ~CClientHumanMarriagePlayer(); 
}; 
 
// The player is the computer and the current game is marriage 
// The members and member function are arbitary; they are not fixed;  
// they maybe modified as the project progresses 
class CComputerMarriagePlayer: public CMarriagePlayer, public CComputerPlayer 
{ 
protected: 
	CProbableTriplet *m_pProbableTriplet; 
	CProbableSequence *m_pProbableSequence; 
	CDiscard *m_pDiscard; 
	CJoker *m_pJoker; 
	CJoker *m_pJokerFromController; 
	CDaoDatabase* m_pDatabase; 
	CDaoTableDef* m_pTableDef1; 
	CDaoTableDef* m_pTableDef2; 
	CString m_strTempBaseTableName; 
	int m_nCounter; 
	CString m_strSelectJokerOrdinary, m_strSelectJokerTiplu, m_strSelectJokerPoplu, m_strSelectJokerJhiplu; 
	CString m_strSelectTunnela, m_strSelectPureSequence, m_strSelectTriplet, m_strSelect; 
	CString m_strDelete; 
	CString m_strSelectOrdJok, m_strSelectTipJok, m_strSelectPopJok, m_strSelectZhipJok; 
	CString m_strSelectTun, m_strSelectPur, m_strSelectPro, m_strSelectTrip, m_strSelectProTrip, m_strSelectDiscard; 
	CDaoRecordset m_RecordsetJokerOrdinary; 
	CDaoRecordset m_RecordsetJokerTiplu; 
	CDaoRecordset m_RecordsetJokerPoplu; 
	CDaoRecordset m_RecordsetJokerJhiplu; 
	CDaoRecordset m_RecordsetTunnela; 
	CDaoRecordset m_RecordsetPureSequence; 
	CDaoRecordset m_RecordsetTriplet; 
	CDaoRecordset m_Recordset; 
public: 
	CComputerMarriagePlayer(CDaoDatabase *pDatabase, int PlayerID); 
	virtual ~CComputerMarriagePlayer(); 
 
	CTypedPtrList m_ProbableSequenceList; 
	CTypedPtrList m_ProbableTripletList; 
	CTypedPtrList m_DiscardList; 
 
	BOOL CreateBaseTable(); 
	BOOL CreateTempBaseTable(); 
	void PopulateBaseTable(); 
	void PopulateTempBaseTable(); 
	void PopulateLists(int nType, int nSubType); 
	Status DrawOrPick(CDeck&, CFloor&, CWnd* pParentWnd); 
	BOOL Throw(CFloor&, CFloorDialog&); 
	BOOL MilyoKiMilenaTest(); 
	virtual void CalTunnelaAtHand(CJoker* Joker); 
	virtual void CalTiplu(CJoker* Joker); 
	virtual void CalPoplu(CJoker* Joker); 
	virtual void CalJhiplu(CJoker* Joker); 
	virtual void CalMarriage(CJoker* Joker); 
	void ShowCards(CWnd * pParentWnd, int nNumOfPlayers); 
	void SetJoker(CJoker *pJoker); 
	void CleanUp(); 
}; 
 
//  This class represents a player who is playing a marriage game not in 
//  the network environment. 
//  The members and member function are arbitary; they are not fixed  
//  they maybe modified as the project progresses 
class CMarriageGameSingleCompController : public CSingleCompGameController 
{ 
protected: 
	CString m_strDatabaseName; 
	BOOL m_bJokerSeen; 
	CJokerDialog m_JokerDlg; 
	CScoreDialog m_ScoreDlg; 
	CMarriagePointsDialog m_PointsDlg; 
	int m_nCounter; 
	CPureSequence *m_pPureSequence; 
	CTunnela *m_pTunnela; 
	CTriplet *m_pTriplet; 
	CDirtySequence *m_pDirtySequence; 
	CDirtyTriplet *m_pDirtyTriplet; 
	BOOL m_bAlreadyShown; 
	BOOL m_bAlreadyDrawn; 
	BOOL m_bAlreadyPicked; 
	BOOL m_bAlreadyThrown; 
	int m_nCommandID; 
	int m_nHitDetectCounter; 
	int m_nCardDrawnCounter; 
	CCard *m_ptmpCard; 
protected: 
	virtual void OnDraw(CDC* pDC);      // overridden to draw this view 
	afx_msg void OnRButtonDown(UINT nFlags, CPoint point); 
	virtual void CreationOfPlayers(); 
	void Deal(); 
	void CalcPos(); 
	BOOL CheckTunnela(); 
	BOOL CheckPureSequence(); 
	BOOL CheckTriplet(); 
	BOOL CheckDirtySequence(); 
	BOOL CheckDirtyTriplet(); 
	int CheckJoker(int Val); 
	void OnScores(); 
	void ShowAllCards(); 
	void CalculatePoints(); 
	void OnPlay(); 
protected: 
	afx_msg void OnLButtonDown(UINT nFlags, CPoint point); 
	afx_msg void OnLButtonUp(UINT nFlags, CPoint point); 
	afx_msg void OnMouseMove(UINT nFlags, CPoint point); 
	afx_msg void DrawCard(); 
	afx_msg void UpdateDrawCard(CCmdUI *pCmdUI); 
	afx_msg void PickCard(); 
	afx_msg void UpdatePickCard(CCmdUI *pCmdUI); 
	afx_msg void ThrowCard(); 
	afx_msg void UpdateThrowCard(CCmdUI *pCmdUI); 
	afx_msg void Joker(); 
	afx_msg void UpdateJoker(CCmdUI *pCmdUI); 
	afx_msg void RegisterTunnela(); 
	afx_msg void UpdateRegisterTunnela(CCmdUI *pCmdUI); 
	afx_msg void RegisterPureSequence(); 
	afx_msg void UpdateRegisterPureSequence(CCmdUI *pCmdUI); 
	afx_msg void RegisterTriplet(); 
	afx_msg void UpdateRegisterTriplet(CCmdUI *pCmdUI); 
	afx_msg void RegisterDirtySequence(); 
	afx_msg void UpdateRegisterDirtySequence(CCmdUI *pCmdUI); 
	afx_msg void RegisterDirtyTriplet(); 
	afx_msg void UpdateRegisterDirtyTriplet(CCmdUI *pCmdUI); 
	afx_msg void Edit(); 
	afx_msg void UpdateEdit(CCmdUI *pCmdUI); 
	afx_msg void ShowFirstThreePureSequence(); 
	afx_msg void UpdateShowFirstThreePureSequence(CCmdUI *pCmdUI); 
	afx_msg void Arrange(); 
	afx_msg void UpdateArrange(CCmdUI *pCmdUI); 
public: 
	CMarriageGameSingleCompController(); 
	virtual ~CMarriageGameSingleCompController(); 
	virtual void CleanUp(); 
	DECLARE_DYNCREATE(CMarriageGameSingleCompController) 
public: 
	CDaoDatabase *m_pDatabase; 
	CJoker m_Joker; 
	CTypedPtrList m_HumanMarriagePlayerList; 
	CTypedPtrList m_ComputerMarriagePlayerList; 
	CComputerMarriagePlayer *m_pComputerMarriagePlayer; 
	CHumanMarriagePlayer *m_pHumanMarriagePlayer; 
public: 
	virtual void Begin(); 
	 
	DECLARE_MESSAGE_MAP() 
	afx_msg void OnFileDeal(); 
	afx_msg void OnUpdateFileDeal(CCmdUI *pCmdUI); 
	afx_msg void OnTimer(UINT nIDEvent); 
	afx_msg void OnClose(); 
	afx_msg void OnDestroy(); 
	afx_msg void OnOptionsPointssystem(); 
	afx_msg void OnUpdateOptionsPointssystem(CCmdUI *pCmdUI); 
	virtual void OnInitialUpdate(); 
}; 
 
class CMarriageGameNetworkController : public CNetworkGameController 
{ 
protected: 
	int m_nPlayerIDCounter; 
	int m_nCounter; 
	int m_nHitDetectCounter; 
	int m_nCommandID; 
	CJoker m_Joker; 
	CMarriagePointsDialog m_PointsDlg; 
	BOOL m_bJokerSeen; 
	BOOL m_bDone; 
	CJokerDialog m_JokerDlg; 
	CScoreDialog m_ScoreDlg; 
	CPureSequence *m_pPureSequence; 
	CTunnela *m_pTunnela; 
	CTriplet *m_pTriplet; 
	CDirtySequence *m_pDirtySequence; 
	CDirtyTriplet *m_pDirtyTriplet; 
	CHostHumanMarriagePlayer *m_pHostHumanMarriagePlayer; 
	CClientHumanMarriagePlayer *m_pClientHumanMarriagePlayer; 
	CHumanMarriagePlayer *m_pHumanMarriagePlayer; 
	BOOL m_bAlreadyShown; 
	BOOL m_bAlreadyDrawn; 
	BOOL m_bAlreadyPicked; 
	BOOL m_bAlreadyThrown; 
	int m_nCardDrawnCounter; 
	CCard *m_ptmpCard; 
	CCard m_temp; 
	POSITION m_pos; 
 
	int m_TrackCounter; 
	CPureSequence *pPureSequence; 
	CTunnela *pTunnela; 
	CTriplet *pTriplet; 
	CDirtySequence *pDirtySequence; 
	CDirtyTriplet *pDirtyTriplet; 
public: 
	CMarriageGameNetworkController(); 
protected: 
	virtual ~CMarriageGameNetworkController(); 
	virtual void CleanUp(); 
	DECLARE_DYNCREATE(CMarriageGameNetworkController) 
public:	 
	CTypedPtrList m_HostHumanMarriagePlayerList; 
	CTypedPtrList m_ClientHumanMarriagePlayerList; 
	CTypedPtrList m_HumanMarriagePlayerList; 
protected: 
	virtual void CreationOfPlayers(); 
	void DealHost(); 
	void CalcPos(); 
	void Reset(); 
	BOOL CheckTunnela(); 
	BOOL CheckPureSequence(); 
	BOOL CheckTriplet(); 
	BOOL CheckDirtySequence(); 
	BOOL CheckDirtyTriplet(); 
	int CheckJoker(int Val); 
	void OnScores(); 
	void CalculatePoints(); 
	void TransferPointsSystemData(); 
	void ShowAllCards(); 
public: 
	virtual void OnDraw(CDC* pDC);      // overridden to draw this view 
protected: 
	afx_msg void OnRButtonDown(UINT nFlags, CPoint point); 
	afx_msg void OnLButtonDown(UINT nFlags, CPoint point); 
	afx_msg void OnLButtonUp(UINT nFlags, CPoint point); 
	afx_msg void OnMouseMove(UINT nFlags, CPoint point); 
	afx_msg void DrawCard(); 
	afx_msg void UpdateDrawCard(CCmdUI *pCmdUI); 
	afx_msg void PickCard(); 
	afx_msg void UpdatePickCard(CCmdUI *pCmdUI); 
	afx_msg void ThrowCard(); 
	afx_msg void UpdateThrowCard(CCmdUI *pCmdUI); 
	afx_msg void Joker(); 
	afx_msg void UpdateJoker(CCmdUI *pCmdUI); 
	afx_msg void RegisterTunnela(); 
	afx_msg void UpdateRegisterTunnela(CCmdUI *pCmdUI); 
	afx_msg void RegisterPureSequence(); 
	afx_msg void UpdateRegisterPureSequence(CCmdUI *pCmdUI); 
	afx_msg void RegisterTriplet(); 
	afx_msg void UpdateRegisterTriplet(CCmdUI *pCmdUI); 
	afx_msg void RegisterDirtySequence(); 
	afx_msg void UpdateRegisterDirtySequence(CCmdUI *pCmdUI); 
	afx_msg void RegisterDirtyTriplet(); 
	afx_msg void UpdateRegisterDirtyTriplet(CCmdUI *pCmdUI); 
	afx_msg void Edit(); 
	afx_msg void UpdateEdit(CCmdUI *pCmdUI); 
	afx_msg void ShowFirstThreePureSequence(); 
	afx_msg void UpdateShowFirstThreePureSequence(CCmdUI *pCmdUI); 
	afx_msg void Arrange(); 
	afx_msg void UpdateArrange(CCmdUI *pCmdUI); 
public:	 
	virtual void Begin(); 
	virtual void ProcessMessage(DataPacket &dp); 
	 
	DECLARE_MESSAGE_MAP() 
	afx_msg void OnFileDeal(); 
	afx_msg void OnUpdateFileDeal(CCmdUI *pCmdUI); 
	afx_msg void OnTimer(UINT nIDEvent); 
	afx_msg void OnOptionsPointssystem(); 
	afx_msg void OnUpdateOptionsPointssystem(CCmdUI *pCmdUI); 
	virtual void OnInitialUpdate(); 
}; 
 
#endif	//__MARRIAGE_H__