第2章 Windowsプログラムをゲーム用に改造する

2-2 一般的なゲームプログラムの構造とプログラム

(a) Windowsプログラムの構造

Windowsプログラムは次のような構造で作成されている。

《解説》

このプログラムは、Windowsから何かのメッセージが届くまで制御が戻ってこず、止まったままになっている(イベント・ドリブン方式)。

(b) 一般的なゲームプログラミングを考える

一般的なゲームは(おそらく)次のような処理を行っている。

1.初期化処理
環境の確保、パラメータ(変数)の初期化など
2.メインループ(1フレーム表示ごとに1回ループ)
オープニング表示(タイトル画面、オープニングムービーなど)
ゲームメイン
エンディング表示(ゲームオーバー画面、エンディングムービーなど)
3.終了処理
環境の開放など

《解説》

Windowsからのメッセージを待つのではなく、永久ループにする。

(c) Windowsプログラムをゲームプログラム構造にあわせる

2-2のフローチャートのようにWinMain関数を改造すると次のようになる。

//-----------------------------------------------------------------------------
// 関数名 : WinMain() 
// 機能概要: メイン関数、メッセージループの生成
//-----------------------------------------------------------------------------
int WINAPI WinMain(HINSTANCE hThisInst, HINSTANCE hPrevInst, LPSTR lpszArgs, int nWinMode)
{
    MSG     msg;
    HWND    hWnd;

    /* 表示するウィンドウの定義、登録、表示 */
    if (!(hWnd = InitApp(hThisInst, nWinMode)))
        return FALSE;

    /* ゲーム・ループ */
    while (TRUE)
    {
        if (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))  // メッセージがあるかどうか
        {
            if (!GetMessage(&msg, NULL, 0, 0))  // メッセージを取得し、WM_QUITかどうか
                break;
            TranslateMessage(&msg);  //キーボード利用を可能にする
            DispatchMessage(&msg);  //制御をWindowsに戻す
        }
        else  // ゲームメイン処理
        {
            //UpdateFrame(hWnd);  //UpdateFrame関数はまだ作っていないため、コメントアウト
            Sleep(1);
        }
    }

    return msg.wParam;

}

《解説》


[ TOP ] [ Next ]