为了创建一款有趣、成功的游戏,你需要的是能够挑战你的玩家。玩家要通过过关斩将来感受到他们在不断地战胜困难。达到此目的的一个方法就是,你的游戏要有从玩家的操作中学习的能力。它能够分析玩家正在做的事情,并尝试提供具有挑战性的反击和创造更聪明的对手这样的假象。
模式匹配
无论是搜索数据模式,还是搜索对玩家的反应模式,都有许多合理的人工智能算法,它们均以不同的人或事件的需求为依据。然而,仅为了游戏设计的目的,这些算法通常显得过多,更重要的是,这些算法并未使问题得以解决。
你感兴趣的是给玩家提供一种挑战,而不是为游戏中的某个敌人创建一台完美的反抗机器。作为游戏设计师,因为游戏是你自己创造的,所以一个非常有利的条件就是你清楚每款游戏的局限性。因此,你可以创建自己的预备模式,并通过检查玩家游戏时的输入,或是不同的反应来测试这些模式。
例如,在像《街头霸王II》(Street
Fighter
2)
这样的格斗游戏中,玩家有六个可供选择的键。通过捕捉玩家何时按下键、与对手的距离、对手是否跳起等这些信息,你会找到某种特定的操作模式。当与对手距离很近时,玩家通常可能会出重拳,再逼进去摔对手;当对手跳起来时,玩家可能总是向上出拳。通过记录玩家不同的输入和当时的游戏信息,你可以为游戏的人工智能(AI)创建一个能够使用的可能的动作表。通过做这些工作,你可以“学习”玩家的移动,之后尝试着反击他们。
即时战略游戏(RTS)有一个更为复杂的攻击系统,因为鼠标点击的各次输入是不相关的。在RTS游戏中,想要学习玩家企图做什么,你需要提取玩家活动的数据来寻找一个通用的模式。这完全是一个依赖于游戏的过程,让我们用《命令与征服》(Command
&
Conquer)为例加以说明。
在《C
&
C》中,有一关的任务是建立基地和组建部队来保护自己,然后摧毁敌人及他们的基地。这里有两个学习要点:一是玩家怎样对付敌人,二是玩家如何建造基地。为了使这个例子足够清晰,我们只研究第一个学习要点,尽管第二个学习要点对反击是至关重要的。
在《C
&
C》中,作战单位间的接触是非常有限的,当他们离得足够近时,他们便开始互相攻击对方。你要搜索的第一类数据就是玩家偏爱的作战单位类型。玩家可能更喜欢用坦克冲锋,在这种情况下,你需要建造专门对付坦克的防御工事;如果玩家喜欢机枪兵,你就需要调整你的防御工事来应对这种攻击。
比起直接进攻你的基地,玩家可能会更喜欢攻击你的采矿车。这种行为可以被记录下来并被加以利用,以便你能派出军队去保护采矿车或在主基地周围建造更多的防卫设施。想要创建一个成功的学习系统,你需要找出最通用的攻击方法,然后在攻击出现时想出如何去做决定。
储存与搜索
如同任何一种数据库系统一样,一个学习系统的好坏取决于它搜索有用信息的能力。学习系统的实际内容都是依赖于游戏,但对于小型的通用数据库,存在一些基本原则。
当你搜索某种模式时,你要搜寻一个或多个特征。为了做到这点,你应当用一种易于访问的方式储存数据。这就需要你在储存数据的同时,还得考虑数据的访问方式。如果你想要将每一个数据的产生都作为相互独立的要素来保存,你就需要用易于搜索的顺序将它们保存起来。比如在《C
&
C》中,你可以用单位类型来储存。通过为每一个单位类型创建一个表格,你可以搜索全部记录快速地找到你所需要的信息,并收集到包含合适单位类型的记录。
另一种方法是将所有的数据储存在一张比率表格中。例如,攻击采矿车对攻击基地的比率,使用一种单位对另一种单位的比率。这会是一个很好的游戏中的搜索方法,因为没有任何记录需要回收、分析。你可以在游戏外对单个记录进行储存和分析。你还可以加权最新的行动,以显示在这些行动比先前的行动更重要时,你为战术上的任何改变所作的积极尝试。
总结
像任何一种其他类型的游戏AI一样,创建“学习”的方法不但需要花费很多时间,而且还需考虑不同的情形,还需经过很多测试。玩家会发现许多你预先想不到的游戏方式,所以需要建立你自己的具有足够拓展性的“学习”数据库来扩充更多的情形。
学习玩家的游戏风格和偏好,并不是创建一个不可战胜的对手或是最棒的AI的关键。它仅仅是给你的玩家提供挑战的方法。永远别让你的玩家找出一个长期对付电脑的战术方法,这样最终可以使你的游戏延长生命,并使它保持新鲜感和有挑战性。