welcome to my chinese  chess  on line

 

project             name: chinese chess
project               role: leader and main  developer
project     technique: vs 2005 ,c++,p2p,MFC
project introduction: this project uses p2p
technique ,two persons can connect to each other to play chess .They can not only play but also talk on line .
project  core   code:

//////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

//////chessmap.h

#ifndef CHESSMAP_H_
#define  CHESSMAP_H_
#include "stdafx.h"
#include "windows.h"
#include  "chessman.h"


#include "paper.h"
////这个对象里存的是整张棋盘上每个点对应的棋子的情况, //////////////分为有棋子,没有棋子,有棋子的时候存的是棋子的指针,没有棋子的时候存的是空指针
class CChessMap
{

public:
 CChessMap(){};
 void Create(CChessMan *initChessState[][9],int nRow,int nCol);
 void  ResetStatePos(int i,int j,CChessMan* thisChess);
 CChessMan *FindStatePos(POINT thisPos,int &nPosX,int &nPosY);
 CChessMan *FindStatePos(int i,int j);
 void ShowCurrentRole(int i,int j,CDC *pDC);
 void Draw(CDC *pDC);
 bool IfManInMidOfHead(int row,int col);
 bool IfHeadCanGo(CChessMan *pOldChess,POINT nextPos,int nFlag);
 bool IfHeadSafe(CChessMan *pChess,UINT uNextRow,UINT uNextCol);
 void Clear();
 void Show();
 ~CChessMap();
public:
 int m_nSteps;
 int m_nRow,m_nCol;
 CChessMan *TheStateOfAllChess[10][9];
};

//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
#endif

 

 



 
Make a Free Website with Yola.