`
sooxin
  • 浏览: 257225 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

游戏之人工智能---AI漫谈

阅读更多

AI,也就是人工智能,用在游戏中,指Npc的行动规则。具体来说,就是Npc什么时候走,什么时候停;什么时候打怪,什么时候逃跑;什么时候用X技能,什么时候支援同伴。我们这里只讨论怪物AI,因为一般情况下,策划只需要描述怪物的AI,友好Npc仅仅只是站着不动或是闲逛,或是由任务脚本控制。这些在任务中讨论。

就目前的MMORPG而言,Npc的AI主要包括两个部分,寻路和行动。寻路一般使用A*算法,由专门的程序员完成;而行动相对比较简单,与系统相关性比较强,需要策划提出需求,也就是策划通常所称的“做AI”。

做AI有两种方式,一种是策划写描述,程序总结;还有一种是程序指导,策划直接写AI伪码。个人倾向于后一种方式,因为这样策划可以直接写清楚自己心里的想法,修改也方便;前一种,如果策划能清楚地描述出自己所需要的AI,并且总结出来,与程序沟通清楚,也不错。当然,如果策划懂程序,直接写AI就完了,又方便效率又高。

总之无论是哪种办法,策划都需要了解写作AI的思路。对于程序而言,策划想要游戏中的怪物怎么活动无关紧要,只要策划能讲清楚逻辑是怎样的就可以了。首先是怪物作出特定动作的条件,比如,HP小于上限的30%;然后需要说明该条件下怪物要作出怎样的行为,比如,向重生点移动。合起来就是怪物HP小于上限的30%时,向重生点移动。

不过这只是怪物的一个行为而已,离完整的AI为时尚早。了解了程序最基本的要求,策划这时需要归纳最初所设定的怪物的种种行动。比如,怪物行为有多少种,技能有多少种,有哪些种类是一致的,进行一下分类,攻击类,补血类,加速类等,有哪些效果需要处理,有哪些状态需要处理。

“条件”部分,不同的游戏会有蛮大的差别,根据策划在其它方面的综合考量,比如怪物类型、习性等,综合确定条件。比如可以设定有些怪物只在“HP少于上限的30%时”才为自己补血,也可以设定为只在“HP少于上限的10%时”才为自己补血。条件结果都确认了,就用上面的这种条件、结果格式把归纳出来的怪物所有行动都描述出来。

下一步是确定优先级别。因为AI是顺序执行的一组句子,当一个条件满足的时候就会跳出执行AI的循环,重新开始一轮循环。就好比在一个人世的轮回中,已经确定笔者有胸部,那笔者就是女人而非男人,于是循环马上结束,不考虑成为猪或者是神仙的可能性,转而开始下一轮循环。如果行动的条件发生重复,导致在一个条件下,有不确定多个结果(视脚本的执行顺序而定)。例如,HP小于等于HP上限的30%时向重生点移动;怪物隐身时站在原地不动。这两个句子条件可能同时发生,既HP小于等于HP上限的30%,又隐身。这时AI只能按照执行句子的顺序来确定究竟发生哪种情况,所以可能发生策划意料之外的结果。确定优先级别就是确定哪个句子应当先执行。

到这一步,描述的工作已经基本做完了,可以交给程序做然后测试。如果是直接写脚本的话,还需要再抽象一下,把优先级和句子合到一起形成大的AI循环。AI循环的目标就是控制从怪物生成到再生的全部行为。只要前面小的抽象和优先级做得好,合成倒不是什么问题。

以下是一个AI流程的举例:

       初始的描述:某怪物,不主动寻找敌人,没有敌人则在一定范围内随机移动,遭到攻击则增加仇恨,检查攻击者距离并进行攻击,不在攻击范围内则追击,如果移动到达最远移动范围,则返回重生点。

       细化的描述:某怪物,被动攻击,闲逛,追击,无技能
       条件结果描述:遭到攻击时攻击仇恨表上第一位的玩家;

       非战斗时闲逛(移动与Idle交替进行);
       战斗时攻击对象不在攻击范围内则向其移动;
       战斗时使用普通攻击;
       优先级设定:无(因为不存在交叉的情形)
       伪码:        IF ( 活着 & 非战斗状态 )
                     {
                               闲逛;
                               IF ( 遭到攻击 )
                               {
                                    进入战斗状态;
                                    增加仇恨;
}
                     }
                     ELSE IF ( 战斗状态 )
                     {
                               攻击仇恨列表上第一位的玩家;
                               IF( 目标不在攻击范围内 )
                                    向目标移动;
}

   考虑一个略复杂AI的话,还需要进行目标处理(效果、状态处理)、边界处理(如果离开了一定范围该怎么办)、技能选择(使用什么技能)等。寻路由于已有成熟算法,无需由策划考虑,除非有特殊需求。这些特殊处理,只要AI合成完成后加入即可。

通常来说,总会有一些效果、状态会影响到怪物的目标,比如不能移动的效果,如果策划想要怪物在不能移动时攻击最靠近它的玩家,就需要在AI中加入目标处理的部分。这些目标的变化全部用条件语句来表示,插入到战斗状态下,攻击之前即可。上例中的“攻击仇恨列表上第一位的玩家”,在不影响其它目标的前提下也可以分成两句,即“目标为仇恨列表上第一名的玩家”和“攻击目标”。通常情况下目标更改的语句不应在执行完毕之后跳出循环,否则可能导致不符合策划预期,也就是会出现怪物一直在确定目标,就是迟迟不肯动手的情形。

    边界处理是考虑到怪物会有个活动范围,比如水里的怪不会往岸上跑,万一跑到城市里面或是新手区,玩家怎么办?同时也有一些技术上限制的原因。所有涉及到移动的地方都要插入对边界的处理。这个处理通常不在AI里面做,但策划在描述的时候需要讲清楚。
技能选择据说是AI中最复杂的部分。其实只要对技能的抽象做得好,这个倒不是大问题,关键还是要与其它部分配合并充分抽象,形成一个“聪明”的AI,介个要求就比较高。总之技能选择也是攻击中的一部分,因为普通攻击也是技能的一种。只要条件不要发生冲突,技能选择应该也不难。

    目前来讲,游戏中实现的只是最基本,最简单的AI。理论上,AI可以更加复杂,实现更多的功能,用通俗的说法来讲,就是提供“AI引擎”。

    比如说,一个“智能的”游戏Npc,它应该能实时感受周围环境的变化。这一点游戏有做,但在多高的级别上感受周围环境却是一个问题。大部分游戏的Npc都只是在一个较低的层级进行探测,只了解自己周围有限半径内发生的事情,对于世界范围的一般缺乏响应,需要手动操作。

    智能Npc还应该能够对环境采取行动,包括为进一步得到信息所采取的行动。在游戏中,Npc所能采取的行动往往是一个有限的,专门为其指定的可选集。本质而言这种做法没有错,但限制了Npc的智能程度。如果Npc可以使用游戏中所有的行动,且能够拓展原来不存在的行动,那可就太棒了。不过这涉及到很多方面的难题,比如搜集信息所需要的搜索工具,学习能力等。这些想法可以通过折衷的办法做变通实现,但毫无疑问,游戏的整体结构会发生变化。

    还有一个重要问题是AI必须面对的,也就是“动机”、“信念”问题。智能的Npc应该有自己的“动机”以及“信念”,这些会指导Npc行动。但问题是“动机”及“信念”可能跟“目标”和“环境”矛盾,因此设计和实现上存在较多困难。

    上文所谈到的AI,主要以MMORPG中的怪物为例所进行的简单制作,涉及到其它类型的游戏,比如动作、格斗类,AI则更加复杂,不过道理都是一样的吧。希望能在今后的制作过程中与诸位读者一同探索AI更多的奥秘。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics