魔兽争霸3的 AI 是怎样实现的

发表于2015-08-24
评论0 5.8k浏览

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

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

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

何为分层状态机?

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

  • 基础状态机:直接控制角色动画、提供基础动作实现,为上层提供支持。
  • 行为状态机:分解动作,躲避跑、直线移动、原地站立、要球、传球、射球、追球、打人、跳。
  • 角色状态机:实现更复杂的逻辑,比如防射求、篮板等都是由N次直线运动+跳跃或者打人完成。

402bc470872ba0f0e16b6073d22f864b_r

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

何为决策支持系统?

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

45a8bff67eb5b8426ee2816e884cb3e9_r

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

1b0b762f3d3f63996939dfffc431ddff_r

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

a0d9a0982b6b274f516568c3205b7d81_r

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

bbfa32ab0dea9642a990fb1aca66736e_r

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

575d6c126ef3a6a9c3a99b980903fe83_r

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

39f117b6972f3db144d888ee2c362f65_r

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

4b91bc98b2620fe559d9f2bd2ea4f6d3_r

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

80b45a8384fe265f6ee9ab86e35caa87_r

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

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

何为团队角色分配?

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

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

话题总结

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

概率统计

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

神经网络

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

作者:韦易笑

 

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引