⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chessman.h

📁 一个用MFC做的象棋游戏,可以联网双人对下,
💻 H
字号:

#ifndef CHESSMAN_H_
#define  CHESSMAN_H_
#include "resource.h"
#include "stdafx.h"
#include "paper.h"
//#include "chessmap.h"
enum {A_LEFT_SOLDIER=1,A_MID_LEFT_SOLDIER,A_MID_SOLDIER,A_MID_RIGHT_SOLDIER,A_RIGHT_SOLDIER,A_LEFT_CANNON,A_RIGHT_CANNON,A_LEFT_CAR,A_RIGHT_CAR,A_LEFT_HORSE,A_RIGHT_HORSE,A_LEFT_XIANG,A_RIGHT_XIANG,A_LEFT_GUARD,A_RIGHT_GUARD,A_HEAD,B_LEFT_SOLIDER,B_MID_LEFT_SOLIDER,B_MID_SOLDIER,B_MID_RIGHT_SOLDIER,B_RIGHT_SOLDIER,B_LEFT_CANNON,B_RIGHT_CANNON,B_LEFT_CAR,B_RIGHT_CAR,B_LEFT_HORSE,B_RIGHT_HORSE,B_LEFT_XIANG,B_RIGHT_XIANG,B_LEFT_GUARD,B_RIGHT_GUARD,B_HEAD};


/////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
class CChessMan
{
public:
	CChessMan(){};
    void Create(UINT roleID,UINT nID,POINT initPos,int eachX,int eachY,int chessPaperBeginX,int chessPaperBeginY);
	void Create(UINT roleID,UINT nID,int iIndex,int jIndex,int eachX,int eachY,int chessPaperBeginX,int chessPaperBeginY);
	void ResetPos(POINT newPos);//重新设置棋子的物理位置
	void ResetPos(int ni,int nj);//重新设置棋子的逻辑位置
	void DPTOLP();//物理位置向逻辑位置的转换
	void LPTODP();//;逻辑位置向物理位置的转换
	void Draw(CDC *pDC);//显示棋子
	void ShowIAmHere(CDC *pDC);
	bool IfThisPosMe(POINT thisPos);////判断鼠标点击的当前位置是不是棋子所在位置
	//virtual bool NextStep(POINT nextPos,CDC *pDC,CChessMap*chessMap)=0;//下一步的发展情况
	void InvalidateMyRect(CDC *pDC);//重新绘制自己的区域,是小范围的 防止发生闪烁的情况
	void InvalidateMyRect(CDC *pDC,UINT uRow,UINT uCol);
	//void GetRect(CRect &rect);//得到位图的rect
	 bool NextStep(CChessMan*nextChessMan,int nNewRow,int nNewCol);//下一步的发展情况
	virtual bool IfNextPosLegal(POINT nextPos)=0;
public:
	static int m_stcChosenID;
	UINT m_uRoleID;//棋子的角色
	UINT m_BTIDD;//位图ID
	POINT m_ptNowPos;//棋子位置,指棋子中心点在棋盘上的位置
	UINT uRow,uCol;//指棋子的逻辑位置
	int m_nEachX,m_nEachY;//将棋子的物理坐标位置转化成逻辑坐标位置的单位
	int m_nChessPaperBeginX,m_nChessPaperBeginY;//记录棋纸的左上角的位置
	CBitmap m_btMapRole;//位图
	BITMAP m_btBM;//记录位图的长宽
};
/////下面是兵
class CSoldier:public CChessMan
{
public:
	CSoldier(){};
	void Create(UINT roleID,UINT nID,POINT initPos,int eachX,int eachY,int chessPaperBeginX,int chessPaperBeginY){CChessMan::Create(roleID,nID, initPos, eachX, eachY, chessPaperBeginX, chessPaperBeginY);};
	void Create(UINT roleID,UINT nID,int iIndex,int jIndex,int eachX,int eachY,int chessPaperBeginX,int chessPaperBeginY){CChessMan::Create(roleID,nID,  iIndex, jIndex, eachX, eachY, chessPaperBeginX, chessPaperBeginY);};
	//bool NextStep(POINT nextPos,CDC *pDC,CChessMap*chessMap);
	//bool NextStep(CChessMan*nextChessMan,int nNewRow,int nNewCol);
	bool IfNextPosLegal(POINT nextPos);
};
/////下面是马
class CHorse:public CChessMan
{
public:
	CHorse(){};
	void Create(UINT roleID,UINT nID,POINT initPos,int eachX,int eachY,int chessPaperBeginX,int chessPaperBeginY){CChessMan::Create(roleID,nID, initPos, eachX, eachY, chessPaperBeginX, chessPaperBeginY);};
	void Create(UINT roleID,UINT nID,int iIndex,int jIndex,int eachX,int eachY,int chessPaperBeginX,int chessPaperBeginY){CChessMan::Create(roleID,nID,  iIndex, jIndex, eachX, eachY, chessPaperBeginX, chessPaperBeginY);};
	bool IfNextPosLegal(POINT nextPos);
};
////下面是炮
class CCannon:public CChessMan
{
public:
	CCannon(){};
	void Create(UINT roleID,UINT nID,POINT initPos,int eachX,int eachY,int chessPaperBeginX,int chessPaperBeginY){CChessMan::Create(roleID,nID, initPos, eachX, eachY, chessPaperBeginX, chessPaperBeginY);};
	void Create(UINT roleID,UINT nID,int iIndex,int jIndex,int eachX,int eachY,int chessPaperBeginX,int chessPaperBeginY){CChessMan::Create(roleID,nID,  iIndex, jIndex, eachX, eachY, chessPaperBeginX, chessPaperBeginY);};
	bool IfNextPosLegal(POINT nextPos);
};
///下面是将
class CHead:public CChessMan
{
public:
	CHead(){};
	void Create(UINT roleID,UINT nID,POINT initPos,int eachX,int eachY,int chessPaperBeginX,int chessPaperBeginY){CChessMan::Create(roleID,nID, initPos, eachX, eachY, chessPaperBeginX, chessPaperBeginY);};
	void Create(UINT roleID,UINT nID,int iIndex,int jIndex,int eachX,int eachY,int chessPaperBeginX,int chessPaperBeginY){CChessMan::Create(roleID,nID,  iIndex, jIndex, eachX, eachY, chessPaperBeginX, chessPaperBeginY);};
	bool IfNextPosLegal(POINT nextPos);
};

