ここまでで、プロジェクト全体としては長いプログラムになったが、機能別にソースを分割したため、1つ1つのソース・ファイルは分かりやすくなった。
しかしこの状態では、それぞれのcppファイルに同じ内容のマクロ定義を持たなければならなかったり、ソースが増えた場合に他のソースのインクルードをすべて追加しなければならないなど、まだまだ効率が悪い。
そこで、各ソース・ファイルで共通に宣言するインクルードやマクロをひとまとめにしたヘッダ・ファイルを作成し、各ソースファイルから共通に使うよう修正する。
まず、分割したソース・ファイル内で、共通で宣言しているものは何かを考えると、次のようになる。
- windows.h、ddraw.hなどのインクルード文(#include 〜)
- 状態の数字を表すマクロ文(#define 〜)
- 外部変数(extern 〜)
これらを宣言するヘッダ・ファイルを作成し、各ソース・ファイルからインクルードすることにより、修正による無駄を省く。
各ソース・ファイルから共通にインクルードするヘッダ・ファイル「common.h」を作成する。
- プロジェクトにヘッダ・ファイル「common.h」を新規作成する。
- 各ソースから共通部分を抜き出し、common.hに貼り付ける。
//============================================================================= // プロジェクト内で共通に読み込まれるヘッダ・ファイル //============================================================================= //----------------------------------------------------------------------------- // インクルード・ファイル //----------------------------------------------------------------------------- #include <windows.h> #include <windowsx.h> #include <stdio.h> #include <ddraw.h> #include "myDraw.h" #include "Start.h" #include "Game.h" //----------------------------------------------------------------------------- // マクロ定義 //----------------------------------------------------------------------------- #define START_INIT 0 #define START_FRAME 1 #define GAME_INIT 10 #define GAME_FRAME 11 //----------------------------------------------------------------------------- // 外部変数(本体は別ソース) //----------------------------------------------------------------------------- /* DirectDrawオブジェクト関係 */ extern LPDIRECTDRAW7 g_pDD; // DirectDraw オブジェクト extern LPDIRECTDRAWSURFACE7 g_pDDSPrimary; // プライマリサーフェイス extern LPDIRECTDRAWSURFACE7 g_pDDSBack; // バックバッファ extern LPDIRECTDRAWSURFACE7 g_pDDSStart; // スタート画像用サーフェイス extern LPDIRECTDRAWSURFACE7 g_pDDSGame; // ゲーム画像用サーフェイス /* 共通 */ extern BYTE g_FrameNo; // フレーム選択用 extern BYTE KeyTbl[256]; // キー情報 extern RECT ScreenRect; // ウィンドウの矩形- 作成した共通ヘッダ・ファイルを各ソースからインクルードする(例、WinMain.cpp)
※外部変数の本体(この場合g_FrameNo、KeyTbl[256]、ScreenRect)以外にcommon.hに宣言したものがソース内にあってはならない。
//============================================================================= // 2Dゲーム基本プログラム2(基本プログラムからの分割) //=============================================================================#include "common.h"//----------------------------------------------------------------------------- // プロトタイプ宣言 //----------------------------------------------------------------------------- static LRESULT CALLBACK WinProc(HWND, UINT, WPARAM, LPARAM); static HWND InitApp(HINSTANCE, int); static void UpdateFrame(HWND); //----------------------------------------------------------------------------- // 外部変数(本体) //----------------------------------------------------------------------------- /* 共通 */BYTE g_FrameNo = START_INIT; // フレーム選択用 BYTE KeyTbl[256]; // キー情報 RECT ScreenRect = {0, 0, 640, 480}; // ウィンドウの矩形//----------------------------------------------------------------------------- // グローバル変数 //----------------------------------------------------------------------------- /* ウィンドウ関係 */ static char szWinName[] = "Skeleton"; // ウィンドウクラス名 static char szTitle[] = "2Dゲーム基本プログラム2"; // ウィンドウタイトル名 //============================================================================= // ウィンドウメイン関数(WinMain) //============================================================================= int WINAPI WinMain(HINSTANCE hThisInst, HINSTANCE hPrevInst, LPSTR lpszArgs, int nWinMode) { ・ ・ ・myDraw.cppは、common.hの他に
ddutil.hもインクルードしなければならないことに注意!!
#include "common.h"
#include "ddutil.h"確認!!
ここまでやったらリビルドを行い、プログラムが正常に動くかどうか確かめよう。