8-3 CGameクラスヘッダ

ここからは実際のゲームルーチンのプログラムについて説明します。
まずはCGameクラスのヘッダから説明します。

■使用ライブラリ

これから先のプログラムは全て自前のライブラリを使ったものとなるため、
ライブラリについて分からない場合はそれぞれのクラスのページを確認して下さい。

CWindowクラス Window管理クラス
CDDProクラス Direct3D管理・板ポリ描画クラス
CDSProクラス DirectSound管理クラス
CDIProクラス DirectInput管理クラス
CTimerクラス 60フレーム処理用クラス
CBmsProクラス BMSファイル管理クラス


■フォルダ構成

ライブラリファイルをプロジェクトフォルダ直下にすべて入れてしまうとファイルがゴチャゴチャになって見にくいため、
ここでは「libfiles」というフォルダにまとめて入れておき、これをゲームプログラムのサブフォルダとして配置します。

<ルート>
 ├ BMSPlayerSample.slnなど
 ├ CGame.h
 ├ CGame.cpp
 ├ FILES/
 ├ SAMPLE/
 └
libfiles/
   ├ CDDPro81.h
   ├ CDDPro81.cpp
   ├ CDSPro81.h
   ├ CDSPro81.cpp
   └ ・・・

 ※FILESは画像などの素材が入ったフォルダ、SAMPLEはサンプルBMSの入っているフォルダです

■CGameクラスの作成

CGameクラスを作るためにはまず必要なヘッダをロードします。

#include <Windows.h>
#include "./libfiles/CDDPro90.h"
#include "./libfiles/CDSPro81.h"
#include "./libfiles/CDIPro81.h"
#include "./libfiles/CWindow.h"
#include "./libfiles/CBmsPro.h"
#include "./libfiles/CTimer.h"

それぞれのライブラリはlibfilesの中に入れてあるため、上記のように階層付きで指定します。

■ステート値の定義

次にゲームで使用するステート値を定義します。
この値はCGame内でのみ使用されるため、CGameヘッダに入れておくのが一番妥当です。

// ステート
enum STATE {
    G_INIT=0,       // 初期化モード
    G_MAININIT,     // メインルーチン初期化
    G_MAIN,         // メインループ
    G_END           // 全てのゲーム終了処理
};

■CGameクラスの定義

そして、最後にCGameクラスの定義を行います。
ここではとりあえずざっと必要な値も含めて定義しています。

class CGame {

    // ライブラリなど
    CWindow         win;                // ウインドウ管理
    CDDPro90        dd;                 // Direct3D管理クラス
    CDSPro81        ds;                 // DirectSound管理
    CDIPro81        di;                 // DirectInput全般
    CTimer          tm;                 // 60FPS処理
    CBmsPro         bms;                // BMSファイル管理用

    BOOL            bLostDevice;        // D3Dデバイスロスト状態フラグ

    // ゲームのメイン処理で使用する変数
    STATE           dwState;            // ゲームのステート状況
    float           fScrMulti;          // 小節間の幅の倍率
    LONGLONG        llStartTime;        // ゲーム開始時の時間(高解像度タイマー)
    LONGLONG        llGlobalFreq;       // マシンの1秒間のカウント数(高解像度タイマー)
    double          dElapsedTime;       // 開始からの経過時間(秒)
    int             iImageID;           // 現在表示されているアニメーションインデックス番号
    int             iStartNum[256];     // BMS演奏で計算開始する配列番号(処理を軽くするため)

    // 入力状態
    BOOL            bOnKey[5];          // 鍵盤キーが押されているか
    int             iScratchStatus;     // スクラッチの回転方向(-1=左,0=停止,1=右)

    // 演出など
    int             iFlashIndex[6];     // 次に使用されるフラッシュカウンタのインデックス
    int             iFlashCount[6][3];  // フラッシュ6x3個分のカウンタ
    int             iBackKeyCount[6];   // キーを離した時の後ろのバックライトの演出用カウンタ

private:
    // 初期化
    BOOL Init( HINSTANCE hinst );       // 初期化&ゲーム形成
    BOOL Clear( void );                 // ロード済みデータの開放

    // ゲーム処理
    BOOL GameInit( void );              // メインゲーム初期化
    int GameRun( BOOL demo=FALSE );     // ゲーム実行ループ

public:
    // 公開関数
    CGame();
    virtual ~CGame();
    BOOL Run( HINSTANCE hinst );        // ゲームメインルーチン
};


ここでは各ライブラリの実体とゲームで使用する変数を定義しています。

そして非公開の関数としてメインゲームの初期化などを行う関数や、
外部から呼び出される関数としてコンストラクタとデストラクタ、
そしてRunという唯一のゲーム用関数を定義しています。

各変数についてはあとできちんと説明するので、ここではまだ気にしないでください。

これでとりあえず定義は終わったので次は実際にプログラムについてを説明します。