Я хочу внедрить ai в простую игру в стиле уличных бойцов, и я хочу сделать это с помощью конечного автомата. Для простого примера этот FSM имеет состояния:
атакующий, преследующий, убегающий
Из того, что я прочитал в Интернете, хорошим способом реализации этого было бы использование Enum, хотя я немного запутался, как это сделать.
В любой момент, когда FMS находится в текущем состоянии, и если в игре произойдут изменения, это состояние может измениться с помощью функции перехода (next ()). Используя Enum, как показано ниже, как я буду отслеживать текущее состояние и как я могу внести это изменение при вызове функции 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();
}