ここからは実際のゲームルーチンのプログラムについて説明します。
まずは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クラスを作るためにはまず必要なヘッダをロードします。
#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クラスの定義を行います。
ここではとりあえずざっと必要な値も含めて定義しています。
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という唯一のゲーム用関数を定義しています。
各変数についてはあとできちんと説明するので、ここではまだ気にしないでください。
これでとりあえず定義は終わったので次は実際にプログラムについてを説明します。