Java学习笔记(七):五子棋AI算法

AI百科2个月前更新 快创云
16 0

参考博客:https//www.cnblogs.com/songdechiu/p/99.html

参考:http//game.onegreen.net/wzq/HTML/6.html

最常见的基本棋型大体有以下几种:连五,活四,冲四,活三,眠三,活二,眠二。

①连五:顾名思义,五颗同色棋子连在一起,不需要多讲。

②活四:有两个连五点(即有两个点可以形成五),图中白点即为连五点。

稍微思考一下就能发现活四出现的时候,如果对方单纯过来防守的话,是已经无法阻止自己连五了。

③冲四:有一个连五点

如下面三图,均为冲四棋型。图中白点为连五点。

相对比活四来说,冲四的威胁性就小了很多,因为这个时候,对方只要跟着防守在那个唯一的连五点上,冲四就没法形成连五。

④活三:可以形成活四的三

如下图,代表两种最基本的活三棋型。图中白点为活四点。

活三棋型是我们进攻中最常见的一种,因为活三之后,如果对方不以理会,将可以下一手将活三变成活四,而我们知道活四是已经无法单纯防守住了。所以,当我们面对活三的时候,需要非常谨慎对待。在自己没有更好的进攻手段的情况下,需要对其进行防守,以防止其形成可怕的活四棋型。

其中图2-7中间跳着一格的活三,也可以叫做跳活三。

⑤眠三:只能够形成冲四的三

如下各图,分别代表最基础的六种眠三形状。图中白点代表冲四点。眠三的棋型与活三的棋型相比,危险系数下降不少,因为眠三棋型即使不去防守,下一手它也只能形成冲四,而对于单纯的冲四棋型,我们知道,是可以防守住的。

如上所示,眠三的形状是很丰富的。对于初学者,在下棋过程中,很容易忽略不常见的眠三形状,例如图2-13所示的眠三。

新手学了活三眠三后,会提出疑问,说活三也可以形成冲四啊,那岂不是也可以叫眠三?

会提出这个问题,说明对眠三定义看得不够仔细:眠三的的定义是,只能够形成冲四的三。而活三可以形成眠三,但也能够形成活四。

此外,在五子棋中,活四棋型比冲四棋型具有更大的优势,所以,我们在既能够形成活四又能够形成冲四时,会选择形成活四。

⑥活二:能够形成活三的二

如下图,是三种基本的活二棋型。图中白点为活三点。

活二棋型看起来似乎很无害,因为他下一手棋才能形成活三,等形成活三,我们再防守也不迟。但其实活二棋型是非常重要的,尤其是在开局阶段,我们形成较多的活二棋型的话,当我们将活二变成活三时,才能够令自己的活三绵绵不绝微风里,让对手防不胜防。

⑦眠二:能够形成眠三的二

图中四个为最基本的眠二棋型,细心且喜欢思考的同学会根据眠三介绍中的图2-13找到与下列四个基本眠二棋型都不一样的眠二。图中白点为眠三点。

打分思路:

每次一个棋子,找出棋盘上全部棋子的旁边位置,下图打勾位置

把打勾的位置用一个point类的数组target[]保存起来对target[]中的每个棋子评分取target[]中的棋子各个方向的4个棋子,以横向为例(取三角形位置):

根据以上得出八个方向的棋子分布,做出评分(属于哪一类)

评分规定:

综合四个方向后:

棋型分数成五(five)+0分活四/双眠四/眠四活(alive_4/high_4>1/high_4&alive_3)+分双活三(alive_3>1)+5000分眠三活三(_3&alive_3)+1000分眠四(high_4)+500分低级眠四(_4)+400分单活三(alive_3)+100分跳活三(tiaoalive_3)+90分双活二(alive_2>1)+50分活二(alive_2)+10分低级活二(lowalive_2)+9分眠三(_3)+5分眠二(_2)+2分初始值(无威胁的其他情况)+1分

在上一篇双人五子棋的基础上添加一个AI判断机制,棋盘和判断方法(Check)、重绘函数等都不变 https//blog.csdn.net/qq_363/article/details/292

分八个方向判断

可归为横纵左斜右斜四个方向,以黑棋子为例(评定黑棋子分数)

先用八个函数分别得出八个方向上除了黑色外的棋盘坐标,此时得出的是最靠黑棋子的坐标得出坐标后,再拓展,相当于以上的八个方向拓展到4个,以横向为例,如下图所示

再对应各种不同的棋型判断棋子的位置是否符合条件

AIJudge

在监听器中添加人机对战的模式:

人机模式要先找到target数组在target数组中分别对黑白棋评分机器人为白棋,取黑白棋中分数最高的点落子

其他的部分跟双人对战没有什么差别,这个AI在判断边角的地方还可以更完善一点,现在先这样吧,最后附一张效果图:

© 版权声明

相关文章