导读:作为实际开发过AI的人,拿一份五年前的代码,以最难的体育竞技类游戏为例,来科普一下,什么叫做游戏团队策略,什么叫做分层状态机?具体该如何落地到代码?如果你能实现体育竞技的AI,那即时战略只是小事一桩。

  国内真正做过游戏AI的很少,说概念的人很多,所以看了半天离实际编码还是很远,不知道该怎么入手,因为国内游戏主要以MMO和卡牌为主,RTS比较少,体育竞技类游戏更少,没几个真正写过强AI代码的。而从AI的难度上来看,是:MMO < FPS < RTS < 体育竞技。作为实际开发过AI的人,拿一份五年前的代码,以最难的体育竞技类游戏为例,来科普一下,什么叫做游戏团队策略,什么叫做分层状态机?具体该如何落地到代码?如果你能实现体育竞技的AI,那即时战略只是小事一桩。

  硬派游戏AI,不是虚无缥缈的神经网络,用神经网络其实是一个黑洞,把问题一脚踢给计算机,认为我只要训练它,它就能解决一切问题的懒人想法。更不是遗传算法和模糊逻辑,你想想以前8位机,16位机上就能有比较激烈对抗的足球游戏、篮球游戏,那么差的处理器能做这些计算么?

  硬派游戏AI,就是状态机和行为树。状态机是基本功,行为树可选(早年AI没行为树这东西,大家都是hard code的)。大部分人说到这里也就没了,各位读完还是无法写代码。因为没有把最核心的三个问题讲清楚,即:分层状态机、决策支持系统、以及团队角色分配。下面分类介绍:

  何为分层状态机?

  每个人物身上,有三层状态机:基础层状态机、行为层状态机、角色层状态机。每一层状态机解决一个层次的复杂度,并对上层提供接口,上层状态机通过设置下层状态机的目标实现更复杂的逻辑。

  基础状态机:直接控制角色动画、提供基础动作实现,为上层提供支持。

  行为状态机:分解动作,躲避跑、直线移动、原地站立、要球、传球、射球、追球、打人、跳。

  角色状态机:实现更复杂的逻辑,比如防射求、篮板等都是由N次直线运动+跳跃或者打人完成。

  每一层状态机都是通过为下一层状态机设定目标来实现控制(目标设定后,下层状态机将自动工作,上层不用关心动画到底播到哪了,现在到底是跑是跳),从而为上层提供更加高级拟人化的行为,所有状态机固定频率更新(如每秒10次),用于判断状态变迁和检查底层目标完成情况。最高层的角色状态机的工作由团队AI来掌控,即角色分配的工作。而行为状态机以上的状态抉择,比如回防,到底是跑到哪一点,射球,到底在哪里起跳,路径是怎样的,则由决策支持系统提供支持。

  何为决策支持系统?

  状态机为角色的大脑,而决策支持系统是眼睛和耳朵,常见的工具有势力图(Influence Map)和白板(相当于不同角色间喊话),其中势力图比较常用,篮球游戏AI势力图可以用下面几张图表示:

  势力图1:于防守篮板距离的map,每格分值为最远距离减去该格到篮板所在格子的距离

  势力图2:进攻篮板距离的map,每个分值为最远距离减去该格到篮板距离,篮板后为0

  势力图3:同敌人距离,每个敌人有影响范围,范围内,离敌人越近分越低,范围重叠选低的

  势力图4:同所有队友目标位置距离map,打分方法类似上图

  势力图5:与每个队友目标位置距离的map,标识单个队友目标位置距离的map

  势力图6:现实传球可行性的map,分数越高,越容易把球传到该格子上

  势力图7:容易把球传出的位置map,越容易直接传球给队友的区域分数越高

  势力图8:综合map,把以上map按一定加权求和。球员有合法目标区域,便于实现内线游走和外线游走

  每个球员性格不同,权值也不同,有保守的球员,有喜欢冒险的球员,权值不同而已。这些势力图都是为了给上面的三层状态机和团队状态机提供决策支持的。

  何为团队角色分配?

  每一层状态机为下一层设定一个目标,让下层自动工作,顶层角色层的目标则由最高层的团队ai进行战术指导。

  团队状态机跟据当前的游戏情况确定当前首要目标(进攻或者防守),又根据当前的势力图等信息,确定进攻或者防守的具体战略(比如中路突破、盘路包抄、下底传中等),最终为当前己方的所有角色分配一个新的任务,即设定角色层状态机的新目标,确定他是做主攻还是做助攻,还是联防还是策应。具体该怎么联防,怎么策应,那就是角色层状态机的事情了。

  话题总结

  其实团队AI没那么玄乎,任何问题就是一个编程的建模问题,而最复杂的体育竞技类游戏的AI策略,上文已经给出模型,相信各位略加修改即可使用。写状态机是游戏AI的硬功夫,如果状态机逻辑经常改变或者项目规模大了以后可以考虑引入决策树来控制状态机,程序提供一系列接口,然后用可视化的编辑器进行更改,感兴趣的人可以参考决策树相关文章。

  概率统计

  如果上面这些逻辑都实现了,这时候才可以辅助与概率统计来让角色具备学习特性,比如统计某个策略对对手的成败情况,用来支撑下一次决策,这样能够逐步发现对手的弱点,还可以统计所有用户的大数据,来确定某种情况下,选择什么策略,能够对付60%的用户。

  神经网络

  在上面所有逻辑都实现了,你调试好了,玩着比较顺畅的时候,再在团队角色分配处尝试使用神经网络或者模糊逻辑,同样是学习大数据,来引入一些不可控的人性化的成分,让游戏更加有意思。(EA的 FIFA 20XX号称引入神经网络,Call of Duty的AI也号称引入了神经网络和学习机制)。确实能让游戏更有趣一点,但是仅仅有趣了一点而已。

