ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

Strategy

Strategy(戦略)、つまりプログラムならアルゴリズムを切り替える。
これは分かりやすい。ゲームに例えるなら、CPUと対戦するゲームを作った場合、CPUのクラスに思考ルーチンを組み込んでしまうのではなく、思考ルーチンを別クラスにして定義し、CPUのクラスは委譲して使う。こうすればいろんな思考ルーチンを用意して切り替えることができる。

class Strategy
{
public:
    int Action();
    void setResult(int result);
};

class Cpu
{
private:
    Strategy strategy;
public:
    // CPUの行動
    void doTurn() {
        int action = strategy.Action();
        doAction(action);
    }

    // 敵の行動結果
    void setResult(int result) {
        strategy.setResult(result);
    }
};

// 具体的な戦略
class StrategyA : public Strategy
{
public:
     int Action() {
         int action;
         // 行動を選択
         ...
         return action;
     }
     void setResult(int result) {
         // 相手の行動結果を受け、内部情報更新
         ...
     }  
};

ここではStrategyクラスのAction()で次の行動を取得し、setResult()で敵側の行動結果をStrategyへ反映させる。Strategyの具体的な実装クラスであるStrategyAではAction()とsetResult()を実装している。なんらかのパラメータを持って、そのパラメータにより行動を選択したり、相手の行動結果によりパラメータを更新したりする。
こうやって戦略のアルゴリズム部分を分離することにより、いろんなアルゴリズムを追加したり、実行中に切り替えたりすることができる。

※ソースはイメージを表したもので、実際にはこのまま入力しても動作しない。
参考文献:Java言語で学ぶデザインパターン入門
参考:ギコ猫とStrategyパターン