4-3(a)から4-3(c)で、スタート処理用のソースファイル「Start.cpp」「Start.h」が作成された。
同様の手順で「Game.cpp」「Game.h」を作成する。WinMain.cppのうち、Game.cppに移すべき関数は「GameInit」「GameFrame」「HitCheck」である。
そのうち、「GameInit」「GameFrame」はWinMain.cppのUpdateFrame関数から呼ばれるが、「HitCheck」はGameFrame関数からしか呼ばれないため、「GameInit」「GameFrame」はヘッダ・ファイルにてプロトタイプ宣言を行い、「HitCheck」はソース内でstatic付きでプロトタイプ宣言する。[修正後のWinMain.cpp]
//============================================================================= // 2Dゲーム基本プログラム2(基本プログラムからの分割) //============================================================================= #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 //----------------------------------------------------------------------------- // プロトタイプ宣言 //----------------------------------------------------------------------------- static LRESULT CALLBACK WinProc(HWND, UINT, WPARAM, LPARAM); static HWND InitApp(HINSTANCE, int); static void UpdateFrame(HWND); //----------------------------------------------------------------------------- // 外部変数(本体は別ソース) //----------------------------------------------------------------------------- /* DirectDrawオブジェクト関係 */ extern LPDIRECTDRAW7 g_pDD; // DirectDraw オブジェクト extern LPDIRECTDRAWSURFACE7 g_pDDSPrimary; // プライマリ・サーフェイス extern LPDIRECTDRAWSURFACE7 g_pDDSBack; // バック・サーフェイス extern LPDIRECTDRAWSURFACE7 g_pDDSStart; // スタート画像用サーフェイス extern LPDIRECTDRAWSURFACE7 g_pDDSGame; // ゲーム画像用サーフェイス //----------------------------------------------------------------------------- // 外部変数(本体) //----------------------------------------------------------------------------- /* 共通 */ 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) { ・ ・ ・ } //============================================================================= // ウィンドウプロシジャ関数(WindowProcedure) //============================================================================= static LRESULT CALLBACK WinProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { ・ ・ ・ } //============================================================================= // 関数名 :InitApp // 機能概要:表示するウィンドウの定義、登録、表示 // 戻り値 :正常終了のとき1、以上終了のとき0 //============================================================================= static HWND InitApp(HINSTANCE hThisInst, int nWinMode) { ・ ・ ・ } //----------------------------------------------------------------------------- // 関数名 : UpdateFrame() // 機能概要: 画面更新処理 //----------------------------------------------------------------------------- static void UpdateFrame(HWND hWnd) { ・ ・ ・ }Game.cpp、Game.hは自分で考えよう!!
確認!!
ここまでやったらリビルドを行い、プログラムが正常に動くかどうか確かめよう。