五子棋小程序算法介绍
2011-05-25 13:52
337 查看
前些天做了个连连看小程序,这几天手又痒了,用朋友的话说就是变算法仔了,这些一直在写五子棋的小程序,改了几次,终于有那么点智商了,发上来说下我的算法,先预览下游戏图片吧。
本次作品五子棋,AI算法采用广度搜索,对棋盘局势进行评分,以分数作为参考标准,对下一步行动提供依据。
棋盘局面分析:
以常理推断,当我们在下五子棋的时候是会先分析对手的棋子,是否具有足够的威胁,以此来决定是进攻还是防守,同理我们也应让电脑分析棋盘形式,以此采取下一步行动,这就需要采用评分规则了,评分细则如下:
遍历方法:
当分析好对手,当然也要分析下自己当前局势,这样就可以获得当期棋盘的局势了。
选择方式:
如果当当前得分IP比电脑来得高那么就选择防守吧,但是如果电脑的得分大于等于IP时一定要谨慎,因为我们之前分析的情况是有不足的,类似玩家可以在1颗棋子和3颗棋子之间留空,当我们也是三颗的时候我们可能就会选择进攻,这样一来玩家就获得胜利了,这时我们还需要做进一步的判断,那就是预测判断。
预测判断:
我自己写的时候是预测了一步,别小看一步,这一步要花费第一步百倍以上的计算时间,如果2、3步的话那就很久了,不过可以更精确,同样采用广度优先遍历,从第一课棋子开始,找到目标棋子,对其八个方向分别判断是否为空,为空则填上一颗,调用第一步所提到的分析状况的方法,对其进行评分,这样循环完整个棋盘,并找到最高评分,并记录下那个坐标,然后再对本方棋盘采用相同方法遍历,然后再次比对分数,如果IP来得高就根据记录的坐标下子,如果本方大于等于,则选择进攻,同样运用那个最高分坐标。
总结:
其实整体不是很难,刚写的时候没考虑这么细,只比较了一次,未做预计比较,发现写出来的智 商很低,然后再做了一次修改,发现强了很多,感谢啊吕的提示和帮我做了图,你能写出自己的五子棋小程序了么?:)
采用广度搜索,从第一个格子开始,如果是对方棋子就进行,8个方向的遍历,其实是四条线路,既上和下是一条,左和右是一条,以此类推,起点与终点需要定下来,因为是从中间开始向两边遍历(当然也可以找到一边的头再往另外一边遍历),对于上述8种情况每种记录一次,和起点终点坐标一起保存到一个Map中,五子直接返回了。在保存好后记得将该棋子标记下,因为同轴情况下,该棋子的后面一颗才知道这条线已经遍历过了,否则死三情况会被解释成两个死二。
本次作品五子棋,AI算法采用广度搜索,对棋盘局势进行评分,以分数作为参考标准,对下一步行动提供依据。
棋盘局面分析:
以常理推断,当我们在下五子棋的时候是会先分析对手的棋子,是否具有足够的威胁,以此来决定是进攻还是防守,同理我们也应让电脑分析棋盘形式,以此采取下一步行动,这就需要采用评分规则了,评分细则如下:
遍历方法:
当分析好对手,当然也要分析下自己当前局势,这样就可以获得当期棋盘的局势了。
选择方式:
如果当当前得分IP比电脑来得高那么就选择防守吧,但是如果电脑的得分大于等于IP时一定要谨慎,因为我们之前分析的情况是有不足的,类似玩家可以在1颗棋子和3颗棋子之间留空,当我们也是三颗的时候我们可能就会选择进攻,这样一来玩家就获得胜利了,这时我们还需要做进一步的判断,那就是预测判断。
预测判断:
我自己写的时候是预测了一步,别小看一步,这一步要花费第一步百倍以上的计算时间,如果2、3步的话那就很久了,不过可以更精确,同样采用广度优先遍历,从第一课棋子开始,找到目标棋子,对其八个方向分别判断是否为空,为空则填上一颗,调用第一步所提到的分析状况的方法,对其进行评分,这样循环完整个棋盘,并找到最高评分,并记录下那个坐标,然后再对本方棋盘采用相同方法遍历,然后再次比对分数,如果IP来得高就根据记录的坐标下子,如果本方大于等于,则选择进攻,同样运用那个最高分坐标。
总结:
其实整体不是很难,刚写的时候没考虑这么细,只比较了一次,未做预计比较,发现写出来的智 商很低,然后再做了一次修改,发现强了很多,感谢啊吕的提示和帮我做了图,你能写出自己的五子棋小程序了么?:)
采用广度搜索,从第一个格子开始,如果是对方棋子就进行,8个方向的遍历,其实是四条线路,既上和下是一条,左和右是一条,以此类推,起点与终点需要定下来,因为是从中间开始向两边遍历(当然也可以找到一边的头再往另外一边遍历),对于上述8种情况每种记录一次,和起点终点坐标一起保存到一个Map中,五子直接返回了。在保存好后记得将该棋子标记下,因为同轴情况下,该棋子的后面一颗才知道这条线已经遍历过了,否则死三情况会被解释成两个死二。
相关文章推荐
- AdaBoost算法程序介绍说明
- 汇编延时程序算法详解
- 并查集(Union-Find)算法介绍
- 从零开始学算法:十种排序算法介绍(中)
- SxsTrace程序追踪工具介绍及其使用
- 眼下流行的几种排课算法的介绍
- 手把手教你写S12XS128程序(10)--A/D转换模块介绍2
- 采样干扰十大滤波算法程序大全
- C语言初步;简单的算法及程序;
- 基于最小二乘算法的参数估计(matlab程序和测试)
- 图像处理(最初版)(参考了各位高手的算法和程序 集大成 还没进行优化)
- 人脸识别算法介绍
- 介绍Amazon分布式存储引擎Dynamo(Consistent-Hashing算法,NWR模型,Vector-Clock,论文pdf) zz
- Visual C++ 2010 编译的程序所需Runtime文件介绍
- 几种滤波算法的方法优缺点及算法实例程序
- Python 引包 argparse 程序执行解析命令行参数介绍
- diff程序的算法
- 图像分割:Grabcut算法小程序
- 常用加密解密算法【RSA、AES、DES、MD5】介绍和使用
- Java经典算法四十例编程详解+程序实例