仮に以下のように起動したとしましょう。
まずはアプリと同じフォルダに新規ファイルを作成します。
ファイル名を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関数は以下の記事で紹介しているものを使用しています。
コメント