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

📄 gobangview.cpp

📁 单机版的五子棋游戏,利用MFC制作,具有一定的AI功能.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 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 + -