VC6.0 MFC单文档 中国象棋

学校高级程序设计课程的大作业,分享出来给大家做个参考,希望能给大家提供些许灵感。

我的灵感本身也来自于csdn上的一篇五子棋游戏的文章

VC6.0 MFC 单文档 五子棋游戏 基础入门_mfc五子棋-CSDN博客

注:下面出现的变量名在取名方面可能比较自由。

最终成果图

实现步骤

首先新建一个MFC单文档应用程序

添加一个XiangQi类,添加一些成员函数并作必要的初始化

class CXiangQi  
{
public:
	void reset();//用于重开
	void re();//用于悔棋
	void panduan();//判断胜负
	void XiaQi(CPoint pt);//下棋,核心部分
	void DrawChessboard(CDC *pDC);
	void Draw(CDC *pDC);
	void DrawQiZi(CDC *pDC);
	void DrawQiPan(CDC *pDC);
	void DrawBackground(CDC *pDC);//各种绘制
	void de();//后面再解释
	CXiangQi();
	virtual ~CXiangQi();
    CDC *pDC;
	int m_Qp[9][10];//棋盘信息
	int m_Qp1[9][10];//保存的棋盘信息,悔棋会用到
	int m_H,m_L;
	int m_Color;//1表示红棋下,2表示黑棋下
	int lenbl;
	int ydx,ydy;
	int m_H1,m_L1;

};

CXiangQi::CXiangQi()
{
    lenbl=58;//绘制图案的基本尺寸,数值影响最终画出来的大小
	ydx=550;
	ydy=100;
	m_Color=1;
	for(int i=0;i<9;i++)
	{
        for(int j=0;j<10;j++)
		{
			m_Qp[i][j]=0;
			m_Qp1[i][j]=0;
		}
	}
	m_Qp[0][0]=13;m_Qp[1][0]=12;m_Qp[2][0]=11;m_Qp[3][0]=10;m_Qp[4][0]=9;m_Qp[5][0]=10;m_Qp[6][0]=11;m_Qp[7][0]=12;m_Qp[8][0]=13;
	m_Qp[0][1]=0;m_Qp[1][1]=0;m_Qp[2][1]=0;m_Qp[3][1]=0;m_Qp[4][1]=0;m_Qp[5][1]=0;m_Qp[6][1]=0;m_Qp[7][1]=0;m_Qp[8][1]=0;
	m_Qp[0][2]=0;m_Qp[1][2]=14;m_Qp[2][2]=0;m_Qp[3][2]=0;m_Qp[4][2]=0;m_Qp[5][2]=0;m_Qp[6][2]=0;m_Qp[7][2]=14;m_Qp[8][2]=0;
	m_Qp[0][3]=8;m_Qp[1][3]=0;m_Qp[2][3]=8;m_Qp[3][3]=0;m_Qp[4][3]=8;m_Qp[5][3]=0;m_Qp[6][3]=8;m_Qp[7][3]=0;m_Qp[8][3]=8;
	m_Qp[0][4]=0;m_Qp[1][4]=0;m_Qp[2][4]=0;m_Qp[3][4]=0;m_Qp[4][4]=0;m_Qp[5][4]=0;m_Qp[6][4]=0;m_Qp[7][4]=0;m_Qp[8][4]=0;
	m_Qp[0][5]=0;m_Qp[1][5]=0;m_Qp[2][5]=0;m_Qp[3][5]=0;m_Qp[4][5]=0;m_Qp[5][5]=0;m_Qp[6][5]=0;m_Qp[7][5]=0;m_Qp[8][5]=0;
	m_Qp[0][6]=1;m_Qp[1][6]=0;m_Qp[2][6]=1;m_Qp[3][6]=0;m_Qp[4][6]=1;m_Qp[5][6]=0;m_Qp[6][6]=1;m_Qp[7][6]=0;m_Qp[8][6]=1;
	m_Qp[0][7]=0;m_Qp[1][7]=7;m_Qp[2][7]=0;m_Qp[3][7]=0;m_Qp[4][7]=0;m_Qp[5][7]=0;m_Qp[6][7]=0;m_Qp[7][7]=7;m_Qp[8][7]=0;
	m_Qp[0][8]=0;m_Qp[1][8]=0;m_Qp[2][8]=0;m_Qp[3][8]=0;m_Qp[4][8]=0;m_Qp[5][8]=0;m_Qp[6][8]=0;m_Qp[7][8]=0;m_Qp[8][8]=0;
	m_Qp[0][9]=6;m_Qp[1][9]=5;m_Qp[2][9]=4;m_Qp[3][9]=3;m_Qp[4][9]=2;m_Qp[5][9]=3;m_Qp[6][9]=4;m_Qp[7][9]=5;m_Qp[8][9]=6;

}

       我将棋盘的信息存储在m_Qp数组中,不同的值表示不同的棋子,后面带1表示被选中的状态(后面会将什么是被选中的状态),此外还有50和51表示红色和黑色的框。

接下来进入画图环节,建议找小组里无所事事但脸皮没那么厚的去完成。

我们按照这样的格式依次绘制,总共28种全部画出来。再加上红色和黑色的框。

还有中间的“楚河汉界”四个字。

额外画一个将和帅,用来提示现在是哪一方下。

最终成果(反正挺多的,建议忽悠其他人去做)

然后完成代码的部分

void CXiangQi::DrawBackground(CDC *pDC)
{
    CBrush brush1,*pOldBrush1;
	brush1.CreateSolidBrush(RGB(255,255,255));
	pOldBrush1 = pDC->SelectObject(&brush1);
	pDC->Rectangle(0,0,1920,960); //整个屏幕大小
	brush1.DeleteObject();
	pDC->SelectObject(pOldBrush1);
//==============================================
	int x,y,r,r1;
	x = ydx;
	y = ydy;
	r = 8 * lenbl;
    r1 = 9 * lenbl;
	CBrush brush2,*pOldBrush2;
	brush2.CreateSolidBrush(RGB(255,255,255));
	pOldBrush2 = pDC->SelectObject(&brush2);
	pDC->Rectangle(x,y,x + r,y + r1); //棋盘大小
	brush2.DeleteObject();
	pDC->SelectObject(pOldBrush2);

}
void CXiangQi::DrawQiPan(CDC *pDC)
{
    DrawBackground(pDC); //调用背景要放在画棋盘前面,若放在后面棋盘会被覆盖
	int x,y;
	for (int i = 0; i < 10; i++)
	{
		x = ydx;
		y =  ydy + i * lenbl;
		pDC->MoveTo(x,y);
		
		x += 8 * lenbl;
		pDC->LineTo(x,y); //画行数
		
		
	}
    for ( i = 0; i < 9; i++)
	{
		if(i==0||i==8)
		{
            x = ydx + i * lenbl;
		y = ydy;
		pDC->MoveTo(x,y);
		
		y += 9 * lenbl;
		pDC->LineTo(x,y); //画列数
		}
		else
		{
		x = ydx + i * lenbl;
		y = ydy;
		pDC->MoveTo(x,y);
		
		y += 4 * lenbl;
		pDC->LineTo(x,y); //画列数
        
		y += 1 * lenbl;
        pDC->MoveTo(x,y);
        y += 4 * lenbl;
		pDC->LineTo(x,y);
		}
	}
	x = ydx + 3 * lenbl;
    y = ydy;
	pDC->MoveTo(x,y);
    x = x + 2 * lenbl;
    y = ydy+ 2 * lenbl;
    pDC->LineTo(x,y);

	x = ydx + 5 * lenbl;
    y = ydy;
	pDC->MoveTo(x,y);
    x = x - 2 * lenbl;
    y = ydy+ 2 * lenbl;
    pDC->LineTo(x,y);

    x = ydx + 3 * lenbl;
    y = ydy+7 * lenbl;
	pDC->MoveTo(x,y);
    x = x + 2 * lenbl;
    y = ydy+ 9 * lenbl;
    pDC->LineTo(x,y);
    
	x = ydx + 5 * lenbl;
    y = ydy+7 * lenbl;
	pDC->MoveTo(x,y);
    x = x - 2 * lenbl;
    y = ydy+ 9 * lenbl;
    pDC->LineTo(x,y);
}
void CXiangQi::Draw(CDC *pDC)
{
    DrawQiPan(pDC);
	DrawQiZi(pDC);
}

DrawQiZi(pDC)我们先空着,看看棋盘的效果。

在View中加入#include “WuZiQi.h”头文件并引入

在OnDraw中调用XiangQi类的Draw函数

运行效果

现在补上DrawQiZi(pDC)

