五子棋算法 + 五子棋AI 估价算法

来源:互联网 发布:高清网络摄像机厂家 编辑:程序博客网 时间:2024/05/01 19:16

     今天有人提起五子棋的算法问题,就把以前开发的源码直接贴出来了。大家去看源码学习吧

因为五子棋算法如果要写说明可能会写非常大一贴。所以在此就只做简单的原理说明,具体的下载源码研究吧。

很多人第1步肯定会问起五子棋如何判断5子相连。基本只要熟悉2维数组应用的程序员就比较容易理解了。
在此用2维数组 白字为0  黑子为1 用数组判断,很快就能判断出是否五子相连

比如用这样的小数组表示棋盘:

arr[0]=[0,0,0,0,1]
arr[1]=[1,1,1,1,1]
arr[2]=[0,1,1,1,0]
arr[3]=[0,0,1,0,0]
arr[4]=[1,0,0,0,1]

上图是一个2维数组。    用肉眼很简单就能判断出 arr1这一行5个1。存在,同理。只要从一点出去(最后下的那步)进行8方面5个点的延伸出去,如果这5个点数值都一样则表示相连了

再来就是AI(机器人),先从最基本的AI谈起。
五子棋如何做机器人呢?  简单的方法就是估价。什么是估价,就是当对手每走一步。就对整个棋牌每个点做估价。然后找出价值最高的点那就是机器人要走的点。我写的AI估价表如下,当然越详细的估价及棋路判断最多那机器人就越强。

估价表(空值)

当前玩家    连成的子数    权值
PC        成活2         1
对手        成活2        2
PC        成活3        3
对手        成活3        4
PC        成活4        5
对手        成活4        6

PC        成活5        7
对手        成活5        8

估价表(全值)

对手        成活挡2        1
PC        成活挡2        2
对手        成活空2        3
PC        成活空2        4
对手        成活挡3        5
PC        成活挡3        6
对手        成活空3        7
PC        成活空3        8
对手        成活挡4        9
PC        成活挡4        10
对手        成活空4        11
PC        成活空4        12
对手        成活挡5        14
PC        成活挡5        15

棋子数    2 3 4    5
倍率    1 2 2.5    3

PC    4 8 12
对手    3 7 11
PC    2 6 10    15
对手    1 5 9    14

公式
对手空    子数*倍率+2
PC空    子数*倍率+1
对手挡    子数*倍率
PC挡    子数*倍率-1

可能一开始看上表完全不理解,这很正常。不过在此只说原理,至于实现方法看源码就行。
用如下例子来说明什么是估价,如何做估价。
最基本的就是:用一开始的判断输赢的方法,能取到1个点延伸8方向所得到8个方向8种排列的棋子情况。然后找出这8个方向中棋子拥有最多的数量就是这个点的估价。用通俗的话来解释下。
比如一开始那个数组:

arr[0]=[0,0,0,0,1]
arr[1]=[1,?,1,1,1]
arr[2]=[0,1,1,1,0]
arr[3]=[0,0,1,0,0]
arr[4]=[1,0,0,0,1]

大家看arr[1]这列,?处的估价是多少呢? 首先从这点出发,8方向找出子最多的一条则是估价。从肉眼上看一看就明白了那就是?处的右边。有3个1。子越多,表示他的价值最高。取出子最多的一方向就是这个点的估价。

这时候大家应该知道1个点的价价了。但这是不够的,省下的就是用同样的方法,找出整个棋盘里面没有下棋子的地方,然后用同样的方法计算它们的估价。价值最高的点。就是AI要走的点。

原创粉丝点击