クラスまみれのゲームプログラミング入門

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

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

Player.h
#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);
}

Boss.cpp
#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;
		}
	}

	/* 省略 */
}

winmain.cpp
#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;
}

 「クラスまみれのゲームプログラミング・実践編」、いかがだったでしょうか。それではごきげんよう!