void CXiangQi::DrawQiZi(CDC *pDC)
{
	
    int i,j; 
	int x,y;
	int r = lenbl/3;//棋子半径
	HICON hIconBINGR, hIconBINGB,hIconBINGR1, hIconBINGB1,
		  hIconSHUAIR,hIconSHUAIB,hIconSHUAIR1,hIconSHUAIB1,
		  hIconSHIR,hIconSHIB,hIconSHIR1,hIconSHIB1,
		  hIconXIANGR,hIconXIANGB,hIconXIANGR1,hIconXIANGB1,
          hIconJUR,hIconJUB,hIconJUR1,hIconJUB1,
          hIconMAR,hIconMAB,hIconMAR1,hIconMAB1,
          hIconPAOR,hIconPAOB,hIconPAOR1,hIconPAOB1,
		  hIconICONR,hIconICONB,
		  hIconRED1,hIconBLACK1,
		  hIconMID1,hIconMID2,hIconMID3,hIconMID4;
    CBitmap bitmapBINGR, bitmapBINGB,bitmapBINGR1, bitmapBINGB1,
		    bitmapSHUAIR,bitmapSHUAIB,bitmapSHUAIR1,bitmapSHUAIB1,
		    bitmapSHIR,bitmapSHIB,bitmapSHIR1,bitmapSHIB1,
		    bitmapXIANGR,bitmapXIANGB,bitmapXIANGR1,bitmapXIANGB1,
            bitmapJUR,bitmapJUB,bitmapJUR1,bitmapJUB1,
            bitmapMAR,bitmapMAB,bitmapMAR1,bitmapMAB1,
            bitmapPAOR,bitmapPAOB,bitmapPAOR1,bitmapPAOB1,
			bitmapICONR,bitmapICONB,
			bitmapRED1,bitmapBLACK1,
			bitmapMID1,bitmapMID2,bitmapMID3,bitmapMID4;
    CDC memDCBINGR, memDCBINGB,memDCBINGR1, memDCBINGB1,
	    memDCSHUAIR,memDCSHUAIB,memDCSHUAIR1,memDCSHUAIB1,
	    memDCSHIR,memDCSHIB,memDCSHIR1,memDCSHIB1,
		memDCXIANGR,memDCXIANGB,memDCXIANGR1,memDCXIANGB1,
        memDCJUR,memDCJUB,memDCJUR1,memDCJUB1,
        memDCMAR,memDCMAB,memDCMAR1,memDCMAB1,
        memDCPAOR,memDCPAOB,memDCPAOR1,memDCPAOB1,
		memDCICONR,memDCICONB,
		memDCRED1,memDCBLACK1,
		memDCMID1,memDCMID2,memDCMID3,memDCMID4;
	hIconICONR = AfxGetApp()->LoadIcon(IDI_ICONR); 
	hIconICONB = AfxGetApp()->LoadIcon(IDI_ICONB); 
    hIconBINGR = AfxGetApp()->LoadIcon(IDI_BINGR); 
    hIconBINGB = AfxGetApp()->LoadIcon(IDI_BINGB); 
	hIconBINGR1 = AfxGetApp()->LoadIcon(IDI_BINGR1); 
    hIconBINGB1 = AfxGetApp()->LoadIcon(IDI_BINGB1);
	hIconSHUAIR = AfxGetApp()->LoadIcon(IDI_SHUAIR); 
    hIconSHUAIB = AfxGetApp()->LoadIcon(IDI_SHUAIB); 
	hIconSHUAIR1 = AfxGetApp()->LoadIcon(IDI_SHUAIR1); 
    hIconSHUAIB1 = AfxGetApp()->LoadIcon(IDI_SHUAIB1);
    hIconSHIR = AfxGetApp()->LoadIcon(IDI_SHIR); 
    hIconSHIB = AfxGetApp()->LoadIcon(IDI_SHIB); 
	hIconSHIR1 = AfxGetApp()->LoadIcon(IDI_SHIR1); 
    hIconSHIB1 = AfxGetApp()->LoadIcon(IDI_SHIB1);
    hIconXIANGR = AfxGetApp()->LoadIcon(IDI_XIANGR); 
    hIconXIANGB = AfxGetApp()->LoadIcon(IDI_XIANGB); 
	hIconXIANGR1 = AfxGetApp()->LoadIcon(IDI_XIANGR1); 
    hIconXIANGB1 = AfxGetApp()->LoadIcon(IDI_XIANGB1);
    hIconMAR = AfxGetApp()->LoadIcon(IDI_MAR); 
    hIconMAB = AfxGetApp()->LoadIcon(IDI_MAB); 
	hIconMAR1 = AfxGetApp()->LoadIcon(IDI_MAR1); 
    hIconMAB1 = AfxGetApp()->LoadIcon(IDI_MAB1);
    hIconJUR = AfxGetApp()->LoadIcon(IDI_JUR); 
    hIconJUB = AfxGetApp()->LoadIcon(IDI_JUB); 
	hIconJUR1 = AfxGetApp()->LoadIcon(IDI_JUR1); 
    hIconJUB1 = AfxGetApp()->LoadIcon(IDI_JUB1);
    hIconPAOR = AfxGetApp()->LoadIcon(IDI_PAOR); 
    hIconPAOB = AfxGetApp()->LoadIcon(IDI_PAOB); 
	hIconPAOR1 = AfxGetApp()->LoadIcon(IDI_PAOR1); 
    hIconPAOB1 = AfxGetApp()->LoadIcon(IDI_PAOB1);
	hIconRED1 = AfxGetApp()->LoadIcon(IDI_RED1); 
	hIconBLACK1 = AfxGetApp()->LoadIcon(IDI_BLACK1);
	hIconMID1 = AfxGetApp()->LoadIcon(IDI_MID1); 
	hIconMID2 = AfxGetApp()->LoadIcon(IDI_MID2); 
	hIconMID3 = AfxGetApp()->LoadIcon(IDI_MID3); 
	hIconMID4 = AfxGetApp()->LoadIcon(IDI_MID4); 
    memDCBINGR.CreateCompatibleDC(pDC);
    memDCBINGB.CreateCompatibleDC(pDC);
	memDCBINGR1.CreateCompatibleDC(pDC);
    memDCBINGB1.CreateCompatibleDC(pDC);
    memDCSHUAIR.CreateCompatibleDC(pDC);
    memDCSHUAIB.CreateCompatibleDC(pDC);
    memDCSHUAIR1.CreateCompatibleDC(pDC);
    memDCSHUAIB1.CreateCompatibleDC(pDC);
    memDCSHIR.CreateCompatibleDC(pDC);
    memDCSHIB.CreateCompatibleDC(pDC);
    memDCSHIR1.CreateCompatibleDC(pDC);
    memDCSHIB1.CreateCompatibleDC(pDC);
    memDCXIANGR.CreateCompatibleDC(pDC);
    memDCXIANGB.CreateCompatibleDC(pDC);
    memDCXIANGR1.CreateCompatibleDC(pDC);
    memDCXIANGB1.CreateCompatibleDC(pDC);
    memDCMAR.CreateCompatibleDC(pDC);
    memDCMAB.CreateCompatibleDC(pDC);
    memDCMAR1.CreateCompatibleDC(pDC);
    memDCMAB1.CreateCompatibleDC(pDC);
    memDCJUR.CreateCompatibleDC(pDC);
    memDCJUB.CreateCompatibleDC(pDC);
    memDCJUR1.CreateCompatibleDC(pDC);
    memDCJUB1.CreateCompatibleDC(pDC);
    memDCPAOR.CreateCompatibleDC(pDC);
    memDCPAOB.CreateCompatibleDC(pDC);
    memDCPAOR1.CreateCompatibleDC(pDC);
    memDCPAOB1.CreateCompatibleDC(pDC);
	memDCICONR.CreateCompatibleDC(pDC);
    memDCICONB.CreateCompatibleDC(pDC);
	memDCRED1.CreateCompatibleDC(pDC);
    memDCBLACK1.CreateCompatibleDC(pDC);
	memDCMID1.CreateCompatibleDC(pDC);
	memDCMID2.CreateCompatibleDC(pDC);
	memDCMID3.CreateCompatibleDC(pDC);
	memDCMID4.CreateCompatibleDC(pDC);
    ICONINFO iconInfo;
    GetIconInfo(hIconBINGB, &iconInfo);
    bitmapBINGB.CreateCompatibleBitmap(pDC, r * 2, r * 2);
    memDCBINGB.SelectObject(&bitmapBINGB);
	DrawIconEx(memDCBINGB, 0, 0, hIconBINGB, r * 2, r * 2, 0, NULL, DI_NORMAL);
    GetIconInfo(hIconBINGB1, &iconInfo);
    bitmapBINGB1.CreateCompatibleBitmap(pDC, r * 2, r * 2);
    memDCBINGB1.SelectObject(&bitmapBINGB1);
    DrawIconEx(memDCBINGB1, 0, 0, hIconBINGB1, r * 2, r * 2, 0, NULL, DI_NORMAL);
    GetIconInfo(hIconBINGR, &iconInfo);
    bitmapBINGR.CreateCompatibleBitmap(pDC, r * 2, r * 2);
    memDCBINGR.SelectObject(&bitmapBINGR);
	DrawIconEx(memDCBINGR, 0, 0, hIconBINGR, r * 2, r * 2, 0, NULL, DI_NORMAL);
    GetIconInfo(hIconBINGR1, &iconInfo);
    bitmapBINGR1.CreateCompatibleBitmap(pDC, r * 2, r * 2);
    memDCBINGR1.SelectObject(&bitmapBINGR1);
	DrawIconEx(memDCBINGR1, 0, 0, hIconBINGR1, r * 2, r * 2, 0, NULL, DI_NORMAL);
    GetIconInfo(hIconSHUAIB, &iconInfo);
    bitmapSHUAIB.CreateCompatibleBitmap(pDC, r * 2, r * 2);
    memDCSHUAIB.SelectObject(&bitmapSHUAIB);
	DrawIconEx(memDCSHUAIB, 0, 0, hIconSHUAIB, r * 2, r * 2, 0, NULL, DI_NORMAL);
    GetIconInfo(hIconSHUAIB1, &iconInfo);
    bitmapSHUAIB1.CreateCompatibleBitmap(pDC, r * 2, r * 2);
    memDCSHUAIB1.SelectObject(&bitmapSHUAIB1);
    DrawIconEx(memDCSHUAIB1, 0, 0, hIconSHUAIB1, r * 2, r * 2, 0, NULL, DI_NORMAL);
    GetIconInfo(hIconSHUAIR, &iconInfo);
    bitmapSHUAIR.CreateCompatibleBitmap(pDC, r * 2, r * 2);
    memDCSHUAIR.SelectObject(&bitmapSHUAIR);
	DrawIconEx(memDCSHUAIR, 0, 0, hIconSHUAIR, r * 2, r * 2, 0, NULL, DI_NORMAL);
    GetIconInfo(hIconSHUAIR1, &iconInfo);
    bitmapSHUAIR1.CreateCompatibleBitmap(pDC, r * 2, r * 2);
    memDCSHUAIR1.SelectObject(&bitmapSHUAIR1);
	DrawIconEx(memDCSHUAIR1, 0, 0, hIconSHUAIR1, r * 2, r * 2, 0, NULL, DI_NORMAL);
    GetIconInfo(hIconSHIB, &iconInfo);
    bitmapSHIB.CreateCompatibleBitmap(pDC, r * 2, r * 2);
    memDCSHIB.SelectObject(&bitmapSHIB);
	DrawIconEx(memDCSHIB, 0, 0, hIconSHIB, r * 2, r * 2, 0, NULL, DI_NORMAL);
    GetIconInfo(hIconSHIB1, &iconInfo);
    bitmapSHIB1.CreateCompatibleBitmap(pDC, r * 2, r * 2);
    memDCSHIB1.SelectObject(&bitmapSHIB1);
    DrawIconEx(memDCSHIB1, 0, 0, hIconSHIB1, r * 2, r * 2, 0, NULL, DI_NORMAL);
    GetIconInfo(hIconSHIR, &iconInfo);
    bitmapSHIR.CreateCompatibleBitmap(pDC, r * 2, r * 2);
    memDCSHIR.SelectObject(&bitmapSHIR);
	DrawIconEx(memDCSHIR, 0, 0, hIconSHIR, r * 2, r * 2, 0, NULL, DI_NORMAL);
    GetIconInfo(hIconSHIR1, &iconInfo);
    bitmapSHIR1.CreateCompatibleBitmap(pDC, r * 2, r * 2);
    memDCSHIR1.SelectObject(&bitmapSHIR1);
	DrawIconEx(memDCSHIR1, 0, 0, hIconSHIR1, r * 2, r * 2, 0, NULL, DI_NORMAL);
    GetIconInfo(hIconXIANGB, &iconInfo);
    bitmapXIANGB.CreateCompatibleBitmap(pDC, r * 2, r * 2);
    memDCXIANGB.SelectObject(&bitmapXIANGB);
	DrawIconEx(memDCXIANGB, 0, 0, hIconXIANGB, r * 2, r * 2, 0, NULL, DI_NORMAL);
    GetIconInfo(hIconXIANGB1, &iconInfo);
    bitmapXIANGB1.CreateCompatibleBitmap(pDC, r * 2, r * 2);
    memDCXIANGB1.SelectObject(&bitmapXIANGB1);
    DrawIconEx(memDCXIANGB1, 0, 0, hIconXIANGB1, r * 2, r * 2, 0, NULL, DI_NORMAL);
    GetIconInfo(hIconXIANGR, &iconInfo);
    bitmapXIANGR.CreateCompatibleBitmap(pDC, r * 2, r * 2);
    memDCXIANGR.SelectObject(&bitmapXIANGR);
	DrawIconEx(memDCXIANGR, 0, 0, hIconXIANGR, r * 2, r * 2, 0, NULL, DI_NORMAL);
    GetIconInfo(hIconXIANGR1, &iconInfo);
    bitmapXIANGR1.CreateCompatibleBitmap(pDC, r * 2, r * 2);
    memDCXIANGR1.SelectObject(&bitmapXIANGR1);
	DrawIconEx(memDCXIANGR1, 0, 0, hIconXIANGR1, r * 2, r * 2, 0, NULL, DI_NORMAL);
    GetIconInfo(hIconMAB, &iconInfo);
    bitmapMAB.CreateCompatibleBitmap(pDC, r * 2, r * 2);
    memDCMAB.SelectObject(&bitmapMAB);
	DrawIconEx(memDCMAB, 0, 0, hIconMAB, r * 2, r * 2, 0, NULL, DI_NORMAL);
    GetIconInfo(hIconMAB1, &iconInfo);
    bitmapMAB1.CreateCompatibleBitmap(pDC, r * 2, r * 2);
    memDCMAB1.SelectObject(&bitmapMAB1);
    DrawIconEx(memDCMAB1, 0, 0, hIconMAB1, r * 2, r * 2, 0, NULL, DI_NORMAL);
    GetIconInfo(hIconMAR, &iconInfo);
    bitmapMAR.CreateCompatibleBitmap(pDC, r * 2, r * 2);
    memDCMAR.SelectObject(&bitmapMAR);
	DrawIconEx(memDCMAR, 0, 0, hIconMAR, r * 2, r * 2, 0, NULL, DI_NORMAL);
    GetIconInfo(hIconMAR1, &iconInfo);
    bitmapMAR1.CreateCompatibleBitmap(pDC, r * 2, r * 2);
    memDCMAR1.SelectObject(&bitmapMAR1);
	DrawIconEx(memDCMAR1, 0, 0, hIconMAR1, r * 2, r * 2, 0, NULL, DI_NORMAL);
    GetIconInfo(hIconJUB, &iconInfo);
    bitmapJUB.CreateCompatibleBitmap(pDC, r * 2, r * 2);
    memDCJUB.SelectObject(&bitmapJUB);
	DrawIconEx(memDCJUB, 0, 0, hIconJUB, r * 2, r * 2, 0, NULL, DI_NORMAL);
    GetIconInfo(hIconJUB1, &iconInfo);
    bitmapJUB1.CreateCompatibleBitmap(pDC, r * 2, r * 2);
    memDCJUB1.SelectObject(&bitmapJUB1);
    DrawIconEx(memDCJUB1, 0, 0, hIconJUB1, r * 2, r * 2, 0, NULL, DI_NORMAL);
    GetIconInfo(hIconJUR, &iconInfo);
    bitmapJUR.CreateCompatibleBitmap(pDC, r * 2, r * 2);
    memDCJUR.SelectObject(&bitmapJUR);
	DrawIconEx(memDCJUR, 0, 0, hIconJUR, r * 2, r * 2, 0, NULL, DI_NORMAL);
    GetIconInfo(hIconJUR1, &iconInfo);
    bitmapJUR1.CreateCompatibleBitmap(pDC, r * 2, r * 2);
    memDCJUR1.SelectObject(&bitmapJUR1);
	DrawIconEx(memDCJUR1, 0, 0, hIconJUR1, r * 2, r * 2, 0, NULL, DI_NORMAL);
    GetIconInfo(hIconPAOB, &iconInfo);
    bitmapPAOB.CreateCompatibleBitmap(pDC, r * 2, r * 2);
    memDCPAOB.SelectObject(&bitmapPAOB);
	DrawIconEx(memDCPAOB, 0, 0, hIconPAOB, r * 2, r * 2, 0, NULL, DI_NORMAL);
    GetIconInfo(hIconPAOB1, &iconInfo);
    bitmapPAOB1.CreateCompatibleBitmap(pDC, r * 2, r * 2);
    memDCPAOB1.SelectObject(&bitmapPAOB1);
    DrawIconEx(memDCPAOB1, 0, 0, hIconPAOB1, r * 2, r * 2, 0, NULL, DI_NORMAL);
    GetIconInfo(hIconPAOR, &iconInfo);
    bitmapPAOR.CreateCompatibleBitmap(pDC, r * 2, r * 2);
    memDCPAOR.SelectObject(&bitmapPAOR);
	DrawIconEx(memDCPAOR, 0, 0, hIconPAOR, r * 2, r * 2, 0, NULL, DI_NORMAL);
    GetIconInfo(hIconPAOR1, &iconInfo);
    bitmapPAOR1.CreateCompatibleBitmap(pDC, r * 2, r * 2);
    memDCPAOR1.SelectObject(&bitmapPAOR1);
	DrawIconEx(memDCPAOR1, 0, 0, hIconPAOR1, r * 2, r * 2, 0, NULL, DI_NORMAL);
	GetIconInfo(hIconICONB, &iconInfo);
    bitmapICONB.CreateCompatibleBitmap(pDC, r * 2, r * 2);
    memDCICONB.SelectObject(&bitmapICONB);
    DrawIconEx(memDCICONB, 0, 0, hIconICONB, r * 2, r * 2, 0, NULL, DI_NORMAL);
	GetIconInfo(hIconICONR, &iconInfo);
    bitmapICONR.CreateCompatibleBitmap(pDC, r * 2, r * 2);
    memDCICONR.SelectObject(&bitmapICONR);
    DrawIconEx(memDCICONR, 0, 0, hIconICONR, r * 2, r * 2, 0, NULL, DI_NORMAL);
	GetIconInfo(hIconRED1, &iconInfo);
    bitmapRED1.CreateCompatibleBitmap(pDC, r * 2, r * 2);
    memDCRED1.SelectObject(&bitmapRED1);
    DrawIconEx(memDCRED1, 0, 0, hIconRED1, r * 2, r * 2, 0, NULL, DI_NORMAL);
	GetIconInfo(hIconBLACK1, &iconInfo);
    bitmapBLACK1.CreateCompatibleBitmap(pDC, r * 2, r * 2);
    memDCBLACK1.SelectObject(&bitmapBLACK1);
    DrawIconEx(memDCBLACK1, 0, 0, hIconBLACK1, r * 2, r * 2, 0, NULL, DI_NORMAL);
	GetIconInfo(hIconMID1, &iconInfo);
    bitmapMID1.CreateCompatibleBitmap(pDC, r * 2, r * 2);
    memDCMID1.SelectObject(&bitmapMID1);
    DrawIconEx(memDCMID1, 0, 0, hIconMID1, r * 2, r * 2, 0, NULL, DI_NORMAL);
	GetIconInfo(hIconMID2, &iconInfo);
    bitmapMID2.CreateCompatibleBitmap(pDC, r * 2, r * 2);
    memDCMID2.SelectObject(&bitmapMID2);
    DrawIconEx(memDCMID2, 0, 0, hIconMID2, r * 2, r * 2, 0, NULL, DI_NORMAL);
	GetIconInfo(hIconMID3, &iconInfo);
    bitmapMID3.CreateCompatibleBitmap(pDC, r * 2, r * 2);
    memDCMID3.SelectObject(&bitmapMID3);
    DrawIconEx(memDCMID3, 0, 0, hIconMID3, r * 2, r * 2, 0, NULL, DI_NORMAL);
	GetIconInfo(hIconMID4, &iconInfo);
    bitmapMID4.CreateCompatibleBitmap(pDC, r * 2, r * 2);
    memDCMID4.SelectObject(&bitmapMID4);
    DrawIconEx(memDCMID4, 0, 0, hIconMID4, r * 2, r * 2, 0, NULL, DI_NORMAL);
	//-------------------------------------------------------------------
	if(m_Color == 2)
	pDC->StretchBlt(400, 318-160, r * 2 * 1.5, r * 2 * 1.5, &memDCBLACK1, 0, 0, r * 2, r * 2, SRCCOPY);
	else
	pDC->StretchBlt(400+710, 318+180, r * 2 * 1.5, r * 2 * 1.5, &memDCRED1, 0, 0, r * 2, r * 2, SRCCOPY);//指示现在谁下棋
	pDC->BitBlt(475+150, 345, r * 2, r * 2, &memDCMID1, 0, 0, SRCCOPY);
	pDC->BitBlt(525+150, 345, r * 2, r * 2, &memDCMID2, 0, 0, SRCCOPY);
	pDC->BitBlt(710+150, 345, r * 2, r * 2, &memDCMID3, 0, 0, SRCCOPY);
	pDC->BitBlt(760+150, 345, r * 2, r * 2, &memDCMID4, 0, 0, SRCCOPY);//楚河汉界
	//-------------------------------------------------------------------
	for (i = 0; i < 9; i++)
	{
		for (j = 0; j < 10; j++)
		{
			if (m_Qp[i][j] != 0) //如果棋盘上有子
			{
				if (m_Qp[i][j] == 1) //红兵
				{
			
					x = ydx + i * lenbl;
					y = ydy + j * lenbl;
					pDC->BitBlt(x - r, y - r, r * 2, r * 2, &memDCBINGR, 0, 0, SRCCOPY);
				}
				else if (m_Qp[i][j] == 2) //红帅
				{
					x = ydx + i * lenbl;
					y = ydy + j * lenbl;
					pDC->BitBlt(x - r, y - r, r * 2, r * 2, &memDCSHUAIR, 0, 0, SRCCOPY);
				}
				else if (m_Qp[i][j] == 3) //红士
				{
					x = ydx + i * lenbl;
					y = ydy + j * lenbl;
					pDC->BitBlt(x - r, y - r, r * 2, r * 2, &memDCSHIR, 0, 0, SRCCOPY);
				}
				else if (m_Qp[i][j] == 4) //红相
				{
					x = ydx + i * lenbl;
					y = ydy + j * lenbl;
					pDC->BitBlt(x - r, y - r, r * 2, r * 2, &memDCXIANGR, 0, 0, SRCCOPY);
				}
				else if (m_Qp[i][j] == 5) //红马
				{
					x = ydx + i * lenbl;
					y = ydy + j * lenbl;
					pDC->BitBlt(x - r, y - r, r * 2, r * 2, &memDCMAR, 0, 0, SRCCOPY);
				}
				else if (m_Qp[i][j] == 6) //红车
				{
					x = ydx + i * lenbl;
					y = ydy + j * lenbl;
					pDC->BitBlt(x - r, y - r, r * 2, r * 2, &memDCJUR, 0, 0, SRCCOPY);
				}
				else if (m_Qp[i][j] == 7) //红炮
				{
					x = ydx + i * lenbl;
					y = ydy + j * lenbl;
					pDC->BitBlt(x - r, y - r, r * 2, r * 2, &memDCPAOR, 0, 0, SRCCOPY);
				}
				else if (m_Qp[i][j] == 8) //黑兵
				{
			
					x = ydx + i * lenbl;
					y = ydy + j * lenbl;
					pDC->BitBlt(x - r, y - r, r * 2, r * 2, &memDCBINGB, 0, 0, SRCCOPY);
				}
				else if (m_Qp[i][j] == 9) //黑帅
				{
					x = ydx + i * lenbl;
					y = ydy + j * lenbl;
					pDC->BitBlt(x - r, y - r, r * 2, r * 2, &memDCSHUAIB, 0, 0, SRCCOPY);
				}
				else if (m_Qp[i][j] == 10) //黑士
				{
					x = ydx + i * lenbl;
					y = ydy + j * lenbl;
					pDC->BitBlt(x - r, y - r, r * 2, r * 2, &memDCSHIB, 0, 0, SRCCOPY);
				}
				else if (m_Qp[i][j] == 11) //黑相
				{
					x = ydx + i * lenbl;
					y = ydy + j * lenbl;
					pDC->BitBlt(x - r, y - r, r * 2, r * 2, &memDCXIANGB, 0, 0, SRCCOPY);
				}
				else if (m_Qp[i][j] == 12) //黑马
				{
					x = ydx + i * lenbl;
					y = ydy + j * lenbl;
					pDC->BitBlt(x - r, y - r, r * 2, r * 2, &memDCMAB, 0, 0, SRCCOPY);
				}
				else if (m_Qp[i][j] == 13) //黑车
				{
					x = ydx + i * lenbl;
					y = ydy + j * lenbl;
					pDC->BitBlt(x - r, y - r, r * 2, r * 2, &memDCJUB, 0, 0, SRCCOPY);
				}
				else if (m_Qp[i][j] == 14) //黑炮
				{
					x = ydx + i * lenbl;
					y = ydy + j * lenbl;
					pDC->BitBlt(x - r, y - r, r * 2, r * 2, &memDCPAOB, 0, 0, SRCCOPY);
				}
				else if (m_Qp[i][j] == 15) //红兵1
				{
			
					x = ydx + i * lenbl;
					y = ydy + j * lenbl;
					pDC->BitBlt(x - r, y - r, r * 2, r * 2, &memDCBINGR1, 0, 0, SRCCOPY);
				}
				else if (m_Qp[i][j] == 16) //红帅1
				{
					x = ydx + i * lenbl;
					y = ydy + j * lenbl;
					pDC->BitBlt(x - r, y - r, r * 2, r * 2, &memDCSHUAIR1, 0, 0, SRCCOPY);
				}
				else if (m_Qp[i][j] == 17) //红士1
				{
					x = ydx + i * lenbl;
					y = ydy + j * lenbl;
					pDC->BitBlt(x - r, y - r, r * 2, r * 2, &memDCSHIR1, 0, 0, SRCCOPY);
				}
				else if (m_Qp[i][j] == 18) //红相1
				{
					x = ydx + i * lenbl;
					y = ydy + j * lenbl;
					pDC->BitBlt(x - r, y - r, r * 2, r * 2, &memDCXIANGR1, 0, 0, SRCCOPY);
				}
				else if (m_Qp[i][j] == 19) //红马1
				{
					x = ydx + i * lenbl;
					y = ydy + j * lenbl;
					pDC->BitBlt(x - r, y - r, r * 2, r * 2, &memDCMAR1, 0, 0, SRCCOPY);
				}
				else if (m_Qp[i][j] == 20) //红车1
				{
					x = ydx + i * lenbl;
					y = ydy + j * lenbl;
					pDC->BitBlt(x - r, y - r, r * 2, r * 2, &memDCJUR1, 0, 0, SRCCOPY);
				}
				else if (m_Qp[i][j] == 21) //红炮1
				{
					x = ydx + i * lenbl;
					y = ydy + j * lenbl;
					pDC->BitBlt(x - r, y - r, r * 2, r * 2, &memDCPAOR1, 0, 0, SRCCOPY);
				}
				else if (m_Qp[i][j] == 22) //黑兵1
				{
			
					x = ydx + i * lenbl;
					y = ydy + j * lenbl;
					pDC->BitBlt(x - r, y - r, r * 2, r * 2, &memDCBINGB1, 0, 0, SRCCOPY);
				}
				else if (m_Qp[i][j] == 23) //黑帅1
				{
					x = ydx + i * lenbl;
					y = ydy + j * lenbl;
					pDC->BitBlt(x - r, y - r, r * 2, r * 2, &memDCSHUAIB1, 0, 0, SRCCOPY);
				}
				else if (m_Qp[i][j] == 24) //黑士1
				{
					x = ydx + i * lenbl;
					y = ydy + j * lenbl;
					pDC->BitBlt(x - r, y - r, r * 2, r * 2, &memDCSHIB1, 0, 0, SRCCOPY);
				}
				else if (m_Qp[i][j] == 25) //黑相1
				{
					x = ydx + i * lenbl;
					y = ydy + j * lenbl;
					pDC->BitBlt(x - r, y - r, r * 2, r * 2, &memDCXIANGB1, 0, 0, SRCCOPY);
				}
				else if (m_Qp[i][j] == 26) //黑马1
				{
					x = ydx + i * lenbl;
					y = ydy + j * lenbl;
					pDC->BitBlt(x - r, y - r, r * 2, r * 2, &memDCMAB1, 0, 0, SRCCOPY);
				}
				else if (m_Qp[i][j] == 27) //黑车1
				{
					x = ydx + i * lenbl;
					y = ydy + j * lenbl;
					pDC->BitBlt(x - r, y - r, r * 2, r * 2, &memDCJUB1, 0, 0, SRCCOPY);
				}
				else if (m_Qp[i][j] == 28) //黑炮1
				{
					x = ydx + i * lenbl;
					y = ydy + j * lenbl;
					pDC->BitBlt(x - r, y - r, r * 2, r * 2, &memDCPAOB1, 0, 0, SRCCOPY);
				}
				else if (m_Qp[i][j] == 50) //红框选
				{
					x = ydx + i * lenbl;
					y = ydy + j * lenbl;
					pDC->BitBlt(x - r, y - r, r * 2, r * 2, &memDCICONR, 0, 0, SRCCOPY);
				}
				else if (m_Qp[i][j] == 51) //黑框选
				{
					x = ydx + i * lenbl;
					y = ydy + j * lenbl;
					pDC->BitBlt(x - r, y - r, r * 2, r * 2, &memDCICONB, 0, 0, SRCCOPY);
				}
			}
		}
	}
    bitmapBINGR.DeleteObject();
    bitmapBINGB.DeleteObject();
	bitmapBINGR1.DeleteObject();
    bitmapBINGB1.DeleteObject();
    DestroyIcon(hIconBINGR);
    DestroyIcon(hIconBINGB);
	DestroyIcon(hIconBINGR1);
    DestroyIcon(hIconBINGB1);
    bitmapSHUAIR.DeleteObject();
    bitmapSHUAIB.DeleteObject();
    bitmapSHUAIR1.DeleteObject();
    bitmapSHUAIB1.DeleteObject();
    DestroyIcon(hIconSHUAIR);
    DestroyIcon(hIconSHUAIB);
    DestroyIcon(hIconSHUAIR1);
    DestroyIcon(hIconSHUAIB1);
    bitmapSHIR.DeleteObject();
    bitmapSHIB.DeleteObject();
    bitmapSHIR1.DeleteObject();
    bitmapSHIB1.DeleteObject();
    DestroyIcon(hIconSHIR);
    DestroyIcon(hIconSHIB);
    DestroyIcon(hIconSHIR1);
    DestroyIcon(hIconSHIB1);
    bitmapXIANGR.DeleteObject();
    bitmapXIANGB.DeleteObject();
    bitmapXIANGR1.DeleteObject();
    bitmapXIANGB1.DeleteObject();
    DestroyIcon(hIconXIANGR);
    DestroyIcon(hIconXIANGB);
    DestroyIcon(hIconXIANGR1);
    DestroyIcon(hIconXIANGB1);
    bitmapJUR.DeleteObject();
    bitmapJUB.DeleteObject();
    bitmapJUR1.DeleteObject();
    bitmapJUB1.DeleteObject();
    DestroyIcon(hIconJUR);
    DestroyIcon(hIconJUB);
    DestroyIcon(hIconJUR1);
    DestroyIcon(hIconJUB1);
    bitmapPAOR.DeleteObject();
    bitmapPAOB.DeleteObject();
    bitmapPAOR1.DeleteObject();
    bitmapPAOB1.DeleteObject();
    DestroyIcon(hIconPAOR);
    DestroyIcon(hIconPAOB);
    DestroyIcon(hIconPAOR1);
    DestroyIcon(hIconPAOB1);
    bitmapMAR.DeleteObject();
    bitmapMAB.DeleteObject();
    bitmapMAR1.DeleteObject();
    bitmapMAB1.DeleteObject();
    DestroyIcon(hIconMAR);
    DestroyIcon(hIconMAB);
    DestroyIcon(hIconMAR1);
    DestroyIcon(hIconMAB1);
	bitmapICONR.DeleteObject();
    bitmapICONB.DeleteObject();
    DestroyIcon(hIconICONR);
    DestroyIcon(hIconICONB);
	bitmapRED1.DeleteObject();
    bitmapBLACK1.DeleteObject();
    DestroyIcon(hIconRED1);
    DestroyIcon(hIconBLACK1);
	bitmapMID1.DeleteObject();
    bitmapMID2.DeleteObject();
    bitmapMID3.DeleteObject();
    bitmapMID4.DeleteObject();
    DestroyIcon(hIconMID1);
    DestroyIcon(hIconMID2);
    DestroyIcon(hIconMID3);
    DestroyIcon(hIconMID4);
}

