第20回:ゲームの完成だ!

 前回までに作成した、各クラスをメインルーチンに組み込めば、ゲームは完成です。
#include "Mode.h"

void CPlayer::Destroy()
{
    destroyed = true;

    ((CSound*)FindItemBox("explode2"))->Play();
    AppendObject(new CExplosion(x, y), EXPLOSION_PRIORITY, true);

    // ゲームオーバー画面を表示
    AppendObject(new CContinue(false), CONTINUE_PRIORITY, true);
}
#include "Mode.h"

void CBoss::Exec()
{
    switch(status){
    case boss_pattern1: Action1(); break;
    case boss_pattern2: Action2(); break;
    case boss_pattern3: Action3(); break;
    default:
        if(ActionDestroy() == true){
            // ゲームクリアー画面を表示
            AppendObject(new CContinue(true), CONTINUE_PRIORITY, true);

            // 完了フラグが返されたら自身を消去
            RemoveObject(this);
            return;
        }
    }

    /* 省略 */
}
#include "GameDef.h"
#include "Mode.h"

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    /* 省略 */
}

int APIENTRY _tWinMain
(HINSTANCE hInstance, HINSTANCE hPrevInstance,
 LPTSTR lpszCmdLine, int nCmdShow)
{
    timeBeginPeriod(1);

    /* 省略 */

    CGameObject game;
    CoInitialize(NULL);
    game.Initialize(mainWnd, hInstance);
    CSound::CreateDirectSound(mainWnd);

    game.AppendObject(new CTaskHead(), 0, true);
    game.AppendObject(new CTaskTail(), INT_MAX, true);

    game.AppendObject(new CTitle(), 1, true);

    ShowWindow(mainWnd, nCmdShow);

    /* 省略 */

    game.Uninitialize();
    CSound::ReleaseDirectSound();
    CoUninitialize();

    return 0;
}
 「ゲームで学ぶC++オブジェクトプログラミング・実践編」、いかがだったでしょうか。それではごきげんよう!