www.pudn.com > TetrisWang.zip > Game.h


// Game.h: interface for the CGame class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#if !defined(AFX_GAME_H__9CAB1AD2_F75F_11D4_910A_5254ABDD22CE__INCLUDED_) 
#define AFX_GAME_H__9CAB1AD2_F75F_11D4_910A_5254ABDD22CE__INCLUDED_ 
 
#if _MSC_VER > 1000 
#pragma once 
#endif // _MSC_VER > 1000 
 
#include "Block.h" 
#include "Body.h" 
#include "Teris.h" 
#include "ChildView.h" 
 
class CChildView; 
 
class CGame : public CObject   
{ 
public: 
	enum	{ STATUS_WAIT=0, STATUS_RUN=1, STATUS_PAUSE=2, STATUS_OVER=3	}; 
	enum	{ TETRIS_BASE=7, TETRIS_EXTEND=18, TETRIS_EASY=22	}; 
	enum	{ COLOR_OWNE=0, COLOR_SAME=1, COLOR_RAND=2	}; 
	enum	{ TYPE_SINGLE=0, TYPE_DOUBLE=1, TYPE_SITZKRIEG=2, TYPE_NET=3, TYPE_COMPUTER=4, TYPE_TEACH=5	}; 
 
public: 
	CGame(); 
	virtual ~CGame(); 
	CGame(CGame &g); 
 
	void Draw(CDC &dc); 
	void DrawTop(CDC &dc); 
	void DrawGameOver(CDC &dc); 
	void DrawGameWait(CDC &dc); 
 
	void SetView(CChildView* p)	{	m_pView = p;	} 
	void SetCtrlKey(UINT Left=VK_LEFT, UINT Right=VK_RIGHT, UINT Up=VK_UP, UINT Down=VK_DOWN) 
	{ 
		m_CtrlKeys[0] = Left;	m_CtrlKeys[1] = Right; 
		m_CtrlKeys[2] = Up	;	m_CtrlKeys[3] = Down; 
	} 
	CSize MatchKey(UINT nChar); 
 
	CSize GetSize(void); 
	CSize GetTopSize(void); 
	CSize GetBodySize(void); 
 
	void StartGame(int nSpeed, int nLines, int nTetrisType,	UINT nCtrlKeys[MAX_CTRL_KEYS], int nColorType); 
 
	void EndGame(BOOL bReDraw = TRUE); 
	void SetWin(void)	{	m_bWin = true;	} 
 
	void SetPoint(CPoint pt)	{	m_ptStart = pt;	} 
	void NewTetris(void); 
	void NextTetris(void); 
 
	void SetGameTimer(void); 
	UINT SpeedToTime(int nSpeed); 
	int LinesToScore(int nLines); 
 
	void SetComputerCtrl(void); 
	void ComputerCtrlTetris(void); 
 
	void TetrisMove(const CSize &sz); 
	void TetrisDown(CDC& dc); 
	void AddLines(int nLines); 
 
	void SetStatus(int s)	{	m_nStatus = s;	} 
	int GetStatus(void)	{	return m_nStatus;	} 
 
	BOOL IsComputer(void)	{	return m_bComputer;	} 
	void SetComputer(BOOL c)	{	m_bComputer = c;	} 
	bool HasComputerCtrl(void)	{	return !(m_nCtrlRoate==0 && m_nCtrlMove==0);	} 
 
	BOOL IsActive(void)		{	return m_bActive;	} 
	void SetActive(BOOL b)	{	m_bActive = b;		} 
 
	int GetIndex(void)		{	return m_nIndex;	} 
	void SetIndex(int i)	{	m_nIndex = i;		} 
 
	static void SetTetrisColor(int i)	{	m_nTetrisColor = i;	} 
	static void SetComputerIntelligence(int i)	{	m_nComputerIntelligence = i;	} 
	static void SetType(int t)	{	m_nGameType = t;	} 
	static int GetType(void)	{	return m_nGameType;	} 
 
	static void SetComputerCanFallDown(BOOL b)	{	m_bComputerCanFallDown = b;	} 
	static BOOL IsComputerCanFallDown(void )	{	return m_bComputerCanFallDown;	} 
protected: 
	CChildView*	m_pView; 
	CBody	m_Body; 
	CTetris m_Tetris; 
	CPoint	m_ptStart; 
 
	int		m_nStatus;		//	游戏状态 
	UINT	m_CtrlKeys[MAX_CTRL_KEYS];	//	控制键 
 
	BOOL	m_bWin;			//	对战中是否获胜 
	BOOL	m_bComputer;	//	是否为电脑 
	int		m_nCtrlRoate;	//	电脑控制旋转数量 
	int		m_nCtrlMove;	//	电脑控制移动数量 
 
	int		m_nScore; 
	int		m_nLines; 
	int		m_nSpeed; 
 
	int		m_nTetrisType; 
 
	BOOL	m_bActive; 
	int		m_nIndex; 
 
	static int m_nTetrisColor; 
	static int m_nGameType; 
	static BOOL m_bComputerCanFallDown;		//	电脑是否可以按“下” 
	static int m_nComputerIntelligence;		//	电脑智能程度 
public: 
	void operator = (const CGame &g) 
	{ 
		m_Body = g.m_Body; 
		m_Tetris = g.m_Tetris; 
		m_ptStart = g.m_ptStart; 
		m_nStatus = g.m_nStatus; 
		m_nScore = g.m_nScore; 
		m_nLines = g.m_nLines; 
		m_nSpeed = g.m_nSpeed; 
		m_pView = g.m_pView; 
		m_bWin = g.m_bWin; 
		m_bComputer = g.m_bComputer; 
		m_nTetrisType = g.m_nTetrisType; 
		m_bActive = g.m_bActive; 
		m_nIndex = g.m_nIndex; 
		for (int i=0; i<4; i++) 
			m_CtrlKeys[i] = g.m_CtrlKeys[i]; 
	} 
}; 
 
#endif // !defined(AFX_GAME_H__9CAB1AD2_F75F_11D4_910A_5254ABDD22CE__INCLUDED_)