效果图

接下来就是整个程序的核心部分,下棋

我设计的逻辑是当你点击棋子时,检测所有可下的点,用框显示出来,到这一步也会将当前的棋盘信息保存进m_Qp1,用于悔棋,当你再次点击框的时候,棋子换位,完成下棋的动作,轮到对方下。每一步下完都会执行panduan()函数,用于检测输赢。

效果如下图,我们点击红方右侧的“马”,马可走的格子会出现框,再次点击框,完成一次下棋动作。

若行动路径上有对方的棋子,也会出现框,点击框,吃掉对方棋子。

接下来开始写代码,首先是de()函数,作用是当你点击棋子出现框后,点击其他空白处或其他棋子,可以让原本出现的框消失。

void CXiangQi::de()
{
    for(int i=0;i<9;i++)
	{
        for(int j=0;j<10;j++)
		{
			if(m_Qp[i][j]==50||m_Qp[i][j]==51)
            m_Qp[i][j]=0;
			else if(m_Qp[i][j]>=15&&m_Qp[i][j]<=28)
            m_Qp[i][j]-=14;
		}
	}
}

panduan()函数,就是看双方的将和帅还在不在场上。

void CXiangQi::panduan()//获胜判断
{
	int hei=1;
	int hong=1;
	for(int i=0;i<9;i++)
	{
        for(int j=0;j<10;j++)
		{
			if(m_Qp[i][j]==2||m_Qp[i][j]==16)
			{
				hong--;
			}
			if(m_Qp[i][j]==9||m_Qp[i][j]==23)
			{
				hei--;
			}
		}
	}
	if(hei==1)
		AfxMessageBox("红方获胜!");
	if(hong==1)
		AfxMessageBox("黑方获胜!");
}

