0

いくつかの状態を遷移するゲームを設計しているときに、2つのパターンが使用されているのを確認しました。1つは次のとおりです。

1)列挙型パターン。

static {
    // standard states
    transitions.put(PHASE 1, new State[]{PHASE2, PHASE3, PHASE4});

2)抽象があり、抽象を拡張して各状態を表すサブクラスがあるクラスの状態パターン..単一状態パターン?

どちらも良い解決策のように見えますが、ゲームにとってよりクリーンで理解しやすいものは何でしょうか?

個人的にはモノステートが好きですが、列挙型の方法が道のようです。

4

3 に答える 3

2

「よりクリーンなコード」に関しては、それは選択の問題です。

考慮すべきいくつかの事柄

別の状態とN個の遷移を追加すると、コードはどうなりますか?それはあなたとチームの他の開発者にまだ読めますか?ある種のコンセンサスを得るか、コードスタイルガイドラインでこれを具体化してみてください。

IMHO、使用している言語はオブジェクト指向であるため、カプセル化とポリモーフィズムを利用しているため、GOFブックのStateパターンを使用します。

'C'で書いている場合は、テーブル駆動型のアプローチを選択します。

于 2012-10-10T10:05:41.983 に答える
1

これは、ビジネスロジックを州に保存する必要があるかどうかによって異なります。2番目のオプションはおそらくこれを簡単にします。すべての州は、次のようなものを実装できます。

interface State {
    State transition(Event event);
}

次に、移行を管理できる一種のマネージャークラスを作成できます。

class StateManager {
    State actualState = new BaseState();
    void processEvent(Event event) {
        actualState = actualState.transition(event);
    }
}

次に、の実装はState、入力に基づいて次の状態がどうあるべきかを選択して返します。

基本的に、有限状態マシンを実装しています。

マシンがすぐに複雑になりやすい場合は、@ duffymoが言うように、遷移を外部化する必要があります。名前ではわかりませんが、これを行うライブラリは確かにあります。

于 2012-10-10T10:05:25.923 に答える
0

どちらもお勧めしません。有限状態マシンを作成し、状態と遷移を XML または JSON に外部化します。より自由度の高いデザインになります。

于 2012-10-10T10:01:23.980 に答える