ゲームモードクラスCGameModeの作成です。
このクラスはゲーム中の場面をまとめたものです。例えばゲーム本編のアクションパートをメインモード、ゲームクリア後のエンディングをエンディングモードといったようにまとめます。他にはゲームオーバーモードとかおまけモードとかね。
それらのモードは基底クラスであるゲームモードクラスを継承させて作ります。こうすればキャラクタクラスの時のように、クラスの種類に依存せず処理できます。
上位クラスであるシステムクラスCSystemにChangeGameMode()という関数を作って、こいつにゲームモードの切り替えをさせます。これで各ゲームモードは独立性が高まり、どこから作っても良くなります。ちなみに前回までキャラクタとかを作っていたのは、実はメインモードCGameModeMainの中だったのです。(語弊あるかな?メインモードからキャラクタ管理クラスが呼び出されているという意味です)
次回は、そろそろやらないとなぁという事で、キャラクタのアニメーションを実装します。
//-----------------------------------------------------------------------------
// ゲームモード変更
BOOL CSystem::ChangeGameMode(int mode_no)
{
// 現在のゲームモードを解放
if (GameMode!=NULL) {
GameMode->Term();
delete GameMode;
GameMode=NULL;
}
// ゲームモード変更
switch (mode_no) {
case MAIN:
GameMode= new CGameModeMain;
break;
case GAMEOVER:
GameMode= new CGameModeGameOver;
break;
}
// ちゃんと変更できた?
if (GameMode==NULL) {
MessageBox(NULL, "ゲームモードの変更に失敗しました", "CSystem::ChangeGameMode", MB_OK);
return E_FAIL;
}
// 初期化
GameMode->Init();
return S_OK;
}
//-----------------------------------------------------------------------------
// ゲームモードクラス(継承させるだけなので、何も処理しない)
class CGameMode {
public:
virtual void Init()=0; // 初期化
virtual void Term()=0; // 解放
virtual void Move()=0; // 移動
virtual void Draw()=0; // 描画
};