XiaQi()所有棋子的具体运行逻辑,内容太多就不细讲了,也可以试着自己写写。

void CXiangQi::XiaQi(CPoint pt)
{
    if (pt.x > (ydx - lenbl/3) && pt.x < (ydx + 18 * lenbl + (lenbl/3)) &&\
		pt.y > (ydy - lenbl/3) && pt.y < (ydy + 18 * lenbl + (lenbl/3)))
	//注:lenbl/3是棋子半径,当棋子边缘碰到棋盘线时,也默认在棋盘内。
	{
		m_H = (pt.x - ydx + lenbl/4)/lenbl; //用当前点击位置减去原点距离,加上1/4小格的结果,整除小方格,确定在哪一行
		m_L = (pt.y - ydy + lenbl/4)/lenbl; //获取落子位置
	}
	if (m_Qp[m_H][m_L] == 0 )
	{
		de();
	}
	else if (m_Qp[m_H][m_L] == 50||m_Qp[m_H][m_L] == 51 )
	{
		for(int i=0;i<9;i++)
			for(int j=0;j<10;j++)
			{
				m_Qp1[i][j]=m_Qp[i][j];
				if(m_Qp1[i][j]==50||m_Qp1[i][j]==51)
					m_Qp1[i][j]=0;
			}

		m_Qp[m_H][m_L]=m_Qp[m_H1][m_L1];
		m_Qp[m_H1][m_L1]=0;
		
		de();
		
		if(m_Color==1)
			m_Color=2;
		else
			m_Color=1;
	}
	else if(m_Color==1&&m_Qp[m_H][m_L]>=22&&m_Qp[m_H][m_L]<=28)
	{
		for(int i=0;i<9;i++)
			for(int j=0;j<10;j++)
			{
				m_Qp1[i][j]=m_Qp[i][j];
				if(m_Qp1[i][j]==50||m_Qp1[i][j]==51)
					m_Qp1[i][j]=0;
			}
        m_Qp[m_H][m_L]=m_Qp[m_H1][m_L1];
		m_Qp[m_H1][m_L1]=0;
		de();
        m_Color=2;
	}
	else if(m_Color==2&&m_Qp[m_H][m_L]>=15&&m_Qp[m_H][m_L]<=21)
	{
		for(int i=0;i<9;i++)
			for(int j=0;j<10;j++)
			{
				m_Qp1[i][j]=m_Qp[i][j];
				if(m_Qp1[i][j]==50||m_Qp1[i][j]==51)
					m_Qp1[i][j]=0;
			}
        m_Qp[m_H][m_L]=m_Qp[m_H1][m_L1];
		m_Qp[m_H1][m_L1]=0;
		de();
        m_Color=1;
	}
	else if (m_Qp[m_H][m_L] == 1 &&m_Color==1) //兵
	{
		de();
		if(m_L==0)
		{
			if(m_Qp[m_H-1][m_L]==0)
            m_Qp[m_H-1][m_L] = 50;
			else if(m_Qp[m_H-1][m_L]>=8&&m_Qp[m_H-1][m_L]<=14)
			m_Qp[m_H-1][m_L]=m_Qp[m_H-1][m_L]+14;
			if(m_Qp[m_H+1][m_L]==0)
            m_Qp[m_H+1][m_L] = 50;
			else if(m_Qp[m_H+1][m_L]>=8&&m_Qp[m_H+1][m_L]<=14)
			m_Qp[m_H+1][m_L]+=14;
		}
		else if(m_L<=4)
		{
			if(m_Qp[m_H-1][m_L]==0)
            m_Qp[m_H-1][m_L] = 50;
			else if(m_Qp[m_H-1][m_L]>=8&&m_Qp[m_H-1][m_L]<=14)
            m_Qp[m_H-1][m_L] = m_Qp[m_H-1][m_L]+14;
			if(m_Qp[m_H+1][m_L]==0)
            m_Qp[m_H+1][m_L] = 50;
			else if(m_Qp[m_H+1][m_L]>=8&&m_Qp[m_H+1][m_L]<=14)
            m_Qp[m_H+1][m_L]+=14;
			if(m_Qp[m_H][m_L-1]==0)
			m_Qp[m_H][m_L-1] = 50;
			else if(m_Qp[m_H][m_L-1]>=8&&m_Qp[m_H][m_L-1]<=14)
			m_Qp[m_H][m_L-1]+=14;
		}
		else
		{   if(m_Qp[m_H][m_L-1]==0)
            m_Qp[m_H][m_L-1] = 50;
		    else if(m_Qp[m_H][m_L-1]>=8&&m_Qp[m_H][m_L-1]<=14)
            m_Qp[m_H][m_L-1]+=14;
		}
		m_H1=m_H;
		m_L1=m_L;
	}
	else if (m_Qp[m_H][m_L] == 8 && m_Color == 2) //落子位置没有棋子,并且是黑方下
	{
		de();
		if(m_L==10)
		{
			if(m_Qp[m_H-1][m_L]==0)
            m_Qp[m_H-1][m_L] = 51;
			else if(m_Qp[m_H-1][m_L]>=1&&m_Qp[m_H-1][m_L]<=7)
			m_Qp[m_H-1][m_L]=m_Qp[m_H-1][m_L]+14;
			if(m_Qp[m_H+1][m_L]==0)
            m_Qp[m_H+1][m_L] = 51;
			else if(m_Qp[m_H+1][m_L]>=1&&m_Qp[m_H+1][m_L]<=7)
			m_Qp[m_H+1][m_L]+=14;
		}
		else if(m_L>=5&&m_L<10)
		{
			if(m_Qp[m_H-1][m_L]==0)
            m_Qp[m_H-1][m_L] = 51;
			else if(m_Qp[m_H-1][m_L]>=1&&m_Qp[m_H-1][m_L]<=7)
            m_Qp[m_H-1][m_L] = m_Qp[m_H-1][m_L]+14;
			if(m_Qp[m_H+1][m_L]==0)
            m_Qp[m_H+1][m_L] = 51;
			else if(m_Qp[m_H+1][m_L]>=1&&m_Qp[m_H+1][m_L]<=7)
            m_Qp[m_H+1][m_L]+=14;
			if(m_Qp[m_H][m_L+1]==0)
			m_Qp[m_H][m_L+1] = 51;
			else if(m_Qp[m_H][m_L+1]>=1&&m_Qp[m_H][m_L+1]<=7)
			m_Qp[m_H][m_L+1]+=14;
		}
		else
		{   if(m_Qp[m_H][m_L+1]==0)
            m_Qp[m_H][m_L+1] = 51;
		    else if(m_Qp[m_H][m_L+1]>=1&&m_Qp[m_H][m_L+1]<=7)
            m_Qp[m_H][m_L+1]+=14;
		}
		m_H1=m_H;
		m_L1=m_L;
	}
	else if(m_Qp[m_H][m_L] == 7 && m_Color == 1)//炮
	{
		  de();
          int i=1;
          while(m_H+i<=8)
		  {
			  
			  if(m_Qp[m_H+i][m_L]>=8&&m_Qp[m_H+i][m_L]<=14||m_Qp[m_H+i][m_L]>=1&&m_Qp[m_H+i][m_L]<=7)
			  {
				  i++;
                  while(m_H+i<=8)
				  {
					  if(m_Qp[m_H+i][m_L]>=8&&m_Qp[m_H+i][m_L]<=14)
					  {
						  m_Qp[m_H+i][m_L]+=14;
						  break;
					  }
                      i++;
				  }
				  break;
			  }
			  else if(m_Qp[m_H+i][m_L]>=15&&m_Qp[m_H+i][m_L]<=28)
				  break;
              m_Qp[m_H+i][m_L]=50;
			  i++;
		  }
		  i=1;
          while(m_H-i>=0)
		  {
			  
			   if(m_Qp[m_H-i][m_L]>=8&&m_Qp[m_H-i][m_L]<=14||m_Qp[m_H-i][m_L]>=1&&m_Qp[m_H-i][m_L]<=7)
			  {
                  i++;
                  while(m_H-i>=0)
				  {
					  if(m_Qp[m_H-i][m_L]>=8&&m_Qp[m_H-i][m_L]<=14)
					  {
						  m_Qp[m_H-i][m_L]+=14;
						  break;
					  }
                      i++;
				  }
				  break;
			  }
			  else if(m_Qp[m_H-i][m_L]>=15&&m_Qp[m_H-i][m_L]<=28)
				  break;
              m_Qp[m_H-i][m_L]=50;
			  i++;
		  }
		  i=1;
          while(m_L+i<=9)
		  {
			  
			    if(m_Qp[m_H][m_L+i]>=8&&m_Qp[m_H][m_L+i]<=14||m_Qp[m_H][m_L+i]>=1&&m_Qp[m_H][m_L+i]<=7)
			  {
                  i++;
                  while(m_L+i<=9)
				  {
					  if(m_Qp[m_H][m_L+i]>=8&&m_Qp[m_H][m_L+i]<=14)
					  {
						  m_Qp[m_H][m_L+i]+=14;
						  break;
					  }
                      i++;
				  }
				  break;
			  }
			  else if(m_Qp[m_H][m_L+i]>=15&&m_Qp[m_H][m_L+i]<=28)
				  break;
              m_Qp[m_H][m_L+i]=50;
			  i++;
		  }
		  i=1;
          while(m_L-i>=0)
		  {
			   if(m_Qp[m_H][m_L-i]>=8&&m_Qp[m_H][m_L-i]<=14||m_Qp[m_H][m_L-i]>=1&&m_Qp[m_H][m_L-i]<=7)
			  {
                  i++;
                  while(m_L-i>=0)
				  {
					  if(m_Qp[m_H][m_L-i]>=8&&m_Qp[m_H][m_L-i]<=14)
					  {
						  m_Qp[m_H][m_L-i]+=14;
						  break;
					  }
                      i++;
				  }
				  break;
			  }
			  else if(m_Qp[m_H][m_L-i]>=15&&m_Qp[m_H][m_L-i]<=28)
				  break;
              m_Qp[m_H][m_L-i]=50;
			  i++;
		  }
		  m_H1=m_H;
		  m_L1=m_L;
	}
    else if(m_Qp[m_H][m_L] == 14 && m_Color == 2)
	{
        de();
          int i=1;
          while(m_H+i<=8)
		  {
			   if(m_Qp[m_H+i][m_L]>=1&&m_Qp[m_H+i][m_L]<=7||m_Qp[m_H+i][m_L]>=8&&m_Qp[m_H+i][m_L]<=14)
			  {
				  i++;
                  while(m_H+i<=8)
				  {
					  if(m_Qp[m_H+i][m_L]>=1&&m_Qp[m_H+i][m_L]<=7)
					  {
						  m_Qp[m_H+i][m_L]+=14;
						  break;
					  }
                      i++;
				  }
				  break;
			  }
			  else if(m_Qp[m_H+i][m_L]>=15&&m_Qp[m_H+i][m_L]<=28)
				  break;
              m_Qp[m_H+i][m_L]=51;
			  i++;
		  }
		  i=1;
          while(m_H-i>=0)
		  {
			   if(m_Qp[m_H-i][m_L]>=1&&m_Qp[m_H-i][m_L]<=7||m_Qp[m_H-i][m_L]>=8&&m_Qp[m_H-i][m_L]<=14)
			  {
                  i++;
                  while(m_H-i>=0)
				  {
					  if(m_Qp[m_H-i][m_L]>=1&&m_Qp[m_H-i][m_L]<=7)
					  {
						  m_Qp[m_H-i][m_L]+=14;
						  break;
					  }
                      i++;
				  }
				  break;
			  }
			  else if(m_Qp[m_H-i][m_L]>=15&&m_Qp[m_H-i][m_L]<=28)
				  break;
              m_Qp[m_H-i][m_L]=51;
			  i++;
		  }
		  i=1;
          while(m_L+i<=9)
		  {
			  
			  if(m_Qp[m_H][m_L+i]>=1&&m_Qp[m_H][m_L+i]<=7||m_Qp[m_H][m_L+i]>=8&&m_Qp[m_H][m_L+i]<=14)
			  {
                  i++;
                  while(m_L+i<=9)
				  {
					  if(m_Qp[m_H][m_L+i]>=1&&m_Qp[m_H][m_L+i]<=7)
					  {
						  m_Qp[m_H][m_L+i]+=14;
						  break;
					  }
                      i++;
				  }
				  break;
			  }
			  else if(m_Qp[m_H][m_L+i]>=15&&m_Qp[m_H][m_L+i]<=28)
				  break;
              m_Qp[m_H][m_L+i]=51;
			  i++;
		  }
		  i=1;
          while(m_L-i>=0)
		  {
			   if(m_Qp[m_H][m_L-i]>=1&&m_Qp[m_H][m_L-i]<=7||m_Qp[m_H][m_L-i]>=8&&m_Qp[m_H][m_L-i]<=14)
			  {
                  i++;
                  while(m_L-i>=0)
				  {
					  if(m_Qp[m_H][m_L-i]>=1&&m_Qp[m_H][m_L-i]<=7)
					  {
						  m_Qp[m_H][m_L-i]+=14;
						  break;
					  }
                      i++;
				  }
				  break;
			  }
			  else if(m_Qp[m_H][m_L-i]>=15&&m_Qp[m_H][m_L-i]<=28)
				  break;
              m_Qp[m_H][m_L-i]=51;
			  i++;
		  }
		  m_H1=m_H;
		  m_L1=m_L;
	}
	else if(m_Qp[m_H][m_L] == 6 && m_Color == 1)
	{
		  de();
          int i=1;
          while(m_H+i<=8)
		  {
			  if(m_Qp[m_H+i][m_L]>=1&&m_Qp[m_H+i][m_L]<=7)
				  break;
			  else if(m_Qp[m_H+i][m_L]>=8&&m_Qp[m_H+i][m_L]<=14)
			  {
                  m_Qp[m_H+i][m_L]+=14;
				  break;
			  }
			  else if(m_Qp[m_H+i][m_L]>=15&&m_Qp[m_H+i][m_L]<=28)
				  break;
              m_Qp[m_H+i][m_L]=50;
			  i++;
		  }
		  i=1;
          while(m_H-i>=0)
		  {
			  if(m_Qp[m_H-i][m_L]>=1&&m_Qp[m_H-i][m_L]<=7)
				  break;
			  else if(m_Qp[m_H-i][m_L]>=8&&m_Qp[m_H-i][m_L]<=14)
			  {
                  m_Qp[m_H-i][m_L]+=14;
				  break;
			  }
			  else if(m_Qp[m_H-i][m_L]>=15&&m_Qp[m_H-i][m_L]<=28)
				  break;
              m_Qp[m_H-i][m_L]=50;
			  i++;
		  }
		  i=1;
          while(m_L+i<=9)
		  {
			  
			   if(m_Qp[m_H][m_L+i]>=1&&m_Qp[m_H][m_L+i]<=7)
				  break;
			  else if(m_Qp[m_H][m_L+i]>=8&&m_Qp[m_H][m_L+i]<=14)
			  {
                  m_Qp[m_H][m_L+i]+=14;
				  break;
			  }
			  else if(m_Qp[m_H][m_L+i]>=15&&m_Qp[m_H][m_L+i]<=28)
				  break;
              m_Qp[m_H][m_L+i]=50;
			  i++;
		  }
		  i=1;
          while(m_L-i>=0)
		  {
			  if(m_Qp[m_H][m_L-i]>=1&&m_Qp[m_H][m_L-i]<=7)
				  break;
			  else if(m_Qp[m_H][m_L-i]>=8&&m_Qp[m_H][m_L-i]<=14)
			  {
                  m_Qp[m_H][m_L-i]+=14;
				  break;
			  }
			  else if(m_Qp[m_H][m_L-i]>=15&&m_Qp[m_H][m_L-i]<=28)
				  break;
              m_Qp[m_H][m_L-i]=50;
			  i++;
		  }
		  m_H1=m_H;
		  m_L1=m_L;
	}
	else if(m_Qp[m_H][m_L] == 13 && m_Color == 2)
	{
		de();
          int i=1;
          while(m_H+i<=8)
		  {
			  if(m_Qp[m_H+i][m_L]>=8&&m_Qp[m_H+i][m_L]<=14)
				  break;
			  else if(m_Qp[m_H+i][m_L]>=1&&m_Qp[m_H+i][m_L]<=7)
			  {
                  m_Qp[m_H+i][m_L]+=14;
				  break;
			  }
			  else if(m_Qp[m_H+i][m_L]>=15&&m_Qp[m_H+i][m_L]<=28)
				  break;
              m_Qp[m_H+i][m_L]=51;
			  i++;
		  }
		  i=1;
          while(m_H-i>=0)
		  {
			  if(m_Qp[m_H-i][m_L]>=8&&m_Qp[m_H-i][m_L]<=14)
				  break;
			  else if(m_Qp[m_H-i][m_L]>=1&&m_Qp[m_H-i][m_L]<=7)
			  {
                  m_Qp[m_H-i][m_L]+=14;
				  break;
			  }
			  else if(m_Qp[m_H-i][m_L]>=15&&m_Qp[m_H-i][m_L]<=28)
				  break;
              m_Qp[m_H-i][m_L]=51;
			  i++;
		  }
		  i=1;
          while(m_L+i<=9)
		  {
			  
			   if(m_Qp[m_H][m_L+i]>=8&&m_Qp[m_H][m_L+i]<=14)
				  break;
			  else if(m_Qp[m_H][m_L+i]>=1&&m_Qp[m_H][m_L+i]<=7)
			  {
                  m_Qp[m_H][m_L+i]+=14;
				  break;
			  }
			  else if(m_Qp[m_H][m_L+i]>=15&&m_Qp[m_H][m_L+i]<=28)
				  break;
              m_Qp[m_H][m_L+i]=51;
			  i++;
		  }
		  i=1;
          while(m_L-i>=0)
		  {
			  if(m_Qp[m_H][m_L-i]>=8&&m_Qp[m_H][m_L-i]<=14)
				  break;
			  else if(m_Qp[m_H][m_L-i]>=1&&m_Qp[m_H][m_L-i]<=7)
			  {
                  m_Qp[m_H][m_L-i]+=14;
				  break;
			  }
			  else if(m_Qp[m_H][m_L-i]>=15&&m_Qp[m_H][m_L-i]<=28)
				  break;
              m_Qp[m_H][m_L-i]=51;
			  i++;
		  }
		  m_H1=m_H;
		  m_L1=m_L;
     
	}
	else if(m_Qp[m_H][m_L] == 4 && m_Color == 1)
	{
		de();

		if(m_Qp[m_H-1][m_L-1]==0)
		{
           if(m_H-2>=0&&m_H-2<=8&&m_L-2<=9&&m_L-2>=5)
		   {
			   if(m_Qp[m_H-2][m_L-2]==0)
				   m_Qp[m_H-2][m_L-2]=50;
			   else if(m_Qp[m_H-2][m_L-2]>=8&&m_Qp[m_H-2][m_L-2]<=14)
			   m_Qp[m_H-2][m_L-2]+=14;
		   }
		}
		if(m_Qp[m_H+1][m_L+1]==0)
		{
			if(m_H+2>=0&&m_H+2<=8&&m_L+2<=9&&m_L+2>=5)
		   {
			   if(m_Qp[m_H+2][m_L+2]==0)
				   m_Qp[m_H+2][m_L+2]=50;
			   else if(m_Qp[m_H+2][m_L+2]>=8&&m_Qp[m_H+2][m_L+2]<=14)
			   m_Qp[m_H+2][m_L+2]+=14;
		   }
		}
		if(m_Qp[m_H-1][m_L+1]==0)
		{
			if(m_H-2>=0&&m_H-2<=8&&m_L+2<=9&&m_L+2>=5)
		   {
			   if(m_Qp[m_H-2][m_L+2]==0)
				   m_Qp[m_H-2][m_L+2]=50;
			   else if(m_Qp[m_H-2][m_L+2]>=8&&m_Qp[m_H-2][m_L+2]<=14)
			   m_Qp[m_H-2][m_L+2]+=14;
		   }
		}
		if(m_Qp[m_H+1][m_L-1]==0)
		{
			if(m_H+2>=0&&m_H+2<=8&&m_L-2<=9&&m_L-2>=5)
		   {
			   if(m_Qp[m_H+2][m_L-2]==0)
				   m_Qp[m_H+2][m_L-2]=50;
			   else if(m_Qp[m_H+2][m_L-2]>=8&&m_Qp[m_H+2][m_L-2]<=14)
			   m_Qp[m_H+2][m_L-2]+=14;
		   }
		}
		m_H1=m_H;
		  m_L1=m_L;
	}
	else if(m_Qp[m_H][m_L] == 11 && m_Color == 2)
	{
		de();
		if(m_Qp[m_H-1][m_L-1]==0)
		{
           if(m_H-2>=0&&m_H-2<=8&&m_L-2<=4&&m_L-2>=0)
		   {
			   if(m_Qp[m_H-2][m_L-2]==0)
				   m_Qp[m_H-2][m_L-2]=51;
			   else if(m_Qp[m_H-2][m_L-2]>=1&&m_Qp[m_H-2][m_L-2]<=7)
			   m_Qp[m_H-2][m_L-2]+=14;
		   }
		}
		if(m_Qp[m_H+1][m_L+1]==0)
		{
			if(m_H+2>=0&&m_H+2<=8&&m_L+2<=4&&m_L+2>=0)
		   {
			   if(m_Qp[m_H+2][m_L+2]==0)
				   m_Qp[m_H+2][m_L+2]=51;
			   else if(m_Qp[m_H+2][m_L+2]>=1&&m_Qp[m_H+2][m_L+2]<=7)
			   m_Qp[m_H+2][m_L+2]+=14;
		   }
		}
		if(m_Qp[m_H-1][m_L+1]==0)
		{
			if(m_H-2>=0&&m_H-2<=8&&m_L+2<=4&&m_L+2>=0)
		   {
			   if(m_Qp[m_H-2][m_L+2]==0)
				   m_Qp[m_H-2][m_L+2]=51;
			   else if(m_Qp[m_H-2][m_L+2]>=1&&m_Qp[m_H-2][m_L+2]<=7)
			   m_Qp[m_H-2][m_L+2]+=14;
		   }
		}
		if(m_Qp[m_H+1][m_L-1]==0)
		{
			if(m_H+2>=0&&m_H+2<=8&&m_L-2<=4&&m_L-2>=0)
		   {
			   if(m_Qp[m_H+2][m_L-2]==0)
				   m_Qp[m_H+2][m_L-2]=51;
			   else if(m_Qp[m_H+2][m_L-2]>=1&&m_Qp[m_H+2][m_L-2]<=7)
			   m_Qp[m_H+2][m_L-2]+=14;
		   }
		}
		m_H1=m_H;
		  m_L1=m_L;
	}
	else if(m_Qp[m_H][m_L] == 2 && m_Color == 1)
	{
		de();
		if(m_H==4&&m_L==9)
		{
			if(m_Qp[3][9]==0)
				m_Qp[3][9]=50;
			else if(m_Qp[3][9]>=8&&m_Qp[3][9]<=14)
				m_Qp[3][9]+=14;
			if(m_Qp[5][9]==0)
				m_Qp[5][9]=50;
			else if(m_Qp[5][9]>=8&&m_Qp[5][9]<=14)
				m_Qp[5][9]+=14;
			if(m_Qp[4][8]==0)
				m_Qp[4][8]=50;
			else if(m_Qp[4][8]>=8&&m_Qp[4][8]<=14)
				m_Qp[4][8]+=14;
		}
		else if(m_H==3&&m_L==9)
		{
			if(m_Qp[4][9]==0)
				m_Qp[4][9]=50;
			else if(m_Qp[4][9]>=8&&m_Qp[4][9]<=14)
				m_Qp[4][9]+=14;
			if(m_Qp[3][8]==0)
				m_Qp[3][8]=50;
			else if(m_Qp[3][8]>=8&&m_Qp[3][8]<=14)
				m_Qp[3][8]+=14;
			if(m_Qp[4][8]==0)
				m_Qp[4][8]=50;
			else if(m_Qp[4][8]>=8&&m_Qp[4][8]<=14)
				m_Qp[4][8]+=14;
		}
		else if(m_H==5&&m_L==9)
		{
			if(m_Qp[4][9]==0)
				m_Qp[4][9]=50;
			else if(m_Qp[4][9]>=8&&m_Qp[4][9]<=14)
				m_Qp[4][9]+=14;
			if(m_Qp[5][8]==0)
				m_Qp[5][8]=50;
			else if(m_Qp[5][8]>=8&&m_Qp[5][8]<=14)
				m_Qp[5][8]+=14;
			if(m_Qp[4][8]==0)
				m_Qp[4][8]=50;
			else if(m_Qp[4][8]>=8&&m_Qp[4][8]<=14)
				m_Qp[4][8]+=14;
		}
		else if(m_H==4&&m_L==8)
		{
			if(m_Qp[3][7]==0)
				m_Qp[3][7]=50;
			else if(m_Qp[3][7]>=8&&m_Qp[3][7]<=14)
				m_Qp[3][7]+=14;
			if(m_Qp[4][7]==0)
				m_Qp[4][7]=50;
			else if(m_Qp[4][7]>=8&&m_Qp[4][7]<=14)
				m_Qp[4][7]+=14;
			if(m_Qp[5][7]==0)
				m_Qp[5][7]=50;
			else if(m_Qp[5][7]>=8&&m_Qp[5][7]<=14)
				m_Qp[5][7]+=14;
			if(m_Qp[3][8]==0)
				m_Qp[3][8]=50;
			else if(m_Qp[3][8]>=8&&m_Qp[3][8]<=14)
				m_Qp[3][8]+=14;
			if(m_Qp[4][9]==0)
				m_Qp[4][9]=50;
			else if(m_Qp[4][9]>=8&&m_Qp[4][9]<=14)
				m_Qp[4][9]+=14;
			if(m_Qp[5][8]==0)
				m_Qp[5][8]=50;
			else if(m_Qp[5][8]>=8&&m_Qp[5][8]<=14)
				m_Qp[5][8]+=14;
			if(m_Qp[3][9]==0)
				m_Qp[3][9]=50;
			else if(m_Qp[3][9]>=8&&m_Qp[3][9]<=14)
				m_Qp[3][9]+=14;
			if(m_Qp[5][9]==0)
				m_Qp[5][9]=50;
			else if(m_Qp[5][9]>=8&&m_Qp[5][9]<=14)
				m_Qp[5][9]+=14;
		}
		else if(m_H==3&&m_L==8)
		{
			if(m_Qp[3][7]==0)
				m_Qp[3][7]=50;
			else if(m_Qp[3][7]>=8&&m_Qp[3][7]<=14)
				m_Qp[3][7]+=14;
			if(m_Qp[4][8]==0)
				m_Qp[4][8]=50;
			else if(m_Qp[4][8]>=8&&m_Qp[4][8]<=14)
				m_Qp[4][8]+=14;
			if(m_Qp[3][9]==0)
				m_Qp[3][9]=50;
			else if(m_Qp[3][9]>=8&&m_Qp[3][9]<=14)
				m_Qp[3][9]+=14;
		}
		else if(m_H==5&&m_L==8)
		{
			if(m_Qp[5][7]==0)
				m_Qp[5][7]=50;
			else if(m_Qp[5][7]>=8&&m_Qp[5][7]<=14)
				m_Qp[5][7]+=14;
			if(m_Qp[4][8]==0)
				m_Qp[4][8]=50;
			else if(m_Qp[4][8]>=8&&m_Qp[4][8]<=14)
				m_Qp[4][8]+=14;
			if(m_Qp[5][9]==0)
				m_Qp[5][9]=50;
			else if(m_Qp[5][9]>=8&&m_Qp[5][9]<=14)
				m_Qp[5][9]+=14;
		}
		else if(m_H==4&&m_L==7)
		{
			if(m_Qp[5][7]==0)
				m_Qp[5][7]=50;
			else if(m_Qp[5][7]>=8&&m_Qp[5][7]<=14)
				m_Qp[5][7]+=14;
			if(m_Qp[4][8]==0)
				m_Qp[4][8]=50;
			else if(m_Qp[4][8]>=8&&m_Qp[4][8]<=14)
				m_Qp[4][8]+=14;
			if(m_Qp[3][7]==0)
				m_Qp[3][7]=50;
			else if(m_Qp[3][7]>=8&&m_Qp[3][7]<=14)
				m_Qp[3][7]+=14;
		}
		else if(m_H==3&&m_L==7)
		{
			if(m_Qp[4][7]==0)
				m_Qp[4][7]=50;
			else if(m_Qp[4][7]>=8&&m_Qp[4][7]<=14)
				m_Qp[4][7]+=14;
			if(m_Qp[4][8]==0)
				m_Qp[4][8]=50;
			else if(m_Qp[4][8]>=8&&m_Qp[4][8]<=14)
				m_Qp[4][8]+=14;
			if(m_Qp[3][8]==0)
				m_Qp[3][8]=50;
			else if(m_Qp[3][8]>=8&&m_Qp[3][8]<=14)
				m_Qp[3][8]+=14;
		}
		else if(m_H==5&&m_L==7)
		{
			if(m_Qp[4][7]==0)
				m_Qp[4][7]=50;
			else if(m_Qp[4][7]>=8&&m_Qp[4][7]<=14)
				m_Qp[4][7]+=14;
			if(m_Qp[4][8]==0)
				m_Qp[4][8]=50;
			else if(m_Qp[4][8]>=8&&m_Qp[4][8]<=14)
				m_Qp[4][8]+=14;
			if(m_Qp[5][8]==0)
				m_Qp[5][8]=50;
			else if(m_Qp[5][8]>=8&&m_Qp[3][8]<=14)
				m_Qp[5][8]+=14;
		}
		int k,t;
		for(int i=0;i<9;i++)
	{
        for(int j=0;j<10;j++)
		{
			if(m_Qp[i][j]==9)
			{
				k=i;
				t=j;
				break;
			}
		}
	}
		
		int x=1;

		while(t+x<=9)
		{
			if(m_Qp[k][t+x]==50)
				m_Qp[k][t+x]=0;
			else if(m_Qp[k][t+x]>=1&&m_Qp[k][t+x]<=14)
			    break;
			else if(m_Qp[k][t+x]>=22&&m_Qp[k][t+x]<=28)
			{
				m_Qp[k][t+x]-=14;
				break;
			}
			
			x++;
		}
        x=1;
		while(m_L-x>=0)
		{
			if(m_Qp[m_H][m_L-x]!=0&&m_Qp[m_H][m_L-x]!=9)
				break;
			if(m_Qp[m_H][m_L-x]==9)
				m_Qp[m_H][m_L-x]+=14;
			x++;
		}
		m_H1=m_H;
		  m_L1=m_L;
	}
	else if(m_Qp[m_H][m_L] == 9 && m_Color == 2)
	{
		de();
		if(m_H==4&&m_L==2)
		{
			if(m_Qp[3][2]==0)
				m_Qp[3][2]=51;
			else if(m_Qp[3][2]>=1&&m_Qp[3][2]<=7)
				m_Qp[3][2]+=14;
			if(m_Qp[5][2]==0)
				m_Qp[5][2]=51;
			else if(m_Qp[5][2]>=1&&m_Qp[5][2]<=7)
				m_Qp[5][2]+=14;
			if(m_Qp[4][1]==0)
				m_Qp[4][1]=51;
			else if(m_Qp[4][1]>=1&&m_Qp[4][1]<=7)
				m_Qp[4][1]+=14;
		}
		else if(m_H==3&&m_L==2)
		{
			if(m_Qp[4][2]==0)
				m_Qp[4][2]=51;
			else if(m_Qp[4][2]>=1&&m_Qp[4][2]<=7)
				m_Qp[4][2]+=14;
			if(m_Qp[3][1]==0)
				m_Qp[3][1]=51;
			else if(m_Qp[3][1]>=1&&m_Qp[3][1]<=7)
				m_Qp[3][1]+=14;
			if(m_Qp[4][1]==0)
				m_Qp[4][1]=51;
			else if(m_Qp[4][1]>=1&&m_Qp[4][1]<=7)
				m_Qp[4][1]+=14;
		}
		else if(m_H==5&&m_L==2)
		{
			if(m_Qp[4][2]==0)
				m_Qp[4][2]=51;
			else if(m_Qp[4][2]>=1&&m_Qp[4][2]<=7)
				m_Qp[4][2]+=14;
			if(m_Qp[5][1]==0)
				m_Qp[5][1]=51;
			else if(m_Qp[5][1]>=1&&m_Qp[5][1]<=7)
				m_Qp[5][1]+=14;
			if(m_Qp[4][1]==0)
				m_Qp[4][1]=51;
			else if(m_Qp[4][1]>=1&&m_Qp[4][1]<=7)
				m_Qp[4][1]+=14;
		}
		else if(m_H==4&&m_L==1)
		{
			if(m_Qp[3][0]==0)
				m_Qp[3][0]=51;
			else if(m_Qp[3][0]>=1&&m_Qp[3][0]<=7)
				m_Qp[3][0]+=14;
			if(m_Qp[4][0]==0)
				m_Qp[4][0]=51;
			else if(m_Qp[4][0]>=1&&m_Qp[4][0]<=7)
				m_Qp[4][0]+=14;
			if(m_Qp[5][0]==0)
				m_Qp[5][0]=51;
			else if(m_Qp[5][0]>=1&&m_Qp[5][0]<=7)
				m_Qp[5][0]+=14;
			if(m_Qp[3][1]==0)
				m_Qp[3][1]=51;
			else if(m_Qp[3][1]>=1&&m_Qp[3][1]<=7)
				m_Qp[3][1]+=14;
			if(m_Qp[4][2]==0)
				m_Qp[4][2]=51;
			else if(m_Qp[4][2]>=1&&m_Qp[4][2]<=7)
				m_Qp[4][2]+=14;
			if(m_Qp[5][1]==0)
				m_Qp[5][1]=51;
			else if(m_Qp[5][1]>=1&&m_Qp[5][8]<=7)
				m_Qp[5][1]+=14;
			if(m_Qp[3][2]==0)
				m_Qp[3][2]=51;
			else if(m_Qp[3][2]>=1&&m_Qp[3][2]<=7)
				m_Qp[3][2]+=14;
			if(m_Qp[5][2]==0)
				m_Qp[5][2]=51;
			else if(m_Qp[5][2]>=1&&m_Qp[5][2]<=7)
				m_Qp[5][2]+=14;
		}
		else if(m_H==3&&m_L==1)
		{
			if(m_Qp[3][0]==0)
				m_Qp[3][0]=51;
			else if(m_Qp[3][0]>=1&&m_Qp[3][0]<=7)
				m_Qp[3][0]+=14;
			if(m_Qp[4][1]==0)
				m_Qp[4][1]=51;
			else if(m_Qp[4][1]>=1&&m_Qp[4][1]<=7)
				m_Qp[4][1]+=14;
			if(m_Qp[3][2]==0)
				m_Qp[3][2]=51;
			else if(m_Qp[3][2]>=1&&m_Qp[3][2]<=7)
				m_Qp[3][2]+=14;
		}
		else if(m_H==5&&m_L==1)
		{
			if(m_Qp[5][0]==0)
				m_Qp[5][0]=51;
			else if(m_Qp[5][0]>=1&&m_Qp[5][0]<=7)
				m_Qp[5][0]+=14;
			if(m_Qp[4][1]==0)
				m_Qp[4][1]=51;
			else if(m_Qp[4][1]>=1&&m_Qp[4][1]<=7)
				m_Qp[4][1]+=14;
			if(m_Qp[5][2]==0)
				m_Qp[5][2]=51;
			else if(m_Qp[5][2]>=1&&m_Qp[5][2]<=7)
				m_Qp[5][2]+=14;
		}
		else if(m_H==4&&m_L==0)
		{
			if(m_Qp[5][0]==0)
				m_Qp[5][0]=51;
			else if(m_Qp[5][0]>=1&&m_Qp[5][0]<=7)
				m_Qp[5][0]+=14;
			if(m_Qp[4][1]==0)
				m_Qp[4][1]=51;
			else if(m_Qp[4][1]>=1&&m_Qp[4][1]<=7)
				m_Qp[4][1]+=14;
			if(m_Qp[3][0]==0)
				m_Qp[3][0]=51;
			else if(m_Qp[3][0]>=1&&m_Qp[3][0]<=7)
				m_Qp[3][0]+=14;
		}
		else if(m_H==3&&m_L==0)
		{
			if(m_Qp[4][0]==0)
				m_Qp[4][0]=51;
			else if(m_Qp[4][0]>=1&&m_Qp[4][0]<=7)
				m_Qp[4][0]+=14;
			if(m_Qp[4][1]==0)
				m_Qp[4][1]=51;
			else if(m_Qp[4][1]>=1&&m_Qp[4][1]<=7)
				m_Qp[4][1]+=14;
			if(m_Qp[3][1]==0)
				m_Qp[3][1]=51;
			else if(m_Qp[3][1]>=1&&m_Qp[3][1]<=7)
				m_Qp[3][1]+=14;
		}
		else if(m_H==5&&m_L==0)
		{
			if(m_Qp[4][0]==0)
				m_Qp[4][0]=50;
			else if(m_Qp[4][0]>=1&&m_Qp[4][0]<=7)
				m_Qp[4][0]+=14;
			if(m_Qp[4][1]==0)
				m_Qp[4][1]=51;
			else if(m_Qp[4][1]>=1&&m_Qp[4][1]<=7)
				m_Qp[4][1]+=14;
			if(m_Qp[5][1]==0)
				m_Qp[5][1]=51;
			else if(m_Qp[5][1]>=1&&m_Qp[3][1]<=7)
				m_Qp[5][1]+=14;
		}
		int k,t;
		for(int i=0;i<9;i++)
	{
        for(int j=0;j<10;j++)
		{
			if(m_Qp[i][j]==2)
			{
				k=i;
				t=j;
				break;
			}
		}
	}
		
		int x=1;

		while(t-x>=0)
		{
			if(m_Qp[k][t-x]==51)
				m_Qp[k][t-x]=0;
			else if(m_Qp[k][t-x]==2)
				m_Qp[k][t-x]+=14;
			else if(m_Qp[k][t-x]>=1&&m_Qp[k][t-x]<=14)
			    break;
			else if(m_Qp[k][t-x]>=15&&m_Qp[k][t-x]<=21)
			{
				m_Qp[k][t-x]-=14;
				break;
			}
			
			x++;
		}
		while(m_L+x<=9)
		{
			if(m_Qp[m_H][m_L+x]!=0&&m_Qp[m_H][m_L+x]!=2)
				break;
			if(m_Qp[m_H][m_L+x]==2)
				m_Qp[m_H][m_L+x]+=14;
			x++;
		}
		m_H1=m_H;
		  m_L1=m_L;
	}
	else if(m_Qp[m_H][m_L] == 5 && m_Color == 1)
	{
		de();
		if(m_Qp[m_H+1][m_L] == 0)
		{
			if(m_H+2<=8&&m_H+2>=0&&m_L+1>=0&&m_L+1<=9)
			{
				if(m_Qp[m_H+2][m_L+1]==0)
					m_Qp[m_H+2][m_L+1]=50;
				else if(m_Qp[m_H+2][m_L+1]>=8&&m_Qp[m_H+2][m_L+1]<=14)
					m_Qp[m_H+2][m_L+1]+=14;
			}
			if(m_H+2<=8&&m_H+2>=0&&m_L-1>=0&&m_L-1<=9)
			{
				if(m_Qp[m_H+2][m_L-1]==0)
					m_Qp[m_H+2][m_L-1]=50;
				else if(m_Qp[m_H+2][m_L-1]>=8&&m_Qp[m_H+2][m_L-1]<=14)
					m_Qp[m_H+2][m_L-1]+=14;
			}
		}
		if(m_Qp[m_H-1][m_L] == 0)
		{
			if(m_H-2<=8&&m_H-2>=0&&m_L+1>=0&&m_L+1<=9)
			{
				if(m_Qp[m_H-2][m_L+1]==0)
					m_Qp[m_H-2][m_L+1]=50;
				else if(m_Qp[m_H-2][m_L+1]>=8&&m_Qp[m_H-2][m_L+1]<=14)
					m_Qp[m_H+-2][m_L+1]+=14;
			}
			if(m_H-2<=8&&m_H-2>=0&&m_L-1>=0&&m_L-1<=9)
			{
				if(m_Qp[m_H-2][m_L-1]==0)
					m_Qp[m_H-2][m_L-1]=50;
				else if(m_Qp[m_H-2][m_L-1]>=8&&m_Qp[m_H-2][m_L-1]<=14)
					m_Qp[m_H-2][m_L-1]+=14;
			}
		}
		if(m_Qp[m_H][m_L+1] == 0)
		{
			if(m_H+1<=8&&m_H+1>=0&&m_L+2>=0&&m_L+2<=9)
			{
				if(m_Qp[m_H+1][m_L+2]==0)
					m_Qp[m_H+1][m_L+2]=50;
				else if(m_Qp[m_H+1][m_L+2]>=8&&m_Qp[m_H+1][m_L+2]<=14)
					m_Qp[m_H+1][m_L+2]+=14;
			}
			if(m_H-1<=8&&m_H-1>=0&&m_L+2>=0&&m_L+2<=9)
			{
				if(m_Qp[m_H-1][m_L+2]==0)
					m_Qp[m_H-1][m_L+2]=50;
				else if(m_Qp[m_H-1][m_L+2]>=8&&m_Qp[m_H-1][m_L+2]<=14)
					m_Qp[m_H-1][m_L+2]+=14;
			}
		}
		if(m_Qp[m_H][m_L-1] == 0)
		{
			if(m_H+1<=8&&m_H+1>=0&&m_L-2>=0&&m_L-2<=9)
			{
				if(m_Qp[m_H+1][m_L-2]==0)
					m_Qp[m_H+1][m_L-2]=50;
				else if(m_Qp[m_H+1][m_L-2]>=8&&m_Qp[m_H+1][m_L-2]<=14)
					m_Qp[m_H+1][m_L-2]+=14;
			}
			if(m_H-1<=8&&m_H-1>=0&&m_L-2>=0&&m_L-2<=9)
			{
				if(m_Qp[m_H-1][m_L-2]==0)
					m_Qp[m_H-1][m_L-2]=50;
				else if(m_Qp[m_H-1][m_L-2]>=8&&m_Qp[m_H-1][m_L-2]<=14)
					m_Qp[m_H-1][m_L-2]+=14;
			}
		}
		m_H1=m_H;
		  m_L1=m_L;
	}
	else if(m_Qp[m_H][m_L] == 12 && m_Color == 2)
	{
		de();
		if(m_Qp[m_H+1][m_L] == 0)
		{
			if(m_H+2<=8&&m_H+2>=0&&m_L+1>=0&&m_L+1<=9)
			{
				if(m_Qp[m_H+2][m_L+1]==0)
					m_Qp[m_H+2][m_L+1]=51;
				else if(m_Qp[m_H+2][m_L+1]>=1&&m_Qp[m_H+2][m_L+1]<=7)
					m_Qp[m_H+2][m_L+1]+=14;
			}
			if(m_H+2<=8&&m_H+2>=0&&m_L-1>=0&&m_L-1<=9)
			{
				if(m_Qp[m_H+2][m_L-1]==0)
					m_Qp[m_H+2][m_L-1]=51;
				else if(m_Qp[m_H+2][m_L-1]>=1&&m_Qp[m_H+2][m_L-1]<=7)
					m_Qp[m_H+2][m_L-1]+=14;
			}
		}
		if(m_Qp[m_H-1][m_L] == 0)
		{
			if(m_H-2<=8&&m_H-2>=0&&m_L+1>=0&&m_L+1<=9)
			{
				if(m_Qp[m_H-2][m_L+1]==0)
					m_Qp[m_H-2][m_L+1]=51;
				else if(m_Qp[m_H-2][m_L+1]>=1&&m_Qp[m_H-2][m_L+1]<=7)
					m_Qp[m_H+-2][m_L+1]+=14;
			}
			if(m_H-2<=8&&m_H-2>=0&&m_L-1>=0&&m_L-1<=9)
			{
				if(m_Qp[m_H-2][m_L-1]==0)
					m_Qp[m_H-2][m_L-1]=51;
				else if(m_Qp[m_H-2][m_L-1]>=1&&m_Qp[m_H-2][m_L-1]<=7)
					m_Qp[m_H-2][m_L-1]+=14;
			}
		}
		if(m_Qp[m_H][m_L+1] == 0)
		{
			if(m_H+1<=8&&m_H+1>=0&&m_L+2>=0&&m_L+2<=9)
			{
				if(m_Qp[m_H+1][m_L+2]==0)
					m_Qp[m_H+1][m_L+2]=51;
				else if(m_Qp[m_H+1][m_L+2]>=1&&m_Qp[m_H+1][m_L+2]<=7)
					m_Qp[m_H+1][m_L+2]+=14;
			}
			if(m_H-1<=8&&m_H-1>=0&&m_L+2>=0&&m_L+2<=9)
			{
				if(m_Qp[m_H-1][m_L+2]==0)
					m_Qp[m_H-1][m_L+2]=51;
				else if(m_Qp[m_H-1][m_L+2]>=1&&m_Qp[m_H-1][m_L+2]<=7)
					m_Qp[m_H-1][m_L+2]+=14;
			}
		}
		if(m_Qp[m_H][m_L-1] == 0)
		{
			if(m_H+1<=8&&m_H+1>=0&&m_L-2>=0&&m_L-2<=9)
			{
				if(m_Qp[m_H+1][m_L-2]==0)
					m_Qp[m_H+1][m_L-2]=51;
				else if(m_Qp[m_H+1][m_L-2]>=1&&m_Qp[m_H+1][m_L-2]<=7)
					m_Qp[m_H+1][m_L-2]+=14;
			}
			if(m_H-1<=8&&m_H-1>=0&&m_L-2>=0&&m_L-2<=9)
			{
				if(m_Qp[m_H-1][m_L-2]==0)
					m_Qp[m_H-1][m_L-2]=51;
				else if(m_Qp[m_H-1][m_L-2]>=1&&m_Qp[m_H-1][m_L-2]<=7)
					m_Qp[m_H-1][m_L-2]+=14;
			}
		}
		m_H1=m_H;
		  m_L1=m_L;
	}
	else if(m_Qp[m_H][m_L] == 3 && m_Color == 1)
	{
		de();
		if(m_H==4&&m_L==8)
		{
			if(m_Qp[3][7]==0)
				m_Qp[3][7]=50;
			else if(m_Qp[3][7]>=8&&m_Qp[3][7]<=14)
				m_Qp[3][7]+=14;
			if(m_Qp[5][7]==0)
				m_Qp[5][7]=50;
			else if(m_Qp[5][7]>=8&&m_Qp[5][7]<=14)
				m_Qp[5][7]+=14;
			if(m_Qp[3][9]==0)
				m_Qp[3][9]=50;
			else if(m_Qp[3][9]>=8&&m_Qp[3][9]<=14)
				m_Qp[3][9]+=14;
			if(m_Qp[5][9]==0)
				m_Qp[5][9]=50;
			else if(m_Qp[5][9]>=8&&m_Qp[5][9]<=14)
				m_Qp[5][9]+=14;
		}
		else
		{
			if(m_Qp[4][8]==0)
				m_Qp[4][8]=50;
			else if(m_Qp[4][8]>=8&&m_Qp[4][8]<=14)
				m_Qp[4][8]+=14;
		}
		m_H1=m_H;
		  m_L1=m_L;
	}
	else if(m_Qp[m_H][m_L] == 10 && m_Color == 2)
	{
		de();
		if(m_H==4&&m_L==1)
		{
			if(m_Qp[3][0]==0)
				m_Qp[3][0]=51;
			else if(m_Qp[3][0]>=1&&m_Qp[3][0]<=7)
				m_Qp[3][0]+=14;
			if(m_Qp[5][0]==0)
				m_Qp[5][0]=51;
			else if(m_Qp[5][0]>=1&&m_Qp[5][0]<=7)
				m_Qp[5][0]+=14;
			if(m_Qp[3][2]==0)
				m_Qp[3][2]=51;
			else if(m_Qp[3][2]>=1&&m_Qp[3][2]<=7)
				m_Qp[3][2]+=14;
			if(m_Qp[5][2]==0)
				m_Qp[5][2]=51;
			else if(m_Qp[5][2]>=1&&m_Qp[5][2]<=7)
				m_Qp[5][2]+=14;
		}
		else
		{
			if(m_Qp[4][1]==0)
				m_Qp[4][1]=51;
			else if(m_Qp[4][1]>=1&&m_Qp[4][1]<=7)
				m_Qp[4][1]+=14;
		}
		m_H1=m_H;
		  m_L1=m_L;
	}
}