即时战略游戏的AI是怎样实现的?相关推荐

  1. 过去十年,我们用了哪些即时战略游戏训练AI?

    译者 | 李梦 编辑 | Vincent AI前线出品| ID:ai-front AI 前线导语:"在 RTS 游戏中进行 AI 研究有着悠久的历史.在过去的十多年里,研究人员一直致力于构建 ...

  2. Unity实战 RTS3D即时战略游戏开发(十二) 战斗AI的控制

    大家好,我是Zander,我们接着来开发Rts3D即时战略游戏开发.这节课我们接着来讲AI的相关部分:战斗AI. 游戏中要进行战斗,就需要让AI会攻击,首先在一定范围内如果有足够的单位则进行攻击,在A ...

  3. 即时战略游戏将领指挥AI方案设想(转帖)

    <<C&C>>的巨大成功标志着即时战略游戏的正式崛起,而到了今年,即时战略游戏无疑已占据了游戏的主导位置,然而,<<C&C>>及< ...

  4. Unity实战 RTS3D即时战略游戏开发(三)

    大家好,我是Zander,我们接着来开发Rts3D即时战略游戏开发.上一章我们为场景添加了Manager,以及玩家初始化信息. 下面我们来完成以下功能:导航网格的设置.摄像机的操控.以及制作单位预设. ...

  5. rts游戏服务器源码,unity即时战略游戏源码Real-time strategy (RTS) game kit

    unity即时战略游戏源码Real-time strategy (RTS) game kit (Modern Tactics) 1.2.1 Requires Unity 4.5.2 or    hig ...

  6. rts游戏服务器源码,unity即时战略游戏引擎RTS Engine 1.2.0 源码

    描述 unity即时战略游戏引擎RTS Engine 1.2.0 源码 Requires Unity 5.6.1 or  higher. The Unity RTS Engine provides a ...

  7. 要塞十字军东征HD for Mac(即时战略游戏)

    要塞十字军东征HD for Mac以中世界十字军东征为背景,十字军东征是人类历史上规模最大的宗教战争,游戏整体非常有趣,要塞十字军东征 Mac版是一个由欧洲历史中最著名的十字军东征为历史事件所设计的游 ...

  8. Unity实战 RTS3D即时战略游戏开发(一)

    大家好,我是Zander,很乐意在这讲授一个关于用Unity创建3D即时战略游戏的开发,在这个游戏中,你能创建属于自己的即时战略游戏,包括完整的:爆炸.敌人AI.单位.建筑地形.导航AI.战斗.资源还 ...

  9. 盘点即时战略游戏中高实用性寻路算法

    编者按:在即时战略(RTS)游戏中,寻路系统可谓其核心要素之一,但它的算法也是较难攻克的内容之一.在这篇文章中,来自iSamurai工作室的伍一峰为广大游戏开发者带来了他对即时战略游戏寻路算法的深入思 ...

最新文章

  1. 海南省长沈晓明:海南自贸区先导性项目取得阶段性进展
  2. [爬虫学习笔记]C# 使用 ScrapySharp 并行下载天涯图片
  3. win10连接计算机,如何在win10中连接计算机和打印机
  4. 成功解决Error while trying to retrieve text for error ORA-12154
  5. VS2008打包(含水晶报表)与安装注意事项
  6. array_reverse_PHP array_reverse()函数与示例
  7. SPRING IN ACTION 第4版笔记-第二章-001-用@Autowired\@ComponentScan、@Configuration、@Component实现自动装载bean...
  8. php mysql 正则表达式_mysql正则表达式(Regexp)的示例详解
  9. java 建立ssh隧道_如何使用IntelliJ和JDBC SSH隧道并连接到数据库?
  10. ready to study design pattern
  11. 用layui实现下拉框select多选,取值
  12. 安装3dmax2020版本注意事项
  13. Java_Dubbo视频教程-雷丰阳-专题视频课程
  14. WMS软件哪个好?排名怎样
  15. itools 苹果录屏大师 java_itools录屏大师
  16. 具体数学_计算机科学基础(第2版)pdf
  17. 通过UDP解析域名 DNS解析
  18. Opencv求轮廓的中心点坐标
  19. Java入门需要了解(面向对象之接口-十四)
  20. ktt算法 约化_深度学习面试题

热门文章

  1. “己所不欲,勿施于人”实乃一切道德之根本
  2. python爬虫论坛代码_如何使用Python爬虫 抓取论坛关键字出现频率!
  3. ssh+mysql实现的Java web论坛系统源码
  4. getline读取多行
  5. 克隆模式java_java基础之----23种设计模式(克隆模式)
  6. CSM认证、CSPO认证 哪种认证适合您?
  7. RAID 0/ 1/ 5/ 10./ JBOD是什么模式?什么意思?
  8. google hack搜索引擎常用总结
  9. 广州美国领事馆面签经历
  10. stream benchmark 介绍