您的位置:首页 > 大数据 > 人工智能

一个建立完整游戏AI的事例:第二部分(作者:Geoff Howland)

2008-04-03 14:15 323 查看
运动:
移动,在很多基本场景中,是一种在一定时间内从一个坐标点推进到另一点。这通过一个方向向量和游戏单位的速度来做到,开始时还要获得起始的坐标。
因为我们通常使用鼠标,所以并不需要玩家必须用游戏手柄和第一人称光电手柄。一个解决如果饶过障碍物的方法是建立一个行为的序列,这样在一次行动中就会有多个动作被完成。用这种方式如果一个路线必须饶过障碍物,则可以在目的地到达前添加路径,其结果是玩家不用干涉的自动饶过障碍。


巡逻:
巡逻是在一系列的指定点之间移动的一个指令。当一个游戏单位移动到一个目的地并不在动时,我们可以比较它当前的位置和巡逻的目的点列表中的点,然后设置靠近它位置的一个新的目的地。
通常是不会这样只是让游戏单位在屏幕上移动而没有站立和等待,让这个世界变的更鲜活,给它们比较少的机会被发觉和遭遇敌人。


饶过障碍:
寻路算法是在地图的设计时就已经明确的,还要考虑游戏单位在移动时之间的互相作用。这里我是要允许一种室外的环境,涉及一些简单的障碍如建筑。假设你不能进入其中。障碍就是一个由4的顶点组成的矩形。
在这种情形下,我通常用开放式运动并用1-2的回避运动方式饶过。
假设在游戏单位和目的地之间有一个4点的矩形。这里我们先移动到距离最近的一个矩形的顶点,游戏单位之间的碰装时则旋转90度。这里给出了一个缓冲区用来在障碍附近移动。
障碍回避取决于障碍无的类型。这里只是一个4点的矩形,或是一个菱形。因为如此可以简单的发现障碍边缘最靠近目的地的点。这样可以简单的建立一个回避路径,在两个障碍靠的很近时也会这样。
当你将要将寻路算法进一步增强时,有一种叫A*的算法,非常流行。尤其在迷宫一样的障碍地形中寻找路径时经常用到。比A*更高级的是方向向导算法用来逐渐的饶过障碍。有些复杂的地形如十字路口用来转移到地图的不同区域。


锁定敌人:
如何对待一些游戏单位目标,取决于玩家在游戏中的意图。也许你希望你的游戏单位自动攻击目标,这样玩家会关注场景中的其它事情。你也许希望你的游戏单位攻击某个指定的目标。另一方面,你也希望敌人能主动发觉你的游戏单位这样会使敌人有挑战性。
你可以规定8个方向,并允许一个游戏单位面对另一个游戏单位时,或是在正前方或是在其它方向。一个简单的测试决定是否游戏单位在最大视野范围内,在三个方向上的其中一个上进行检测,并得到结论用最少的计算时间完成。
你当然要做障碍测试,来观察是否有游戏单位被阻塞,用同样的方法来测试障碍回避,结果经常是要么有一个清晰的路径或是没有。增加高度视觉检测将改变测试的范围,但在其它文章里会讨论。




追击:
当你的敌人发现一个目标,在他们失去目标后你当然不希望它们慢无目的的徘徊。这样的话你需要给出选择进行进一步的搜索。在这之前我们只是谈了游戏单位如何定点,基于可以察觉它们时。在有些情况下可以使对敌人的追踪变的更加机智。你可以选择欺骗地只是跟随跟踪目标。
如果你希望保持真实性,你应保存目标的最后位置,然后给出一个搜索范围。一个例子是在一个失去目标的游戏单位的随机方向上进行的搜索。
在这里我们允许目标远离游戏单位,如果正确,游戏单位会快速的结束第一轮目标搜索然后积极的去寻找目标。如果游戏单位没找到目标,将安排其撤回并在原来的目标点附近开始巡逻。这样游戏单位就会回到最后一次发现目标的地方开始做模拟搜索。
这并没有包含所有可能的情况,但也确实给出了一些合理的方法。


结论:
所有游戏AI的秘密是理解你要解决的问题并得出能够表现出来的结果。如果你能将这些画出来并用公式来表示一个算法,则你已经完成了90%的任务。最后的10%是让其正常的发挥作用,简单的用10次左右的尝试来描绘怎样去做这些。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: