我在过去年几负责了多款游戏的AI设计工作,我从中收获的一个最基本,可能也是最令人沮丧的经验就是:创建一个出色的AI真是出奇地困难。不但制作一个符合最低标准的AI很难,即使你真的做出一个极为智能的AI也并不意味着它就是一个优秀的AI。毕竟,没有玩家希望自己被一个无情的对手彻底打倒。有些人只是希望在游戏中过把角色扮演瘾,或者希望AI能够手下留情,即便它真的很强大。即使是那些追求挑战性的玩家也并不希望输掉每场游戏。
那么,设计师或AI程序员在这一点上首先要准备什么对策呢?无论你负责的是哪种工作,答案都一样:确定你的目标。
重中之重
“编写AI太难了”已经不算什么新鲜的经验之谈了,但开发者还必须掌握另一点:让玩家看到并且相信才是最重要的。AI可以作弊,扮演或脱离某个角色,制定愚蠢的决策,怎么样都可以——让玩家乐在其中才是关键。开发者常会遇到自己完全没想到的功能竟会成为玩家最大的乐趣来源这种情况,“什么,你在游戏中最喜欢的东西居然是帽子?它只用一天时间就可以添加到游戏中!”切中要害是所有游戏开发中的最重要之事,但它对AI来说尤为关键。
AI与其他任何系统一样,如果玩家并不能从中获得乐趣,那么它编写得再好也不会有价值。开发者通常很容易被不时涌现的大量难题所困,却没有发现自己在无法为游戏体验增色的内容上花了太多精力。编写AI特别容易遇到这种情况,因为多数时候你无法知道自己的代码运行效果是否同预期一致,更别提它是否将有出色表现了。
那么,现在你已经制定了一些目标,并打算老老实实地遵循这些目标。下一步就是确定游戏AI可能发生哪些错误。如果玩家认为AI太随机或太愚蠢,那么这个AI设计就是失败的。AI开发者的职责就是尽量避免这些错误。我们首先来谈谈怎样让AI显得更合理而不仅仅是随机性。
不可设计随机AI
让AI降低随机化的一个策略就是减少其随机性。这是很明显的答案,但要注意如何让AI呈现预见性或奇异性则是一个重要的设计决策。也许在战争开始的时候,就可以通过单个回合让玩家确定所有AI单位的进攻强度,而非AI每回进攻的时候就制作一个随机强度。这些是值得开发者考虑的技巧,但最终选择哪种方式则要取决于游戏目标以及设计师想要游戏呈现的感觉。
另一个策略可能有点违反直觉,即让AI解释游戏当前发生的状况,以此让AI看起来更智能一些。某个首领是否正在组建大部队以图摧毁人类?让AI来“报信”!
你可能会想,这就是提前通知玩家,令其做好应对准备,这样AI就无法真正打垮玩家。但同时这也可以提高玩家警惕,让他们开始担忧AI下一步行动是什么,这样他们就会预先制定计划。等到AI确实带上大队人马现身时,玩家就会开始想:“没错,看来AI果然早就算计好这一步了”。如此,玩家就会更注意AI接下来的动向,比起简单地偷袭,这会让AI显得更为智能。
玩家并不清楚AI私低下有什么举动,并且他们也不在乎这一点。开发者应该向玩家呈现自己的劳动成果。开发者可以花些时间制作看似“无价值的”AI,让后者呈现电脑所知道的情况,即使这与实际游戏玩法影响不大。数行可令AI呈现智慧感的代码所发挥的作用,可能比一个庞大而复杂的智能AI系统要管用得多。
当然,AI可以神通广大,无所不能,但最重要的是它能够恰如其分地呈现在玩家面前。这就涉及了下一个重要内容……
不可设计愚蠢的AI
AI大军上门了,那么现在又该如何?让我们首先确定一下优先顺序。
避免AI显得愚笨这一比让其显得智能更重要。我的意思是什么呢?
AI被贴上“坏”标签并不是发生在它无法准确无误地执行某项操作的时候,而是在它甚至无法使尽全力杀死人类军队中的一个伤员的时候。
开发者首先要重视的就是减少AI所犯的这种明显错误。假如AI可以执行某项特殊行动,但若没有剔除其所有的“愚昧性”,这个功能并不会有多大意义。玩家只要发现AI的一个愚蠢行动,他们就会立即对自己的电脑对手失去信任感,而游戏所呈现的真实幻象也会消失殆尽。
那么,优秀的AI一般都不笨。那么,我们又该如何制作“智能”的AI?在这里我不会详述算法等具体内容,但我认为有必要提及一些普遍原则。
关键就在于分清主次,并贯穿始终。专注于制作通常很简单,但在特殊方面有过人之处的AI。千万不可制作各个方面都无懈可击的人工对手。AI背后的行动环节越少,程序员就越容易为其添加性能并优化现有内容。
要创建一个支持频繁改动的系统。AI是游戏中最常迭代的内容之一,因此要简化这个系统。假如每次开启AI代码都会让人抓狂,这就会极大降低开发者改进游戏的积极性。
让AI尽量快速地执行简单的任务,这一点非常重要。只有基本功能到位了,才可以再添加复杂功能。AI是游戏开发中少数几个崇尚简洁性的环节之一。其设计本身并不是问题,但如果在其中投入过多时间却可能产生不必要的复杂性,并且转移人们对高级目标的注意力。
神经网络和基因算法等高级AI技术极为强大,并且可以做出一些惊人的效果,但不幸的是对多数游戏而言,它们很可能是“祸害”,尤其是那些需经历多次迭代的游戏(游戏邦注:而通常情况下,游戏经过越多次迭代就有可能越完善)。用一句话强调上述观点,那就是:AI越简单,其可行性就越高,并且越容易优化。
设计师和AI
假如游戏设计师及AI程序员并非同一人,那么任何复杂游戏(尤其是战略游戏)中的AI成功的机率就会大大降低。
AI本质上只是众多游戏系统中的一个环节。所以让非游戏设计师来部署整个游戏中的这么一个重要环节,是不是有点不合适?设计师需花大量时间和精力确定所有系统的目标及关注点——AI也是其中之一。简单地将这项任务移交给程序员,往往容易酿成大错。程序员的职责是编写高效、稳定且易于维护的代码,确保游戏体验具有趣味性才是设计师的职责所在。这些目标并不具有一致性,如果不提供一个方向,程序员一般只会像对待自己往常的工作那样创建系统和编码。
但这并不是说如果游戏设计和AI设计不是同一个人或团队完成,这个游戏项目就必败无疑。但这确实需要双方团队具有高度组织性和警觉性。设计团队需要确保所有AI行为的目标,都像其他系统一样清楚标示出来。
即使是这样,设计AI也仍然具有其他游戏系统鲜见的挑战性,因此最理想的情况是游戏设计师和AI程序员就是同一个人。电脑可能擅长处理某方面事物(例如同时管理多个侦察单位),但在某此方面可能缺乏可行性(比如在27个回合中推出三次交叉进攻)。如果设计AI的人同时了解技术局限性以及玩法可行性,那么就相对更有可能实现项目中的AI目标。
总结
当AI程序员不是件容易的差事。这一工作的成果通常并不明显,而这其中又多归咎于一些很大很显示的问题。但这些灰色区域也有一些创新空间。坚定地专注于终极目标以及避免将简单事情复杂化,可能有助于AI开发者成功实现目标。