📄 mantischessthink.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 + -