📄 gobangview.cpp
字号:
// gobangView.cpp : implementation of the CGobangView class
//
#include "stdafx.h"
#include "gobang.h"
#include "gobangDoc.h"
#include "gobangView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define black 1
#define white 100
/////////////////////////////////////////////////////////////////////////////
// CGobangView
IMPLEMENT_DYNCREATE(CGobangView, CView)
BEGIN_MESSAGE_MAP(CGobangView, CView)
//{{AFX_MSG_MAP(CGobangView)
ON_WM_LBUTTONDOWN()
ON_COMMAND(IDI_STARTAGAIN, OnStartagain)
ON_COMMAND(IDI_BLACK, OnBlack)
ON_COMMAND(IDI_WHITE, OnWhite)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CGobangView construction/destruction
bool finish=true;
int hcolour=black;
int ccolour=white;
int qipan[19][19]; //棋盘状态
int cpower[19][19]; //相对电脑棋子子的权值
int hpower[19][19]; //相对人棋子的权值
void initializeqipan() //初始化棋盘
{
for(int i=0;i<19;i++)
for(int j=0;j<19;j++)
{
qipan[i][j]=0;
cpower[i][j]=0;
hpower[i][j]=0;
}
}
void changepower(int x,int y,int cc)//更新具体一个点的权值
{
if(qipan[x][y]!=0)
return;
cpower[x][y]=0;hpower[x][y]=0;
int i,j;
int hc=(cc==black)?white:black;
for(i=x-4;i<=x;i++)
{
if(i<0||i+4>=19)
continue;
if(qipan[i][y]+qipan[i+1][y]+qipan[i+2][y]+qipan[i+3][y]+qipan[i+4][y]==4*cc)
{
cpower[x][y]=cpower[x][y]+10000;goto line1;
}
}
for(i=x-3;i<=x;i++)
{
if(i<0||i+3>19)
continue;
if(qipan[i][y]+qipan[i+1][y]+qipan[i+2][y]+qipan[i+3][y]==3*cc)
if(i-1>=0&&qipan[i-1][y]==0&&i+4<19&&qipan[i+4][y]==0)
{
cpower[x][y]=cpower[x][y]+1000;goto line1;
}
else
if(!((i-1<0||qipan[i-1][y]==hc)&&((i+4)<19||qipan[i+4][y]==hc)))
{
cpower[x][y]=cpower[x][y]+180;goto line1;
}
}
for(i=x-2;i<=x;i++)
{
if(i<0||i+2>=19)
continue;
if(qipan[i][y]+qipan[i+1][y]+qipan[i+2][y]==2*cc)
if(i-1>=0&&qipan[i-1][y]==0&&i+3<19&&qipan[i+3][y]==0)
{ cpower[x][y]=cpower[x][y]+100;goto line1;}
else
if(!((i-1<0||qipan[i-1][y]==hc)&&((i+3)<19||qipan[i+3][y]==hc)))
{ cpower[x][y]=cpower[x][y]+18;goto line1;}
}
for(i=x-1;i<=x;i++)
{
if(i<0||i+1>=19)
continue;
if(qipan[i][y]+qipan[i+1][y]==cc)
if(i-1>=0&&qipan[i-1][y]==0&&i-2>=0&&qipan[i-2][y]==0&&i+2<19&&qipan[i+2][y]==0&&i+3<19&&qipan[i+3][y]==0)
{ cpower[x][y]=cpower[x][y]+10;goto line1;}
}
/////////////////////////
line1: for(i=x-4;i<=x;i++)
{
if(i<0||i+4>=19)
continue;
if(qipan[i][y]+qipan[i+1][y]+qipan[i+2][y]+qipan[i+3][y]+qipan[i+4][y]==4*hc)
{
hpower[x][y]=hpower[x][y]+10000;goto line2;
}
}
for(i=x-3;i<=x;i++)
{
if(i<0||i+3>=19)
continue;
if(qipan[i][y]+qipan[i+1][y]+qipan[i+2][y]+qipan[i+3][y]==3*hc)
if(i-1>=0&&qipan[i-1][y]==0&&i+4<19&&qipan[i+4][y]==0)
{
hpower[x][y]=hpower[x][y]+1000;goto line2;
}
else
if(!((i-1<0||qipan[i-1][y]==cc)&&((i+4)<19||qipan[i+4][y]==cc)))
{
hpower[x][y]=hpower[x][y]+180;goto line2;
}
}
for(i=x-2;i<=x;i++)
{
if(i<0||i+2>=19)
continue;
if(qipan[i][y]+qipan[i+1][y]+qipan[i+2][y]==2*cc)
if(i-1>=0&&qipan[i-1][y]==0&&i+3<19&&qipan[i+3][y]==0)
{ hpower[x][y]=hpower[x][y]+100;goto line2;}
else
if(!((i-1<0||qipan[i-1][y]==cc)&&((i+3)<19||qipan[i+3][y]==cc)))
{ hpower[x][y]=hpower[x][y]+18;goto line2;}
}
for(i=x-1;i<=x;i++)
{
if(i<0||i+1>=19)
continue;
if(qipan[i][y]+qipan[i+1][y]==hc)
if(i-1>=0&&qipan[i-1][y]==0&&i-2>=0&&qipan[i-2][y]==0&&i+2<19&&qipan[i+2][y]==0&&i+3<19&&qipan[i+3][y]==0)
{ hpower[x][y]=hpower[x][y]+10;goto line2;}
}
//////////////////////////
line2:
// for(i=y-4;i>=0&&i<19&&qipan[x][i]==0&&i<=y;i++)
for(i=y-4;i<=y;i++)
{
if(i<0||i+4>=19)
continue;
if(qipan[x][i]+qipan[x][i+1]+qipan[x][i+2]+qipan[x][i+3]+qipan[x][i+4]==4*cc)
{
cpower[x][y]=cpower[x][y]+10000;goto line3;
}
}
for(i=y-3;i<=y;i++)
{
if(i<0||i+3>=19)
continue;
if(qipan[x][i]+qipan[x][i+1]+qipan[x][i+2]+qipan[x][i+3]==3*cc)
if(i-1>=0&&qipan[x][i-1]==0&&i+4<19&&qipan[x][i+4]==0)
{
cpower[x][y]=cpower[x][y]+1000;goto line3;
}
else
if(!((i-1<0||qipan[x][i-1]==hc)&&((i+4)<19||qipan[x][i+4]==hc)))
{
cpower[x][y]=cpower[x][y]+180;goto line3;
}
}
for(i=y-2;i<=y;i++)
{
if(i<0||i+2>=19)
continue;
if(qipan[x][i]+qipan[x][i+1]+qipan[x][i+2]==2*cc)
if(i-1>=0&&qipan[x][i-1]==0&&i+3<19&&qipan[x][i+3]==0)
{ cpower[x][y]=cpower[x][y]+100;goto line3;}
else
if(!((i-1<0||qipan[x][i-1]==hc)&&((i+3)<19||qipan[x][i+3]==hc)))
{ cpower[x][y]=cpower[x][y]+18;goto line3;}
}
for(i=x-1;i<=y;i++)
{
if(i<0||i+1>=19)
continue;
if(qipan[x][i]+qipan[x][i+1]==cc)
if(i-1>=0&&qipan[x][i-1]==0&&i-2>=0&&qipan[x][i-2]==0&&i+2<19&&qipan[x][i+2]==0&&i+3<19&&qipan[x][i+3]==0)
{ cpower[x][y]=cpower[x][y]+10;goto line3;}
}
/////////////////////////
line3:
for(i=y-4;i<=y;i++)
{
if(i<0||i+4>=19)
continue;
if(qipan[x][i]+qipan[x][i+1]+qipan[x][i+2]+qipan[x][i+3]+qipan[x][i+4]==4*hc)
{
hpower[x][y]=hpower[x][y]+10000;goto line4;
}
}
for(i=y-3;i<=y;i++)
{
if(i<0||i+3>=19)
continue;
if(qipan[x][i]+qipan[x][i+1]+qipan[x][i+2]+qipan[x][i+3]==3*hc)
if(i-1>=0&&qipan[x][i-1]==0&&i+4<19&&qipan[x][i+4]==0)
{
hpower[x][y]=hpower[x][y]+1000;goto line4;
}
else
if(!((i-1<0||qipan[x][i-1]==cc)&&((i+4)<19||qipan[x][i+4]==cc)))
{
hpower[x][y]=hpower[x][y]+180;goto line4;
}
}
for(i=y-2;i<=y;i++)
{
if(i<0||i+2>=19)
continue;
if(qipan[x][i]+qipan[x][i+1]+qipan[x][i+2]==2*hc)
if(i-1>=0&&qipan[x][i-1]==0&&i+3<19&&qipan[x][i+3]==0)
{ hpower[x][y]=hpower[x][y]+100;goto line4;}
else
if(!((i-1<0||qipan[x][i-1]==cc)&&((i+3)<19||qipan[x][i+3]==cc)))
{ hpower[x][y]=hpower[x][y]+18;goto line4;}
}
for(i=x-1;i<=y;i++)
{
if(i<0||i+1>=19)
continue;
if(qipan[x][i]+qipan[x][i+1]==hc)
if(i-1>=0&&qipan[x][i-1]==0&&i-2>=0&&qipan[x][i-2]==0&&i+2<19&&qipan[x][i+2]==0&&i+3<19&&qipan[x][i+3]==0)
{ hpower[x][y]=hpower[x][y]+10;goto line4;}
}
///////////////////////////////
line4:
// for(i=x-4,j=y-4;i>=0&&j>=0&&i<19&&j<19&&qipan[i][j]==0&&i<=x&&j<=y;i++,j++)
for(i=x-4,j=y-4;i<=x&&j<=y;i++,j++)
{
if(i<0||i+4>=19||j<0||j+4>=19)
continue;
if(qipan[i][j]+qipan[i+1][j+1]+qipan[i+2][j+2]+qipan[i+3][j+3]+qipan[i+4][j+4]==4*cc)
{
cpower[x][y]=cpower[x][y]+10000;goto line5;
}
}
for(i=x-3,j=y-3;i<=x;i++,j++)
{
if(i<0||i+3>=19||j<0||j+3>=19)
continue;
if(qipan[i][j]+qipan[i+1][j+1]+qipan[i+2][j+2]+qipan[i+3][j+3]==3*cc)
if(i-1>=0&&j-1>=0&&qipan[i-1][j-1]==0&&i+4<19&&j+4<19&&qipan[i+4][j+4]==0)
{
cpower[x][y]=cpower[x][y]+1000;goto line5;
}
else
if(!((i-1<0||j-1<0||qipan[i-1][j]==hc)&&((i+4)<19||(j+4)<19||qipan[i+4][j+4]==hc)))
{
cpower[x][y]=cpower[x][y]+180;goto line5;
}
}
for(i=x-2,j=y-2;i<=x;i++,j++)
{
if(i<0||i+2>=19||j<0||j+2>=19)
continue;
if(qipan[i][j]+qipan[i+1][j+1]+qipan[i+2][j+2]==2*cc)
if(i-1>=0&&j-1>=0&&qipan[i-1][j-1]==0&&i+3<19&&j+3<19&&qipan[i+3][j+3]==0)
{ cpower[x][y]=cpower[x][y]+100;goto line5;}
else
if(!((i-1<0||j-1<0||qipan[i-1][j-1]==hc)&&(i+3<19||j+3<19||qipan[i+3][j+3]==hc)))
{ cpower[x][y]=cpower[x][y]+18;goto line5;}
}
for(i=x-1,j=y-1;i<=x;i++,j++)
{
if(i<0||i+1>=19||j<0||j+1>=19)
continue;
if(qipan[i][j]+qipan[i+1][j+1]==cc)
if(i-1>=0&&j-1>=0&&qipan[i-1][j-1]==0&&i-2>=0&&j-2>=0&&qipan[i-2][j-2]==0&&i+2<19&&j+2<19&&qipan[i+2][j+2]==0&&i+3<19&&j+3<19&&qipan[i+3][j+3]==0)
{ cpower[x][y]=cpower[x][y]+10;goto line5;}
}
/////////////////////////
line5: for(i=x-4,j=y-4;i<=x&&j<=y;i++,j++)
{
if(i<0||i+4>=19||j<0||j+4>=19)
continue;
if(qipan[i][j]+qipan[i+1][j+1]+qipan[i+2][j+2]+qipan[i+3][j+3]+qipan[i+4][j+4]==4*hc)
{
hpower[x][y]=hpower[x][y]+10000;goto line6;
}
}
for(i=x-3,j=y-3;i<=x;i++,j++)
{
if(i<0||i+3>=19||j<0||j+3>=19)
continue;
if(qipan[i][j]+qipan[i+1][j+1]+qipan[i+2][j+2]+qipan[i+3][j+3]==3*hc)
if(i-1>=0&&j-1>=0&&qipan[i-1][j-1]==0&&i+4<19&&j+4<19&&qipan[i+4][j+4]==0)
{
hpower[x][y]=hpower[x][y]+1000;goto line6;
}
else
if(!((i-1<0||j-1<0||qipan[i-1][j]==cc)&&((i+4)<19||(j+4)<19||qipan[i+4][j+4]==cc)))
{
hpower[x][y]=hpower[x][y]+180;goto line6;
}
}
for(i=x-2,j=y-2;i<=x;i++,j++)
{
if(i<0||i+2>=19||j<0||j+2>=19)
continue;
if(qipan[i][j]+qipan[i+1][j+1]+qipan[i+2][j+2]==2*hc)
if(i-1>=0&&j-1>=0&&qipan[i-1][j-1]==0&&i+3<19&&j+3<19&&qipan[i+3][j+3]==0)
{ cpower[x][y]=cpower[x][y]+100;goto line6;}
else
if(!((i-1<0||j-1<0||qipan[i-1][j-1]==cc)&&(i+3<19||j+3<19||qipan[i+3][j+3]==cc)))
{ hpower[x][y]=hpower[x][y]+18;goto line6;}
}
for(i=x-1,j=y-1;i<=x;i++,j++)
{
if(i<0||i+1>=19||j<0||j+1>=19)
continue;
if(qipan[i][j]+qipan[i+1][j+1]==hc)
if(i-1>=0&&j-1>=0&&qipan[i-1][j-1]==0&&i-2>=0&&j-2>=0&&qipan[i-2][j-2]==0&&i+2<19&&j+2<19&&qipan[i+2][j+2]==0&&i+3<19&&j+3<19&&qipan[i+3][j+3]==0)
{ hpower[x][y]=hpower[x][y]+10;goto line6;}
}
line6:
// for(i=x-4,j=y+4;i>=0&&j>=0&&i<19&&j<19&&qipan[i][j]==0&&i<=x&&j>=y;i++,j--)
for(i=x-4,j=y+4;i<=x&&j>=y;i++,j--)
{
if(i<0||i+4>=19||j-4<0||j>=19)
continue;
if(qipan[i][j]+qipan[i+1][j-1]+qipan[i+2][j-2]+qipan[i+3][j-3]+qipan[i+4][j-4]==4*cc)
{
cpower[x][y]=cpower[x][y]+10000;goto line7;
}
}
for(i=x-3,j=y+3;i<=x;i++,j--)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -