第4章 モジュール分割

4-4 WinMain.cppからゲーム処理を取り出す

(a) ゲーム処理用ソース「Game.cpp」「Game.h」を作成する

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は自分で考えよう!!

確認!!

ここまでやったらリビルドを行い、プログラムが正常に動くかどうか確かめよう。


[ TOP ]