五子棋小程序算法介绍

    前些天做了个连连看小程序,这几天手又痒了,用朋友的话说就是变算法仔了,这些一直在写五子棋的小程序,改了几次,终于有那么点智商了,发上来说下我的算法,先预览下游戏图片吧。

 

 

 

 

 

 本次作品五子棋,AI算法采用广度搜索,对棋盘局势进行评分,以分数作为参考标准,对下一步行动提供依据。

       棋盘局面分析:

              以常理推断,当我们在下五子棋的时候是会先分析对手的棋子,是否具有足够的威胁,以此来决定是进攻还是防守,同理我们也应让电脑分析棋盘形式,以此采取下一步行动,这就需要采用评分规则了,评分细则如下:

 

遍历方法:

当分析好对手,当然也要分析下自己当前局势,这样就可以获得当期棋盘的局势了。

选择方式:

       如果当当前得分IP比电脑来得高那么就选择防守吧,但是如果电脑的得分大于等于IP时一定要谨慎,因为我们之前分析的情况是有不足的,类似玩家可以在1颗棋子和3颗棋子之间留空,当我们也是三颗的时候我们可能就会选择进攻,这样一来玩家就获得胜利了,这时我们还需要做进一步的判断,那就是预测判断。

 

预测判断:

       我自己写的时候是预测了一步,别小看一步,这一步要花费第一步百倍以上的计算时间,如果23步的话那就很久了,不过可以更精确,同样采用广度优先遍历,从第一课棋子开始,找到目标棋子,对其八个方向分别判断是否为空,为空则填上一颗,调用第一步所提到的分析状况的方法,对其进行评分,这样循环完整个棋盘,并找到最高评分,并记录下那个坐标,然后再对本方棋盘采用相同方法遍历,然后再次比对分数,如果IP来得高就根据记录的坐标下子,如果本方大于等于,则选择进攻,同样运用那个最高分坐标。

 

总结:

           其实整体不是很难,刚写的时候没考虑这么细,只比较了一次,未做预计比较,发现写出来的智      商很低,然后再做了一次修改,发现强了很多,感谢啊吕的提示和帮我做了图,你能写出自己的五子棋小程序了么?:)

             采用广度搜索,从第一个格子开始,如果是对方棋子就进行,8个方向的遍历,其实是四条线路,既上和下是一条,左和右是一条,以此类推,起点与终点需要定下来,因为是从中间开始向两边遍历(当然也可以找到一边的头再往另外一边遍历),对于上述8种情况每种记录一次,和起点终点坐标一起保存到一个Map中,五子直接返回了。在保存好后记得将该棋子标记下,因为同轴情况下,该棋子的后面一颗才知道这条线已经遍历过了,否则死三情况会被解释成两个死二。

 

你可能感兴趣的:(五子棋小程序算法介绍)