シンプルなストリート ファイター スタイルのゲームに 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();
}