Sirius X

需要無視の自己満足ブログです。

【C++】【ゲーム開発】裏モードって聞いたらちょっとワクワクする

Category:Rockman Reanimated, ゲーム開発 Comment:0

eye-catch

仮に以下のように起動したとしましょう。
まずはアプリと同じフォルダに新規ファイルを作成します。

ファイル名をdebugに変更。(拡張子はなしにする)

作成したファイルをアプリにDrag & Dropします。

// The entry point of application.
INT APIENTRY WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ INT nCmdShow) {
    auto mode = publish::systemModeSelect(lpCmdLine);

この部分でlpCmdLineがdebugのフルパスを持っています。

これを文字列加工していきます。

    auto systemModeSelect(LPSTR lpCmdLine) {
        auto mode_param = RunMode::GENERAL_MODE;
        if (!lstrcmpA("", lpCmdLine)) return mode_param;

        std::string str = lpCmdLine;
        if ('\"' == str.front() && '\"' == str.back()) {
            str = std::regex_replace(str, std::regex("\""), "");
        }
        str = subr::kits::stringcontroller::strRightTrim(str, 5);
        if (!lstrcmpA(str.c_str(), "debug")) {
            mode_param = RunMode::DEBUG_MODE;
            MessageBoxA(NULL, "Start in debug mode.", "Eris", MB_OK);
        }

        return mode_param;
    }

なんかちょっとごちゃごちゃしてますね☹
すみません。

Runmode::~はゲームの実行モードの列挙型です。

RunMode::DEBUG_MODEと書かれている部分に到達するとデバッグモードで起動するようになっています。

ファイルのフルパスに空白などが入っているとlpCmdLineにダブルクォーテーションが付くので、
それがある場合は取り除き、(regexライブラリ使用)
更に末尾5文字を切り取って”debug”の文字列かを判定します。

“debug”であればデバッグモードで起動するようにパラメータを返却します。


こうしたちょっとしたコードを作るだけで随分と便利になる機能はなんか作り甲斐があって、
それでいて楽しいですね😃

私はもともとこういったチマチマした事が好きで、色々無駄な機能をたくさん作って載せてしまう人間なのですが、
今までこうやって作ってきた技術が、実際に仕事などの力量に影響していたりします。

そう考えるとなんだか面白いですね。

ゲームの開発ではパラメータを弄った状態でスタートしたり、ゲームの途中から開始したりする事が普通にあるので、
こういった機能は実は重要だったりします。

その辺りはまた別の機会に…


ちなみにstrRightTrim関数は以下の記事で紹介しているものを使用しています。

【Visual C++】【ゲーム開発】std::string文字列のLTRIM(RTRIM)がしたい

コメントを残す

メールアドレスが公開されることはありません。