web-dev-qa-db-ja.com

java)で単純なステートマシンを作成する方法

私は現在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..
}
16
Sam152

列挙型を使用して、基本的な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);
    }

}

これを生成するコードは、事態がさら​​に複雑になると非常に冗長になりますが、コンパイル時の安全性、スレッドの安全性、および高性能が得られるのは素晴らしい点です。

32