首页 > 编程语言 > 详细

五子棋人机算法

时间:2015-08-20 02:07:35      阅读:296      评论:0      收藏:0      [点我收藏+]

AI算法:

有一个值全为零的 15*15 的二维数组 wightarray 来存储所有所有AI能下的位置的权值。

另有一个 15*15 的二维数组 indexarray 来存储每次遍历时所记录的标志位。(数组wightarray的位置镜

像数组)

?

public class AI{

******************

******************

public void wight(){

进行棋子状态的判定操作,将数组wightarray里的元素赋上应有的值。详细见下文。

}

public void draw(){

获取数组wightarray里值最大的元素的行数和列数,将棋子画在与此行数和列数相对应的

棋盘位置上。

}

}

?

?

(1)权值的分配:(有一个自己的棋子就加两分,若某一端有对方的棋就减去一分。

1连:2分,死1连:1分

2连:4分,死2连:3分

3连:6分,死3连:5分

4连:8分,死4连:7分

(2)每下一个棋子,就从所下的位置往四周遍历,并将能下的位置在数组indexarray里标志。遍历结束后再

? ? 将相应的权值赋予与标志位置相对应的数组wightarray中的元素。

? ? 如果所标志的位置已经有值,就把相应的权值与此元素的值相加,将相加所得的和作为权值赋予此位置

? ? 所对应的数组中的元素。

?

(3)在进行棋子状态的判定时:

设定权值的初始值为2.

依次遍历所下棋子的左,右,上,下,左上,左下,右上,右下方向。

1.如果某个方向上有相同的棋子就继续这个方向上的遍历,遇上一个相同颜色的棋,就将权值加2。

2.如果遇上一个对方的棋子,就结束此方向上的遍历,并将权值减1,然后进行相反方向上的遍历。

3.如果遇上一个空白位置,标志这个空白位置,然后检测空白位置的下一个位置上是否还有相同颜

色的棋子,若是有相同颜色的棋子就在循环上面的操作。

4.如果空白位置的下一个位置上没有相同颜色的棋子,就进行下一个方向上的遍历。

5.直至遍历完所有的8个方向。

6.将所有的具有标志的位置,在数组wightarray中获取相对应的元素并进行赋予权值的操作。

?

(4)下棋的操作:

? ? 调用draw()方法。

?

(5)何时执行此算法:

只创建一次AI对象。

每次玩家下完棋,调用AI对象的wight()方法和draw()方法。

AI画上白棋后,再调用一次AI对象的wight()方法。

五子棋人机算法

原文:http://lx-asymmetric.iteye.com/blog/2236514

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!