我想在一个简单的街头霸王风格游戏中实现一个人工智能,我想用一个有限状态机来做到这一点。举个简单的例子,这个 FSM 有以下状态:
攻击、追逐、逃跑
从我在网上阅读的内容来看,实现这一点的一个好方法是使用枚举,尽管我对如何做到这一点有点困惑。
在任何时候,FMS 都处于当前状态并且应该在游戏中发生变化,这种状态可以通过转换函数 (next()) 改变。使用像下面这样的枚举,我将如何跟踪当前状态,以及在调用 next() 函数时如何进行此更改?
public enum FiniteStateAutomata {
ATTACKING() {
public FiniteStateAutomata next() {
if (!gun.isInRange()) return CHASING;
else if (health.isLow()) return FLEEING;
}
},
CHASING() {
public FiniteStateAutomata next() {
if (gun.isInRange()) return ATTACKING;
else if (health.isLow()) return FLEEING;
}
},
FLEEING() {
public FiniteStateAutomata next() {
if (health.isHigh()) return CHASING;
}
};
public abstract FiniteStateAutomata next();
}