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

📄 mantischessthink.cpp

📁 一个博弈论的经典游戏,规则是两边轮流走棋,走到最后一步者胜.先手只有一种走法能胜电脑,试试看
💻 CPP
字号:
/***************************************************************
  MantisChessThink.cpp : MantisChess 人工智能部分

  JiaJu   2004.10.16

******************************************************************/

#include "StdAfx.h"
#include "MantisChessDef.h"
#include "MantisChessThink.h"

/******************************************************************
Think:			求最佳走法

参数:
tmap:			各棋位状态
tmanposition:	32棋子的坐标
tside:			轮到哪一放走
resultman:		结果移动的棋子
resultpoint:	结果移动目标位置

返回值:			成功返回TRUE,否则返回FALSE
******************************************************************/
BOOL Think(int tmap[6][13],POINT tmanposition[6],int &tside,int &resultman, POINT &resultpoint)
{
	int a[4];
	a[1]=tmanposition[0].y-tmanposition[3].y-1;
	a[2]=tmanposition[1].y-tmanposition[4].y-1;
	a[3]=tmanposition[2].y-tmanposition[5].y-1;

        int cc=0;
	    if(a[1]==2)cc++;
		if(a[1]==5)cc++;
		if(a[1]==7)cc++;
		if(a[2]==2)cc++;
		if(a[2]==5)cc++;
		if(a[2]==7)cc++;
		if(a[3]==2)cc++;
		if(a[3]==5)cc++;
		if(a[3]==7)cc++;
		if(cc>=3&&(a[1]+a[2]+a[3])==14)
		{
			if(a[1]==7)
			{
				resultman=3;
				resultpoint.x=1;
				resultpoint.y=tmanposition[3].y+1;
				return TRUE;
			}
			if(a[2]==7)
			{
				resultman=4;
				resultpoint.x=2;
				resultpoint.y=tmanposition[4].y+1;
				return TRUE;
			}
			if(a[3]==7)
			{
				resultman=5;
				resultpoint.x=3;
				resultpoint.y=tmanposition[5].y+1;
				return TRUE;
			}
		}

		cc=0;
	    if(a[1]==2)cc++;
		if(a[1]==4)cc++;
		if(a[1]==6)cc++;
		if(a[2]==2)cc++;
		if(a[2]==4)cc++;
		if(a[2]==6)cc++;
		if(a[3]==2)cc++;
		if(a[3]==4)cc++;
		if(a[3]==6)cc++;
		if(cc>=3&&(a[1]+a[2]+a[3])==12)
		{
			if(a[1]==6)
			{
				resultman=3;
				resultpoint.x=1;
				resultpoint.y=tmanposition[3].y+1;
				return TRUE;
			}
			if(a[2]==6)
			{
				resultman=4;
				resultpoint.x=2;
				resultpoint.y=tmanposition[4].y+1;
				return TRUE;
			}
			if(a[3]==6)
			{
				resultman=5;
				resultpoint.x=3;
				resultpoint.y=tmanposition[5].y+1;
				return TRUE;
			}
		}

		cc=0;
	    if(a[1]==1)cc++;
		if(a[1]==4)cc++;
		if(a[1]==5)cc++;
		if(a[2]==1)cc++;
		if(a[2]==4)cc++;
		if(a[2]==5)cc++;
		if(a[3]==1)cc++;
		if(a[3]==4)cc++;
		if(a[3]==5)cc++;
		if(cc>=3&&(a[1]+a[2]+a[3])==10)
		{
			if(a[1]==4)
			{
				resultman=3;
				resultpoint.x=1;
				resultpoint.y=tmanposition[3].y+2;
				return TRUE;
			}
			if(a[2]==4)
			{
				resultman=4;
				resultpoint.x=2;
				resultpoint.y=tmanposition[4].y+2;
				return TRUE;
			}
			if(a[3]==4)
			{
				resultman=5;
				resultpoint.x=3;
				resultpoint.y=tmanposition[5].y+2;
				return TRUE;
			}
		}

		cc=0;
	    if(a[1]==1)cc++;
		if(a[1]==2)cc++;
		if(a[1]==3)cc++;
		if(a[2]==1)cc++;
		if(a[2]==2)cc++;
		if(a[2]==3)cc++;
		if(a[3]==1)cc++;
		if(a[3]==2)cc++;
		if(a[3]==3)cc++;
		if(cc>=3&&(a[1]+a[2]+a[3])==6)
		{
			if(a[1]==3)
			{
				resultman=3;
				resultpoint.x=1;
				resultpoint.y=tmanposition[3].y+3;
				return TRUE;
			}
			if(a[2]==3)
			{
				resultman=4;
				resultpoint.x=2;
				resultpoint.y=tmanposition[4].y+3;
				return TRUE;
			}
			if(a[3]==3)
			{
				resultman=5;
				resultpoint.x=3;
				resultpoint.y=tmanposition[5].y+3;
				return TRUE;
			}
		}

	    
		if(a[1]<2&&a[2]<2&&a[3]<2&&(a[1]+a[2]+a[3])==2)
		{
			if(a[1]==1)
			{
				resultman=3;
				resultpoint.x=1;
				resultpoint.y=tmanposition[3].y+1;
				return TRUE;
			}
			if(a[2]==1)
			{
				resultman=4;
				resultpoint.x=2;
				resultpoint.y=tmanposition[4].y+1;
				return TRUE;
			}
			if(a[3]==1)
			{
				resultman=5;
				resultpoint.x=3;
				resultpoint.y=tmanposition[5].y+1;
				return TRUE;
			}
		}



	if(a[1]+a[2]!=18&&a[2]+a[3]!=18&&a[1]+a[3]!=18)
	{
	if(a[1]==a[2])
	{
		resultman=5;
		resultpoint.x=3;
		resultpoint.y=tmanposition[2].y-1;
		return TRUE;
	}
	if(a[1]==a[3])
	{
		resultman=4;
		resultpoint.x=2;
		resultpoint.y=tmanposition[1].y-1;
		return TRUE;
	}
	if(a[2]==a[3])
	{
		resultman=3;
		resultpoint.x=1;
		resultpoint.y=tmanposition[0].y-1;
		return TRUE;
	}
	}
	else
	{
		if(a[1]+a[2]+a[3]==20)
		{
			if(a[1]==2){
				resultman=4;
				resultpoint.x=2;
				resultpoint.y=tmanposition[4].y+2;
				return TRUE;
			}
			if(a[2]==2){
				resultman=3;
				resultpoint.x=1;
				resultpoint.y=tmanposition[3].y+2;
				return TRUE;
			}
			if(a[3]==2){
				resultman=3;
				resultpoint.x=1;
				resultpoint.y=tmanposition[3].y+2;
				return TRUE;
			}
		}
	}


	


	int c=0;
	for(int i=0;i<100;i++)
	{
		if(a[1]==ai[i][0])c++;
		if(a[1]==ai[i][1])c++;
		if(a[1]==ai[i][2])c++;
		if(a[2]==ai[i][0])c++;
		if(a[2]==ai[i][1])c++;
		if(a[2]==ai[i][2])c++;
		if(a[3]==ai[i][0])c++;
		if(a[3]==ai[i][1])c++;
		if(a[3]==ai[i][2])c++;
		if(c>=2&&(a[1]+a[2]+a[3]-ai[i][0]-ai[i][1]-ai[i][2])>0)
		{
			
			
			
			
			for(int j=1;j<4;j++)
				if(a[j]!=ai[i][0]&&a[j]!=ai[i][1]&&a[j]!=ai[i][2])
				{
					resultman=j+2;
					resultpoint.x=j;
					resultpoint.y=tmanposition[j+2].y+(a[1]+a[2]+a[3]-ai[i][0]-ai[i][1]-ai[i][2]);
				    return TRUE;
				}
			if(a[1]==a[2])//1,9,9>>>1,8,9
			{
				resultman=3;
				resultpoint.x=1;
				resultpoint.y=tmanposition[3].y+(a[1]+a[2]+a[3]-ai[i][0]-ai[i][1]-ai[i][2]);
				return TRUE;
			}
			if(a[1]==a[3])
			{
				resultman=3;
				resultpoint.x=1;
				resultpoint.y=tmanposition[3].y+(a[1]+a[2]+a[3]-ai[i][0]-ai[i][1]-ai[i][2]);
				return TRUE;
			}
			if(a[2]==a[3])
			{
				resultman=4;
				resultpoint.x=2;
				resultpoint.y=tmanposition[4].y+(a[1]+a[2]+a[3]-ai[i][0]-ai[i][1]-ai[i][2]);
				return TRUE;
			}
		}
		c=0;
	}

	


	return FALSE;

}

⌨️ 快捷键说明

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