五子棋算法 + 五子棋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要走的点。
- 五子棋算法 + 五子棋AI 估价算法
- 五子棋AI算法
- 五子棋AI算法浅谈
- 五子棋AI算法 Java实现
- 五子棋AI算法 Java实现
- 五子棋AI算法-之开篇
- 超简单 五子棋Ai算法
- 【无优化】五子棋ai算法
- 五子棋AI算法的实现
- 五子棋算法
- 五子棋算法
- 五子棋算法
- 五子棋算法
- 五子棋算法
- 五子棋算法
- 五子棋算法
- 五子棋AI算法第五篇-算杀
- 五子棋AI算法第七篇-Zobrist
- 『phphot』【SD2.0大会】潘加宇趣味演讲,现场不断摇奖
- 限制文本框中只能输入数字
- SDK 实作VS2010复制中文乱码修复
- 『phphot』【SD2.0大会】毛新生:MVC Is Dead?
- 『phphot』【SD2.0大会】毛新生:“傻瓜”软件将成用户最爱
- 五子棋算法 + 五子棋AI 估价算法
- AS3数据的浅复制和深复制
- Ubuntu(Linux)使用Eclipse搭建C/C++编译环境
- 『phphot』【SD2.0大会】马亮:SOA不是产品,而是一种理念
- 强连通分支算法
- 『phphot』【SD2.0大会】裸奔编程越来越少见,框架应用越来越普遍
- 『phphot』【SD2.0大会】林锐:项目经理应介入开发 以免最终产品变“废物”
- 『phphot』【SD2.0大会】雷鸣:把设计当成一门艺术
- 『phphot』【SD2.0大会】揭秘微软研发“三权分立”和四大“密宝”