学校高级程序设计课程的大作业,分享出来给大家做个参考,希望能给大家提供些许灵感。
我的灵感本身也来自于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);
}
现在到了最后环节,我们在菜单栏中加入悔棋和重开。
建立类向导。
实现。
至此,所有的步骤已经完成。