📄 mychessdoc.cpp
字号:
// MyChessDoc.cpp : implementation of the CMyChessDoc class
//
#include "stdafx.h"
#include "MyChess.h"
#include "Array.h"
//加载DLL
#pragma comment(lib,"ArrayDll")
#include "MyChessDoc.h"
#include "MainFrm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CMyChessDoc
extern CMyArr theArr;
IMPLEMENT_DYNCREATE(CMyChessDoc, CDocument)
BEGIN_MESSAGE_MAP(CMyChessDoc, CDocument)
END_MESSAGE_MAP()
// CMyChessDoc construction/destruction
CMyChessDoc::CMyChessDoc()
{
// TODO: add one-time construction code here
}
CMyChessDoc::~CMyChessDoc()
{
}
bool CMyChessDoc::FindIndex(UINT roleID,UINT &uROw,UINT &uCol)
{
if (roleID>=1&&roleID<=5) // 红兵
{
uROw=3;
uCol=((roleID%16-1)*2);
return true;
}
else if (roleID>=17&&roleID<=21) // 黑兵
{
uROw=6;
uCol=((roleID%16-1)*2);
return true;
}
else if (roleID==6||roleID==7)//红炮
{
uROw=2;
if (6==roleID)
{
uCol=1;
}
else
{
uCol=7;
}
return true;
}
else if (22==roleID||23==roleID) //黑炮
{
uROw=7;
if (22==roleID)
{
uCol=1;
}
else
{
uCol=7;
}
return true;
}
else if (roleID>=8&&roleID<=16)
{
uROw=0;
switch(roleID)
{
case 8:
uCol=0;
break;
case 10:
uCol=1;
break;
case 12:
uCol=2;
break;
case 14:
uCol=3;
break;
case 16:
uCol=4;
break;
case 15:
uCol=5;
break;
case 13:
uCol=6;
break;
case 11:
uCol=7;
break;
case 9:
uCol=8;
break;
}
return true;
}
else if (roleID>=24&&roleID<=32)
{
uROw=9;
switch(roleID-16)
{
case 8:
uCol=0;
break;
case 10:
uCol=1;
break;
case 12:
uCol=2;
break;
case 14:
uCol=3;
break;
case 16:
uCol=4;
break;
case 15:
uCol=5;
break;
case 13:
uCol=6;
break;
case 11:
uCol=7;
break;
case 9:
uCol=8;
break;
}
return true;
}
else
{
return false;
}
}
bool CMyChessDoc::GoBack()
{
if (m_CSave.size()>0)
{
StSaveInfo HelpSave;
CChessMan *pOriginalChessMan;
CChessMan* pTargetChessMan;
HelpSave=m_CSave.SaveInfo.top();
UINT uOldChessX,uOldChessY,uTargetChessX,uTargetChessY;
if (FindIndex(HelpSave.uRoleId,uOldChessX,uOldChessY))
{
pOriginalChessMan=myChessMap[uOldChessX][uOldChessY];//找到动的棋子的指针
}
if (FindIndex(HelpSave.uTargetId,uTargetChessX,uTargetChessY))
{
pTargetChessMan=myChessMap[uTargetChessX][uTargetChessY];
}
else
{
pTargetChessMan=NULL;
}
pOriginalChessMan->ResetPos(HelpSave.uOldCol,HelpSave.uOldRow);
if (pTargetChessMan!=NULL)
{
pTargetChessMan->ResetPos(HelpSave.uNewCol,HelpSave.uNewRow);
}
if (pOriginalChessMan->m_uRoleID<=16)
{
theArr.Set(HelpSave.uOldRow,HelpSave.uOldCol,1);
if (pTargetChessMan!=NULL)
{
theArr.Set(HelpSave.uNewRow,HelpSave.uNewCol,2);
}
else
{
theArr.Set(HelpSave.uNewRow,HelpSave.uNewCol,0);
}
}
else
{
theArr.Set(HelpSave.uOldRow,HelpSave.uOldCol,2);
if (pTargetChessMan!=NULL)
{
theArr.Set(HelpSave.uNewRow,HelpSave.uNewCol,1);
}
else
{
theArr.Set(HelpSave.uNewRow,HelpSave.uNewCol,0);
}
}
m_chessMap.TheStateOfAllChess[HelpSave.uOldRow][HelpSave.uOldCol]=pOriginalChessMan;
m_chessMap.TheStateOfAllChess[HelpSave.uNewRow][HelpSave.uNewCol]=pTargetChessMan;
m_chessMap.Show();
m_CSave.pop();
m_CSave.SaveChess();
return true;
}
else
{
::AfxMessageBox("Wrong Operation!");
return false;
}
}
BOOL CMyChessDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
//CRect rectStart(50,600,100,625);
//m_wndStartButton.Create(_T("Start"),WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,rectStart,this,IDC_START_BUTTON);
// (CMainFrame*)AfxGetMainWnd()->m_wndStartButton.ShowWindow();
// TODO: add reinitialization code here
// (SDI documents will reuse this document)
//m_soldierLeftA.Create(A_LEFT_SOLDIER,IDB_REDSOLDIER,0,3,m_cpPaper.bm.bmWidth/8,m_cpPaper.bm.bmHeight/9,m_cpPaper.m_btBeginX,m_cpPaper.m_btBeginY);
for(int i=0;i<10;i++)
{
for (int j=0;j<9;j++)
{
myChessMap[i][j]=NULL;
}
}
theArr.Clear();
CChessMan::m_stcChosenID=-1;
CChessMan *pChessBridge;
pChessBridge=new CSoldier;
pChessBridge->Create(A_LEFT_SOLDIER,IDB_REDSOLDIER,0,3,m_cpPaper.bm.bmWidth/8,m_cpPaper.bm.bmHeight/9,m_cpPaper.m_btBeginX,m_cpPaper.m_btBeginY);
myChessMap[3][0]=pChessBridge;
theArr.Set(3,0,1);
pChessBridge=new CSoldier;
pChessBridge->Create(A_MID_LEFT_SOLDIER,IDB_REDSOLDIER,2,3,m_cpPaper.bm.bmWidth/8,m_cpPaper.bm.bmHeight/9,m_cpPaper.m_btBeginX,m_cpPaper.m_btBeginY);
myChessMap[3][2]=pChessBridge;
theArr.Set(3,2,1);
pChessBridge=new CSoldier;
pChessBridge->Create(A_MID_SOLDIER,IDB_REDSOLDIER,4,3,m_cpPaper.bm.bmWidth/8,m_cpPaper.bm.bmHeight/9,m_cpPaper.m_btBeginX,m_cpPaper.m_btBeginY);
myChessMap[3][4]=pChessBridge;
theArr.Set(3,4,1);
pChessBridge=new CSoldier;
pChessBridge->Create(A_MID_RIGHT_SOLDIER,IDB_REDSOLDIER,6,3,m_cpPaper.bm.bmWidth/8,m_cpPaper.bm.bmHeight/9,m_cpPaper.m_btBeginX,m_cpPaper.m_btBeginY);
myChessMap[3][6]=pChessBridge;
theArr.Set(3,6,1);
pChessBridge=new CSoldier;
pChessBridge->Create(A_RIGHT_SOLDIER,IDB_REDSOLDIER,8,3,m_cpPaper.bm.bmWidth/8,m_cpPaper.bm.bmHeight/9,m_cpPaper.m_btBeginX,m_cpPaper.m_btBeginY);
myChessMap[3][8]=pChessBridge;
theArr.Set(3,8,1);
//////上面是五个红兵下面是5个黑兵
pChessBridge=new CSoldier;
pChessBridge->Create(B_LEFT_SOLIDER,IDB_BLACK_SOLDIER,0,6,m_cpPaper.bm.bmWidth/8,m_cpPaper.bm.bmHeight/9,m_cpPaper.m_btBeginX,m_cpPaper.m_btBeginY);
myChessMap[6][0]=pChessBridge;
theArr.Set(6,0,2);
pChessBridge=new CSoldier;
pChessBridge->Create(B_MID_LEFT_SOLIDER,IDB_BLACK_SOLDIER,2,6,m_cpPaper.bm.bmWidth/8,m_cpPaper.bm.bmHeight/9,m_cpPaper.m_btBeginX,m_cpPaper.m_btBeginY);
myChessMap[6][2]=pChessBridge;
theArr.Set(6,2,2);
pChessBridge=new CSoldier;
pChessBridge->Create(B_MID_SOLDIER,IDB_BLACK_SOLDIER,4,6,m_cpPaper.bm.bmWidth/8,m_cpPaper.bm.bmHeight/9,m_cpPaper.m_btBeginX,m_cpPaper.m_btBeginY);
myChessMap[6][4]=pChessBridge;
theArr.Set(6,4,2);
pChessBridge=new CSoldier;
pChessBridge->Create(B_MID_RIGHT_SOLDIER,IDB_BLACK_SOLDIER,6,6,m_cpPaper.bm.bmWidth/8,m_cpPaper.bm.bmHeight/9,m_cpPaper.m_btBeginX,m_cpPaper.m_btBeginY);
myChessMap[6][6]=pChessBridge;
theArr.Set(6,6,2);
pChessBridge=new CSoldier;
pChessBridge->Create(B_RIGHT_SOLDIER,IDB_BLACK_SOLDIER,8,6,m_cpPaper.bm.bmWidth/8,m_cpPaper.bm.bmHeight/9,m_cpPaper.m_btBeginX,m_cpPaper.m_btBeginY);
myChessMap[6][8]=pChessBridge;
theArr.Set(6,8,2);
////////////////////下面是四个马
pChessBridge=new CHorse;
pChessBridge->Create(A_LEFT_HORSE,IDB_REDHORSE,1,0,m_cpPaper.bm.bmWidth/8,m_cpPaper.bm.bmHeight/9,m_cpPaper.m_btBeginX,m_cpPaper.m_btBeginY);
myChessMap[0][1]=pChessBridge;
theArr.Set(0,1,1);
pChessBridge=new CHorse;
pChessBridge->Create(A_RIGHT_HORSE,IDB_REDHORSE,7,0,m_cpPaper.bm.bmWidth/8,m_cpPaper.bm.bmHeight/9,m_cpPaper.m_btBeginX,m_cpPaper.m_btBeginY);
myChessMap[0][7]=pChessBridge;
theArr.Set(0,7,1);
pChessBridge=new CHorse;
pChessBridge->Create(B_LEFT_HORSE,IDB_BLACK_HORSE,1,9,m_cpPaper.bm.bmWidth/8,m_cpPaper.bm.bmHeight/9,m_cpPaper.m_btBeginX,m_cpPaper.m_btBeginY);
myChessMap[9][1]=pChessBridge;
theArr.Set(9,1,2);
pChessBridge=new CHorse;
pChessBridge->Create(B_RIGHT_HORSE,IDB_BLACK_HORSE,7,9,m_cpPaper.bm.bmWidth/8,m_cpPaper.bm.bmHeight/9,m_cpPaper.m_btBeginX,m_cpPaper.m_btBeginY);
myChessMap[9][7]=pChessBridge;
theArr.Set(9,7,2);
//////////////////////////////
/////////////////下面是四个炮
pChessBridge=new CCannon;
pChessBridge->Create(A_LEFT_CANNON,IDB_CANNON,1,2,m_cpPaper.bm.bmWidth/8,m_cpPaper.bm.bmHeight/9,m_cpPaper.m_btBeginX,m_cpPaper.m_btBeginY);
myChessMap[2][1]=pChessBridge;
theArr.Set(2,1,1);
pChessBridge=new CCannon;
pChessBridge->Create(A_RIGHT_CANNON,IDB_CANNON,7,2,m_cpPaper.bm.bmWidth/8,m_cpPaper.bm.bmHeight/9,m_cpPaper.m_btBeginX,m_cpPaper.m_btBeginY);
myChessMap[2][7]=pChessBridge;
theArr.Set(2,7,1);
pChessBridge=new CCannon;
pChessBridge->Create(B_LEFT_CANNON,IDB_BLACK_CANNON,1,7,m_cpPaper.bm.bmWidth/8,m_cpPaper.bm.bmHeight/9,m_cpPaper.m_btBeginX,m_cpPaper.m_btBeginY);
myChessMap[7][1]=pChessBridge;
theArr.Set(7,1,2);
pChessBridge=new CCannon;
pChessBridge->Create(B_RIGHT_CANNON,IDB_BLACK_CANNON,7,7,m_cpPaper.bm.bmWidth/8,m_cpPaper.bm.bmHeight/9,m_cpPaper.m_btBeginX,m_cpPaper.m_btBeginY);
myChessMap[7][7]=pChessBridge;
theArr.Set(7,7,2);
//////////////////////
//////////////////////////////////////////////////////////////////////////
///////
//////////////////////////////////////////////////////////////////////////
///////下面是两个将
pChessBridge=new CHead;
pChessBridge->Create(A_HEAD,IDB_HEAD,4,0,m_cpPaper.bm.bmWidth/8,m_cpPaper.bm.bmHeight/9,m_cpPaper.m_btBeginX,m_cpPaper.m_btBeginY);
myChessMap[0][4]=pChessBridge;
theArr.Set(0,4,1);
m_chessMap.Create(myChessMap,10,9);
pChessBridge=new CHead;
pChessBridge->Create(B_HEAD,IDB_BLACK_HEAD,4,9,m_cpPaper.bm.bmWidth/8,m_cpPaper.bm.bmHeight/9,m_cpPaper.m_btBeginX,m_cpPaper.m_btBeginY);
myChessMap[9][4]=pChessBridge;
theArr.Set(9,4,2);
//////////////////////////////////////////////////////////////////////////
///////下面是车
///以下是红车
pChessBridge=new CVehicle;
pChessBridge->Create(A_LEFT_CAR,IDB_VEHICLE,0,0,m_cpPaper.bm.bmWidth/8,m_cpPaper.bm.bmHeight/9,m_cpPaper.m_btBeginX,m_cpPaper.m_btBeginY);
myChessMap[0][0]=pChessBridge;
theArr.Set(0,0,1);
pChessBridge=new CVehicle;
pChessBridge->Create(A_RIGHT_CAR,IDB_VEHICLE,8,0,m_cpPaper.bm.bmWidth/8,m_cpPaper.bm.bmHeight/9,m_cpPaper.m_btBeginX,m_cpPaper.m_btBeginY);
myChessMap[0][8]=pChessBridge;
theArr.Set(0,8,1);
////以下是黑车
pChessBridge =new CVehicle;
pChessBridge->Create(B_LEFT_CAR,IDB_BLACK_CAR,0,9,m_cpPaper.bm.bmWidth/8,m_cpPaper.bm.bmHeight/9,m_cpPaper.m_btBeginX,m_cpPaper.m_btBeginY);
myChessMap[9][0]=pChessBridge;
theArr.Set(9,0,2);
pChessBridge=new CVehicle;
pChessBridge->Create(B_RIGHT_CAR,IDB_BLACK_CAR,8,9,m_cpPaper.bm.bmWidth/8,m_cpPaper.bm.bmHeight/9,m_cpPaper.m_btBeginX,m_cpPaper.m_btBeginY);
myChessMap[9][8]=pChessBridge;
theArr.Set(9,8,2);
//////////////////////////////////////////////////////////////////////////
///////
/////画士
///////以下是红士
pChessBridge =new COfficial;
pChessBridge->Create(A_LEFT_GUARD,IDB_OFFICIAL,3,0,m_cpPaper.bm.bmWidth/8,m_cpPaper.bm.bmHeight/9,m_cpPaper.m_btBeginX,m_cpPaper.m_btBeginY);
myChessMap[0][3] =pChessBridge;
theArr.Set(0,3,1);
pChessBridge = new COfficial;
pChessBridge->Create(A_RIGHT_GUARD,IDB_OFFICIAL,5,0,m_cpPaper.bm.bmWidth/8,m_cpPaper.bm.bmHeight/9,m_cpPaper.m_btBeginX,m_cpPaper.m_btBeginY);
myChessMap[0][5] =pChessBridge;
theArr.Set(0,5,1);
/////////以下是黒士
pChessBridge =new COfficial;
pChessBridge->Create(B_LEFT_GUARD,IDB_BLACK_GUARD,3,9,m_cpPaper.bm.bmWidth/8,m_cpPaper.bm.bmHeight/9,m_cpPaper.m_btBeginX,m_cpPaper.m_btBeginY);
myChessMap[9][3]=pChessBridge;
theArr.Set(9,3,2);
pChessBridge =new COfficial;
pChessBridge->Create(B_RIGHT_GUARD,IDB_BLACK_GUARD,5,9,m_cpPaper.bm.bmWidth/8,m_cpPaper.bm.bmHeight/9,m_cpPaper.m_btBeginX,m_cpPaper.m_btBeginY);
myChessMap[9][5]=pChessBridge;
theArr.Set(9,5,2);
//////
//////下面是象
pChessBridge=new CXiang;
pChessBridge->Create(A_LEFT_XIANG,IDB_REDXIANG,2,0,m_cpPaper.bm.bmWidth/8,m_cpPaper.bm.bmHeight/9,m_cpPaper.m_btBeginX,m_cpPaper.m_btBeginY);
myChessMap[0][2]=pChessBridge;
theArr.Set(0,2,1);
pChessBridge=new CXiang;
pChessBridge->Create(A_RIGHT_XIANG,IDB_REDXIANG,6,0,m_cpPaper.bm.bmWidth/8,m_cpPaper.bm.bmHeight/9,m_cpPaper.m_btBeginX,m_cpPaper.m_btBeginY);
myChessMap[0][6]=pChessBridge;
theArr.Set(0,6,1);
pChessBridge=new CXiang;
pChessBridge->Create(B_LEFT_XIANG,IDB_BLACK_XIANG,2,9,m_cpPaper.bm.bmWidth/8,m_cpPaper.bm.bmHeight/9,m_cpPaper.m_btBeginX,m_cpPaper.m_btBeginY);
myChessMap[9][2]=pChessBridge;
theArr.Set(9,2,2);
pChessBridge=new CXiang;
pChessBridge->Create(B_RIGHT_XIANG,IDB_BLACK_XIANG,6,9,m_cpPaper.bm.bmWidth/8,m_cpPaper.bm.bmHeight/9,m_cpPaper.m_btBeginX,m_cpPaper.m_btBeginY);
myChessMap[9][6]=pChessBridge;
theArr.Set(9,6,2);
m_chessMap.Create(myChessMap,10,9);
m_nSelected=0;
m_nWhoPlayNow=1;
return TRUE;
}
// CMyChessDoc serialization
void CMyChessDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
// TODO: add storing code here
}
else
{
// TODO: add loading code here
}
}
// CMyChessDoc diagnostics
#ifdef _DEBUG
void CMyChessDoc::AssertValid() const
{
CDocument::AssertValid();
}
void CMyChessDoc::Dump(CDumpContext& dc) const
{
CDocument::Dump(dc);
}
#endif //_DEBUG
// CMyChessDoc commands
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -