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

📄 mychessdoc.cpp

📁 一个用MFC做的象棋游戏,可以联网双人对下,
💻 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 + -