最后是悔棋和重开的代码。

void CXiangQi::reset()
{
	m_Qp[0][0]=13;m_Qp[1][0]=12;m_Qp[2][0]=11;m_Qp[3][0]=10;m_Qp[4][0]=9;m_Qp[5][0]=10;m_Qp[6][0]=11;m_Qp[7][0]=12;m_Qp[8][0]=13;
	m_Qp[0][1]=0;m_Qp[1][1]=0;m_Qp[2][1]=0;m_Qp[3][1]=0;m_Qp[4][1]=0;m_Qp[5][1]=0;m_Qp[6][1]=0;m_Qp[7][1]=0;m_Qp[8][1]=0;
	m_Qp[0][2]=0;m_Qp[1][2]=14;m_Qp[2][2]=0;m_Qp[3][2]=0;m_Qp[4][2]=0;m_Qp[5][2]=0;m_Qp[6][2]=0;m_Qp[7][2]=14;m_Qp[8][2]=0;
	m_Qp[0][3]=8;m_Qp[1][3]=0;m_Qp[2][3]=8;m_Qp[3][3]=0;m_Qp[4][3]=8;m_Qp[5][3]=0;m_Qp[6][3]=8;m_Qp[7][3]=0;m_Qp[8][3]=8;
	m_Qp[0][4]=0;m_Qp[1][4]=0;m_Qp[2][4]=0;m_Qp[3][4]=0;m_Qp[4][4]=0;m_Qp[5][4]=0;m_Qp[6][4]=0;m_Qp[7][4]=0;m_Qp[8][4]=0;
	m_Qp[0][5]=0;m_Qp[1][5]=0;m_Qp[2][5]=0;m_Qp[3][5]=0;m_Qp[4][5]=0;m_Qp[5][5]=0;m_Qp[6][5]=0;m_Qp[7][5]=0;m_Qp[8][5]=0;
	m_Qp[0][6]=1;m_Qp[1][6]=0;m_Qp[2][6]=1;m_Qp[3][6]=0;m_Qp[4][6]=1;m_Qp[5][6]=0;m_Qp[6][6]=1;m_Qp[7][6]=0;m_Qp[8][6]=1;
	m_Qp[0][7]=0;m_Qp[1][7]=7;m_Qp[2][7]=0;m_Qp[3][7]=0;m_Qp[4][7]=0;m_Qp[5][7]=0;m_Qp[6][7]=0;m_Qp[7][7]=7;m_Qp[8][7]=0;
	m_Qp[0][8]=0;m_Qp[1][8]=0;m_Qp[2][8]=0;m_Qp[3][8]=0;m_Qp[4][8]=0;m_Qp[5][8]=0;m_Qp[6][8]=0;m_Qp[7][8]=0;m_Qp[8][8]=0;
	m_Qp[0][9]=6;m_Qp[1][9]=5;m_Qp[2][9]=4;m_Qp[3][9]=3;m_Qp[4][9]=2;m_Qp[5][9]=3;m_Qp[6][9]=4;m_Qp[7][9]=5;m_Qp[8][9]=6;
	m_Color=1;
}
void CXiangQi::re()
{
	 for(int i=0;i<9;i++)
	{
        for(int j=0;j<10;j++)
		{
			m_Qp[i][j]=m_Qp1[i][j];
		}
	}
	if(m_Color==1) m_Color=2;
	else m_Color=1;
}

添加下棋响应。

点击add and edit,编辑代码。

void CZGXQView::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	XQ.XiaQi(point); //下棋响应
	Invalidate(TRUE);
	XQ.panduan();
	CView::OnLButtonDown(nFlags, point);
}

现在到了最后环节,我们在菜单栏中加入悔棋和重开。

建立类向导。

实现。

至此,所有的步骤已经完成。

  • 15
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值