📄 chessman.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 + -