角色扮演游戏中敌人AI(人工智能)的设计方法
角色扮演游戏,Role Play Game(RPG),它总的来说包括三大类:动作类(即时)角色扮演;回合制角色扮演游戏;战棋类角色扮演。这三类游戏在遭遇敌人时,就是一场战斗要展开的开始,那么,游戏中的敌人是按照什么样的机制来运作的呢?换句话说,它们的AI(人工智能)是如何工作的呢?本文将重点就这个话题进行讨论。
在我们看来,这些敌人的操作是必须在一定程度上模拟人脑的思考的。也就是说,在什么情况下作出什么反应、什么应对,这都应该是比较有针对性,符合一定的逻辑的。例如:一个拥有治疗技能的敌人,在它的生命值所剩无几时,它就应该会思考得出一个反应,对自己进行治疗。这是设计师必须给予敌人AI设计的逻辑应对部分。
光有逻辑应对能力的设计是不够的。因为,如果敌人时刻都能够进行最优化的、最正确的判断时,那么玩家将很难打败敌人。这时候,我们必要多考虑一些参数,来限制敌人的反应和应对能力:
1)思考时间。把敌人的反应和应对判断分成若干个时间片段。某个时间片段,敌人可以完全正确地作出100%的反应;某个时间片段,敌人只可以正确判断其中50%的情况并作出反应;某个时间片段,敌人则只可以对其中30%的情况进行正确判断并作出反应;某个时间片段,敌人甚至是不会作出任何反应。然后,这些时间片段将周而复始地进行循环、或随机进行闪现。
2)技能和物品的使用时间间隔。如果让敌人无休止、无节制地对自己使用同一类治疗技能或同一种治疗物品,那么,最终就可能会导致玩家无法去杀死这个敌人了。如果敌人每两次使用同一类治疗技能或同一种治疗物品时,之间都强制存在一段时间间隔时,那么即使敌人的治疗技能非常强大,不过,只要玩家能够在一个周期内对它造成的攻击伤害高于治疗回复就可以了。同样地,如果敌人无休止、无节制地对玩家使用必杀技,那么玩家将很难负荷得起。如果每两次发动必杀技能之间强制存在一段时间间隔,这就给予了玩家一段自我恢复的时间,只要玩家能够在敌人下次必杀技使用前恢复过来,就能应对持久的战斗。
如果敌人只是一个完全不动的木桩,那么以上的逻辑反应和限制反应两点的设计就足够了。不过,实际上很多游戏中,敌人并不是一成不变地站在原地的。这时候,我们就需要为它设计“路径”了。这种“路径”设计包括:
1)巡逻路径。敌人没有发现玩家时,它的行走范围是怎样的、在这个行走范围内,敌人是按照什么样的路线进行行走的,这就是巡逻路径。巡逻路径可以是让敌人从一个起点开始到一个终点后进行等待;也可以是在一段路程上不断重复地来回或循环走动。
2)侦察范围和侦察条件。侦察范围可以理解为敌人的视力,视力看得越远、范围越广,那么你靠近敌人时就越容易被敌人发现;相反,敌人视力是近视的话,那么你就可以在不被敌人发现的情况下更贴近敌人了。侦察条件则是对侦察范围的一个补充说明。例如敌人的视力不能穿过墙壁,那如果玩家站在墙壁后,即使是在敌人的侦察范围内,敌人也不会发现玩家。这就是侦察条件的其中之一。
3)缉捕路径。当敌人发现玩家时,采用走什么样的路径去辑捕呢?这也是需要考虑的问题。如果敌人和玩家之前没有任何障碍物,那么敌人直接靠近玩家就可以了,不过,如果敌人和玩家之间存在障碍物、或者存在地势高低差异时,敌人就需要绕路去缉捕玩家了。
“反应逻辑、限制反应、路径”这是角色扮演游戏中,敌人AI设计的三个要点。把握好这三点的组合,就能够编制出敌人适当的运作机制。
下面我们来看几个实例:
动作类角色扮演游戏
如上图:
虚线是敌人的巡逻路径,敌人就是沿着这条路径循环巡逻的。灰色的梯形是敌人的侦察范围,当敌人行走到B点,而玩家又恰好走到C点时(玩家初始位置在A点),敌人就会发现玩家,并上前进行攻击。
1)假设敌人有100HP,100MP,普通攻击伤害5HP、每2秒攻击一次,技能攻击伤害10HP、消耗50MP、每两次技能间隔时间4秒。而玩家有100HP,普通攻击伤害5HP、每1秒攻击一次。
敌人的判断反应是为玩家制造尽可能大的伤害,所以技能攻击间隔时间一到就会发动技能攻击。那么:
玩家将在20秒内对敌人造成100HP(5HP*20)的伤害导致敌人死亡。
而敌人则在前10秒对玩家造成25HP(5HP*5)的普通攻击伤害,20HP(10HP*2)的技能伤害;由于MP已经耗尽,在接下来的10秒里,敌人无法在进行技能攻击,所以只会造成25HP(5HP*5)的普通伤害;20秒内一共对玩家造成70HP的伤害。
2)假设敌人有100HP,100MP,普通攻击伤害5HP、每2秒攻击一次,技能治疗可以为自己回复20HP、消耗50MP、每两次技能间隔时间8秒。而玩家有100HP,普通攻击伤害5HP、每1秒攻击一次。
敌人的判断反应是除了攻击玩家外,当自己少于或等于1/4时,为自己进行治疗。那么:
玩家对敌人造成75HP(100HP*3/4)伤害,需要15秒时间(75/5)。
在这15秒时间内,敌人对玩家造成37.5HP(15*5/2)的伤害。
在15秒时,由于敌人的HP等于1/4,于是马上使用治疗技能为自己回复20HP,此时敌人有45HP。
在接下来8秒内,玩家对敌人造成40HP(5HP*8)的伤害。同样地,敌人对玩家造成20HP(5HP*4)的伤害。
此时,由于敌人的HP少于1/4,并且已经相隔8秒可以再使用治疗技能,敌人可以为自己回复20HP,现时敌人有25HP。
玩家对敌人造成25HP的伤害,只需要5秒。同样地,在这5秒内,敌人对玩家造成12.5HP(5*5/2)的伤害。
这时候,玩家把敌人打倒了,玩家一共受到了70HP的伤害。
上文的例子,技能并不占用普通攻击的时间,并且是瞬发的。而计算的伤害则是以常规时间与攻击平均每秒伤害来计算,并假设敌人在临死前可以把最后一次攻击打出。
回合制角色扮演
游戏的遇敌方式为“踩地雷”,则玩家在地图上行走时随机进行战斗。所以,“路径”的设计就可以省略掉了。如果敌人是地图上可见并巡逻的设计,则依然可以遵循“路径”的方式来设计,当敌人辑捕到玩家,碰撞后进行战斗。
假设敌人有100HP、40MP,普通攻击伤害10HP,技能攻击伤害75HP、消耗10MP、每两次使用相隔10回合,技能治疗回复20HP、消耗10MP、每两次使用相隔6回合。玩家有100HP,普通攻击伤害5HP,可以使用物品治疗100HP、无回合间隔限制。
敌人以对玩家造成最大伤害为目的,所以技能间隔时间一到就会马上发动技能攻击。并且在自己少于或等于1/4血时使用技能进行自我治疗。
敌人有两种不同的状态,当MP不为0时是普通状态,
玩家对敌人普通攻击造成75HP(100HP*3/4)伤害,需要攻击15(75/5)个回合。
敌人在15个回合内对玩家造成160HP(20HP+10HP*14)。
其间,玩家需要使用一次治疗物品,所以实际回合数会增加为16个回合。
敌人在17回合使用技能为自己治疗,回复至100HP。
同理,再过17个回合,敌人依然有100HP,不过MP为0。此时,敌人进入第二状态——虚弱。在虚弱状态,敌人防御力下降100%,持续6回合。虚弱后,敌人回复40MP。在虚弱过后,敌人有50HP、40MP。
当敌人HP少于或等于1/4时,它则会使用技能自我治疗。如此循环,看似玩家无法打败敌人。现在,我们换一个思路:
在敌人剩下30HP时,玩家不再发动任何攻击,选择防御(或待机),并通过使用治疗物品维持生命。当敌人使用技能把MP耗尽,进入虚弱状态时,玩家再在6个回合内对敌人造成30(5HP*6)伤害将它击毙。
上文的AI设计,如果玩家麻木地攻击,那么这将会大费周章才能把敌人杀死。不过,如果懂得等待时机,则很快就可以把敌人杀死了。
恰当地计算好伤害,并引入状态转换的设计,这将为游戏带来新的乐趣。
你可以融入更多的元素令这个模型更加丰富,例如技能并不是瞬发的,会占用一次普通攻击机会、并且咏唱技能时不再进行普通攻击;咏唱技能时被攻击会延长咏唱时间等等。不过,无论你如何变化,上文就是它的基础模型。
战棋类角色扮演。
如上图:
虚线是敌人巡逻的路线,常规地说,敌人将从A点出发,巡逻移动到B点后待机不动,等待玩家靠近。不过,如果此时玩家从C点移动到D点并被敌人发现时,敌人则会缉捕玩家并展开战斗。
战斗是采用地图上回合制进行的。假设敌人有100HP、25MP,普通攻击伤害是5HP,技能治疗可以回复8HP、消耗5MP、无回合间隔限制。而玩家有100HP,普通攻击伤害是10HP。
逻辑判断是除了对玩家进行攻击外,当敌人的HP少于或等于1/4时,则会使用治疗技能自我回复HP,并开始逃跑。那么:
如果玩家和敌人在DE点相遇,8个回合后,玩家对敌人造成80HP(10HP*8)的伤害。同时,敌人对玩家造成40HP(5HP*8)的伤害。
此时,敌人开始延实心箭头的方向逃跑,并使用治疗技能自我回复HP。
如果玩家以相同的方式追赶敌人,则可以以每回合2HP(10HP-8HP)伤害扣减少敌人的HP。并在6个回合后敌人的MP耗尽没法再进行自我治疗而将其击毙。
不过,如果玩家因为某些原因而不追赶敌人,敌人则会以每回合8HP的速度回复HP,5个回合一共回复40HP,此时,敌人就有60HP了。要是这时候玩家才想起要追杀敌人,则首先需要花6回合的时间追上敌人,然后再花6回合的时间将其击毙。
这里,除了要考虑常规的战斗消耗HP而产生的回合时间外,还需要考虑敌人与玩家双方距离移动所产生的回合时间。
--------------------
“反应逻辑、限制反应、路径”这三个要素是我们设计角色扮演游戏中敌人AI的三把利器,如何组合它们,如何配合地使用它们,都将关系到敌人的运作机制。
上文就动作类(即时)角色扮演;回合制角色扮演游戏;战棋类角色扮演各举了一个例子,你可以从中进行启发延伸、并进行模型丰富、变异。不过,无论你如何进行具体化的变动设计,它都离不开三要素。
全文完。