游戏中的人工智能系统

可以结合此文共同观看
人工智能-基于位置的触发器管理

之前的一个月的某一段时间,私在为公司一款游戏的免费体验版本编写本地人工智能系统。 准确的说,是RPG即时战斗部分的人工智能。

先来确定智能战斗系统的中的AI思考类型

友好型 – 无法被攻击,也无法攻击别人
中立型 – 不主动攻击,被攻击后开始反击
进攻型 – 同阵营之外,范围内主动攻击

之后确定AI状态机中的几个状态

RESET – 脱离战斗,复位,刷新时用到的状态
RUN – 跑动状态
ATTACK – 攻击状态
SEARCH – 索敌状态
STAND – 发呆状态
WANDER – 漫游状态

以 进攻型 AI为例,各状态的衔接如下
默认 WANDER 每N毫秒间隔 切换至 SEARCH , 如果索敌成功 切换至 RUN, 索敌失败 切换回 WANDER。
当进入 RUN 时 每N毫秒间隔 判断目标是是否进入攻击范围 , 如果是,切换至 ATTACK, 如果否 保持 RUN。
当进入 RUN 时 每N毫秒间隔 判断目标是否脱离索敌区域, 如果是,切换至 RESET, 如果否 保持 RUN。
当进入 ATTACK时 每N毫秒间隔 判断目标是否在攻击范围 , 如果是, 攻击, 如果否,切换回 RUN。
当进入 ATTACK时 每N毫秒间隔 判断目标是否死亡, 如果是, 切换至 RESET, 如果否, 保持 ATTACK。
当进入 RESET 时 AI 重置(移动)到出生点,刷新状态后,切换至 WANDER

当上述状态转换过程中,将会出现一种临界状态,即目标刚好在索敌区域边缘,而目标同时在移动, 会导致AI反复进入ATTACK后,由于目标反复脱离 攻击范围,导致 AI 反复追击停顿,无法成功攻击。

解决方案可以为, 当进入 ATTACK 时,已知是 RUN 状态切换过来的,因此此时目标肯定在攻击范围内, 所以进入状态后先进行一次攻击后,再做范围判断。

下面是 攻击型 AI的实现伪代码

[挖个坑,每日填]

发表评论

电子邮件地址不会被公开。 必填项已用*标注