## 一、从一次深夜调试说起
上周三凌晨两点,我的屏幕右下角又弹出了那个熟悉的错误:“怪物已脱离战斗,角色仍在持续施法”。这已经是本周第三次遇到这个幽灵问题了。监控日志显示,角色在怪物死亡后依然对着空气放了整整三秒的火球术,蓝量直接见底。
问题的根源很清晰——我们的AI逻辑缺少一个像样的“大脑”。之前的版本只是简单堆砌了if-else判断:
```python
if monster_in_range():
cast_fireball()
elif health_low():
drink_potion()
```
这种写法在简单场景下还能应付,一旦遇到多个怪物、技能冷却、突发状态切换,代码就变成了意大利面条。我们需要的是一个真正的**策略引擎**,而今天要聊的,就是它的核心骨架。
---
## 二、有限状态机:给AI一个明确的人格
状态机不是什么新概念,但在游戏AI里,它能让你的代码立刻拥有“人格”。我们给打怪AI定义了四个核心状态:
```python
class AIState:
IDLE = "idle" # 发呆或巡逻
CHASE = "chase" # 追击目标
COMBAT = "combat" # 战斗中
RETREAT = "retreat" # 撤退补状态
```
关键不在于状态有多少,而在于**转换条件要干净**。这是我踩过坑的地方:早期版本把状态转换逻辑散落在各个技能函数里,结果某个技能触发撤退后,其他模块还在尝试攻击。
现在我们把转换逻辑收拢到一个地方:
```python
def decide_state(self, game_data):
# 血量低于20%时,优先保命
if self.health_percent < 0.2:
return AIState.RETREAT
# 有目标且目标在攻击范围内
if self.target and self.target.in_combat_range():
return AIState.COMBAT
# 有目标但距离太远
if self.target and not self.target.in_combat_range():
&nb
8136



被折叠的 条评论
为什么被折叠?



