ゲーム開発19:ゲームモードクラス作成

ゲームモードクラス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; // 描画
};

コメントを残す

メールアドレスが公開されることはありません。