////下面是车

class CVehicle:public CChessMan
{
public:
	CVehicle(){}
	void Create(UINT roleID,UINT nID,POINT CenterPos,int eachX,int eachY,int ChessPaperBeginX,int ChessPaperBeginY){CChessMan::Create(roleID,nID,CenterPos,eachX,eachY,ChessPaperBeginX,ChessPaperBeginY);};
	void Create (UINT roleID,UINT nID,int iIndex,int jIndex,int eachX,int eachY,int ChessPaperBeginX,int ChessPaperBeginY){CChessMan::Create(roleID,nID,iIndex,jIndex,eachX,eachY,ChessPaperBeginX,ChessPaperBeginY);};
	bool IfNextPosLegal(POINT nextPos);  //判断下一步的目标地是否是有效位置
};

class COfficial:public CChessMan
{
public:
	COfficial(){}
	void Create(UINT roleID,UINT nID,POINT CenterPos,int eachX,int eachY,int ChessPaperBeginX,int ChessPaperBeginY){CChessMan::Create(roleID,nID,CenterPos,eachX,eachY,ChessPaperBeginX,ChessPaperBeginY);};
	void Create (UINT roleID,UINT nID,int iIndex,int jIndex,int eachX,int eachY,int ChessPaperBeginX,int ChessPaperBeginY){CChessMan::Create(roleID,nID,iIndex,jIndex,eachX,eachY,ChessPaperBeginX,ChessPaperBeginY);};
	bool IfNextPosLegal(POINT nextPos);
};

class CXiang:public CChessMan
{
public:
	CXiang(){};
	void Create(UINT roleID,UINT nID,POINT initPos,int eachX,int eachY,int chessPaperBeginX,int chessPaperBeginY){CChessMan::Create(roleID,nID, initPos, eachX, eachY, chessPaperBeginX, chessPaperBeginY);};
	void Create(UINT roleID,UINT nID,int iIndex,int jIndex,int eachX,int eachY,int chessPaperBeginX,int chessPaperBeginY){CChessMan::Create(roleID,nID,  iIndex, jIndex, eachX, eachY, chessPaperBeginX, chessPaperBeginY);};
	bool IfNextPosLegal(POINT nextPos);
};
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -