私は現在Javaを学んでおり、OOの方法で状態を制御する方法を知りたいです。Pongアプリを実装しました。ゲームプレイのような複数の状態が必要な場合とメニュー、そしてこれらの状態のそれぞれは、どのようにこれを達成し、どのようにこれらの状態を切り替えるのか、開始、停止、実行を実行する必要がありました。
大きなswitchステートメントを単純にスローできることは知っていますが、これを実装するための最良の方法は何ですか?
ゲームプレイ状態でメニュー状態に、またはその逆に切り替えられるようにしたい。
import Java.applet.*;
import Java.awt.*;
import Java.awt.event.*;
public class Pong extends Applet implements Runnable, KeyListener{
public void start ()
{
setSize(screen);
setFocusable(true);
Thread th = new Thread (this);
th.start ();
}
public void stop()
{
}
//Etc..
}
列挙型を使用して、基本的なFSM(有限状態マシン)をシミュレートできます。
public enum State {
ONE {
@Override
public Set<State> possibleFollowUps() {
return EnumSet.of(TWO, THREE);
}
},
TWO {
@Override
public Set<State> possibleFollowUps() {
return EnumSet.of(THREE);
}
},
THREE // final state
;
public Set<State> possibleFollowUps() {
return EnumSet.noneOf(State.class);
}
}
これを生成するコードは、事態がさらに複雑になると非常に冗長になりますが、コンパイル時の安全性、スレッドの安全性、および高性能が得られるのは素晴らしい点です。