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

📄 ai_kua.cpp

📁 搜索算法部分使用minmax递归
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// AI_kua.cpp: implementation of the CAI_kua class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Othello.h"
#include "AI_kua.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

// AI_kua.cpp: implementation of the CAI_kua class.
//
//////////////////////////////////////////////////////////////////////
#define N1 39
#define N2 37
#define N3 29
#define N4 26


CAI_kua::CAI_kua()
{
	SetZero();

}

CAI_kua::~CAI_kua()
{

}

//终局搜索,采用黑白子个数的评估函数
int CAI_kua::EvaluateEnd(int blackorwhite)
{
	int minus;
	if(blackorwhite==1)
		minus=2;
	else
		minus=1;
	int	value;
	int	valuepositive=0;
	int	valueminus=0;
	for(int i=1;i<9;i++)
		for(int j=1;j<9;j++)
		{
			if(attribute[i][j]==blackorwhite)
				valuepositive++;
			if(attribute[i][j]==minus)
				valueminus++;
		}
	value=valuepositive-valueminus;
	return value;


}







// 稳定子法的评估函数
int CAI_kua::EvaluateStable(int blackorwhite)
{
	int minus;
	if(blackorwhite==1)
		minus=2;
	else
		minus=1;
	int	value;
	int valuepositive=0;
	int valueminus=0;
	int i,j,k,k1,k2;
	for(i=1;i<9;i++)
		for(j=1;j<9;j++)
			valueAI[i][j]=5;
	//初级设定,位置值
	valueAI[1][1]=valueAI[1][8]=valueAI[8][1]=valueAI[8][8]=600;
	valueAI[2][2]=valueAI[2][7]=valueAI[7][2]=valueAI[7][7]=-51;
	valueAI[1][2]=valueAI[1][7]=valueAI[2][1]=valueAI[2][8]=valueAI[7][1]=valueAI[7][8]=valueAI[8][2]=valueAI[8][7]=4;
	valueAI[3][3]=valueAI[3][6]=valueAI[6][3]=valueAI[6][6]=4;
	valueAI[1][3]=valueAI[1][6]=valueAI[3][1]=valueAI[3][8]=valueAI[6][1]=valueAI[6][8]=valueAI[8][3]=valueAI[8][6]=16;
	valueAI[1][4]=valueAI[1][5]=valueAI[4][1]=valueAI[4][8]=valueAI[5][1]=valueAI[5][8]=valueAI[8][4]=valueAI[8][5]=12;
	valueAI[2][3]=valueAI[2][6]=valueAI[3][2]=valueAI[3][7]=valueAI[6][2]=valueAI[6][7]=valueAI[7][3]=valueAI[7][6]=-4;
	valueAI[2][4]=valueAI[2][5]=valueAI[4][2]=valueAI[4][7]=valueAI[5][2]=valueAI[5][7]=valueAI[7][4]=valueAI[7][5]=-5;
	valueAI[4][4]=valueAI[4][5]=valueAI[5][4]=valueAI[5][5]=8;

	//横方向保证稳定的子评分
	for(i=1;i<9;i++)
		for(j=1;j<9;j++)
		{
			if(attribute[i][1]==blackorwhite&&attribute[i][8]==blackorwhite)
			{
				bool control1=true;
				for(k=1;k<9;k++)
				{
					if(attribute[i][k]==0)
						control1=false;
				}
				if(control1==true)
					valueAI[i][j]+=N1;
			}
			else	
			{
				bool	control2=true;
				for(k=j;k<9;k++)
				{
					if(attribute[i][k]!=blackorwhite)
						control2=false;
				}
				if(control2==true)
					valueAI[i][j]+=N1;
				if(control2!=true)
				{
					bool	control3=true;
					for(k=j;k>0;k--)
					{
						if(attribute[i][k]!=blackorwhite)
							control3=false;
					}
					if(control3==true)
						valueAI[i][j]+=N1;
				}
			}
		}
	//纵向保证稳定的子评分
		for(j=1;j<9;j++)
			for(i=1;i<9;i++)
			{
				if(attribute[1][j]==blackorwhite&&attribute[8][j]==blackorwhite)
				{
					bool control1=true;
					for(k=1;k<9;k++)
					{
						if(attribute[k][j]==0)
							control1=false;
					}
					if(control1==true)
						valueAI[i][j]+=N2;
				}
				else	
				{
					bool	control2=true;
					for(k=i;k<9;k++)
					{
						if(attribute[k][j]!=blackorwhite)
							control2=false;
					}
					if(control2==true)
						valueAI[i][j]+=N2;
					if(control2!=true)
					{
						bool	control3=true;
						for(k=i;k>0;k--)
						{
							if(attribute[k][j]!=blackorwhite)
								control3=false;
						}
						if(control3==true)
							valueAI[i][j]+=N2;
					}
				}
			}
	//左上至右下斜方向稳定子评分
		for(i=1;i<9;i++)			//右上半部分
			for(j=i;j<9;j++)
			{
				if(attribute[1][j-i+1]==blackorwhite&&attribute[8-j+i][8]==blackorwhite)
				{
					bool	control1=true;
					for(k1=1,k2=j-i+1;k1<=8-j+i,k2<=8;k1++,k2++)
					{
						if(attribute[k1][k2]==0)
							control1=false;
					}
					if(control1==true)
						valueAI[i][j]+=N3;
				}
				else
				{
					bool	control2=true;
					for(k1=i,k2=j;k1>=1,k2>=j-i+1;k1--,k2--)
					{
						if(attribute[k1][k2]!=blackorwhite)
							control2=false;
					}
					if(control2==true)
						valueAI[i][j]+=N3;
					if(control2==false)
					{
						bool	control3=true;
						for(k1=i,k2=j;k1<=8-j+i,k2<=8;k1++,k2++)
						{
							if(attribute[k1][k]!=blackorwhite)
								control3=false;
						}
						if(control3==true)
							valueAI[i][j]+=N3;
					}
				}
			}
	//左下半部分
	for(i=1;i<9;i++)
		for(j=1;j<i;j++)
		{
			if(attribute[i-j+1][1]==blackorwhite&&attribute[8][j+8-i]==blackorwhite)
			{			
					bool	control1=true;
					for(k1=i-j+1,k2=1;k1<=8,k2<=j+8-i;k1++,k2++)
					{
						if(attribute[k1][k2]==0)
							control1=false;
					}
					if(control1==true)
						valueAI[i][j]+=N3;
				}
				else
				{
					bool	control2=true;
					for(k1=i,k2=j;k1>=i-j+1,k2>=1;k1--,k2--)
					{
						if(attribute[k1][k2]!=blackorwhite)
							control2=false;
					}
					if(control2==true)
						valueAI[i][j]+=N3;
					if(control2==false)
					{
						bool	control3=true;
						for(k1=i,k2=j;k1<=8,k2<=j+8-i;k1++,k2++)
						{
							if(attribute[k1][k]!=blackorwhite)
								control3=false;
						}
						if(control3==true)
							valueAI[i][j]+=N3;
					}
				}
		}
//////////////////////////////////////////////////////////////////////////////////

	//左下至右上稳定子评分
		for(i=1;i<9;i++)			//左半部分
			for(j=1;(i+j)<=9;j++)
			{
				if(attribute[i+j-1][1]==blackorwhite&&attribute[1][j+i-1]==blackorwhite)
				{
					bool	control1=true;
					for(k1=i+j-1,k2=1;k1>=1,k2<=j+i-1;k1--,k2++)
					{
						if(attribute[k1][k2]==0)
							control1=false;
					}
					if(control1==true)
						valueAI[i][j]+=N4;
				}
				else
				{
					bool	control2=true;
					for(k1=i,k2=j;k1<=i+j-1,k2>=1;k1++,k2--)
					{
						if(attribute[k1][k2]!=blackorwhite)
							control2=false;
					}
					if(control2==true)
						valueAI[i][j]+=N4;
					if(control2==false)
					{
						bool	control3=true;
						for(k1=i,k2=j;k1>=1,k2<=j+i-1;k1--,k2++)
						{
							if(attribute[k1][k]!=blackorwhite)
								control3=false;
						}
						if(control3==true)
							valueAI[i][j]+=N4;
					}
				}
			}
	//右半部分
			for(i=1;i<9;i++)
				for(j=8;(i+j)>9;j--)
				{
					if(attribute[8][j+i-8]==blackorwhite&&attribute[i+j-8][8]==blackorwhite)
					{
						bool	control1=true;
						for(k1=8,k2=j+i-8;k1>=i+j-8,k2<=8;k1--,k2++)
						{
							if(attribute[k1][k2]==0)
								control1=false;
						}
						if(control1==true)
							valueAI[i][j]+=N4;
					}
					else
					{
						bool	control2=true;
						for(k1=i,k2=j;k1<=8,k2>=j+i-8;k1++,k2--)
						{
							if(attribute[k1][k2]!=blackorwhite)
								control2=false;
						}
						if(control2==true)
							valueAI[i][j]+=N4;
						if(control2==false)
						{
							bool	control3=true;
							for(k1=i,k2=j;k1>=i+j-8,k2<=8;k1--,k2++)
							{
								if(attribute[k1][k]!=blackorwhite)
									control3=false;
							}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -