【C++】【ゲーム開発】デザインパターン(State)導入

eye-catch C/C++
eye-catch

ロックマンの場合以下のようにシーンが切り替わっていきます。

オープニングデモが始まり、タイトル画面になり、キーを押すとステージ選択になり…
と言った具合です。

どんなゲームもほとんどそうだと思うのですが、これらのシーン管理をどうやって行うかがプログラミングの醍醐味だと思ってます。

それは自ずとレスポンスだったり、汎用性だったり色々あると思います。

しかし一途に作りこむ事で、ゲーム開発よりもコーディングデザインファクトに重きを置いてしまいゲームの面白さが置いてけぼりになってしまう事もあるかもしれません。

それもゲームデヴェロッパーにとっては難しいところかもしれませんね😅

グラフィック作ったりする工程はコーディングは直接的に関係ありませんからね。


話元に戻しますが、私の場合以下のようにメイン関数の部分が構築されました。

// Main sequence Class
class Sequence final {

private:
    modules::phase::PhaseComponent *elemental_;

public:
    Sequence();
    ~Sequence();
    Evaluate Master(Evaluate evals);

};

Sequence::Sequence() {
    elemental_ = new modules::phase::PhaseComponent();
    duplicate::FormalDuplicate::getInstance()->setILoggerInstance("Process-Log");
    forms::config::setBindingC16Key();
}

Sequence::~Sequence() {
    delete elemental_;
    duplicate::FormalDuplicate::getInstance()->iLoggerRelease("Process-Log");
}


Evaluate Sequence::Master(Evaluate evals) {
    namespace input = forms::input;
    if (input::updateAllStateKey()) {
        inputkey::C16Key::getInstance()->updateC16PressButtons();
    }

    if (1 == input::getHoldKeyValue(KEY_INPUT_ESCAPE)) {
        duplicate::FormalDuplicate::getInstance()->doWriteILogger("Process-Log", "ESCAPEキーが押されました。アプリケーションを終了します。");
        return Evaluate::PROC_QUIT;
    }

    /*
     *  < < ENTER THE GAME PHASE > >
     */
    if (!elemental_->doTrigger()) return Evaluate::PROC_FAILED;

    return Evaluate::PROC_SUCCEED;
}

上記の < < ENTER THE GAME PHASE > > の箇所から先ほどのステートインターフェースを使ってシーン切り替えを実行します。

STARTキーを押してシーン切り替えを実行。

シーンが切り替わりました。
(上記はサンプルで背景色を変更して実験しています)


次の実装内容ですが、次はメニューバーを表示してユーザーインターフェース機能を実装してみようと思います。
コントローラ設定画面とか、よくあるやつを…😁

コメント

タイトルとURLをコピーしました