初期化処理では、キャラクタ別に各種ステータスを設定するため、非常に長くなってしまう。初期化する内容はどのキャラクタでも大体同じなので、
初期化用の関数を作成すると便利(かもしれない)。
構造体変数のポインタと、ステータス情報の各値を引数にした
初期化用の関数を作成する。[ステータス情報初期化関数]
//----------------------------------------------------------------------------- // 関数名 : StatusInit() // 機能概要: ステータス情報初期化 //----------------------------------------------------------------------------- void StatusInit(STATUS *status, int left, int top, int right, int bottom, int hleft, int htop, int hright, int hbottom, int x, int y, int move_x, int move_y) { SetRect(&status->rect, left, top, right, bottom); SetRect(&status->hitrect, hleft, htop, hright, hbottom);status->width = status->rect.right - status->rect.left;status->height = status->rect.bottom - status->rect.top;status->x = x; status->y = y; status->move_x = move_x; status->move_y = move_y; }
※キャラクタの幅と高さは計算で求めている。
[アロー演算子]
構造体ポインタ変数の値を参照するには*status.widthではなく、アロー演算子を用いstatus->widthと表現する。
作成した関数のプロトタイプ宣言を行った後、初期化処理(GameInit関数)でステータス情報初期化関数を利用してキャラクタの各種ステータス情報を初期化する。
[ステータス情報初期化関数を利用した初期化処理]
StatusInit(&Angel, 0, 608, 48, 656, 4, 4, 40, 40, 310, 230, 4, 4); // 天使
※引数にキャラクタの幅と高さは含まれていないことに注意!!
3-4のプログラムに
ステータス情報初期化関数を追加して初期化処理を修正すると、Game.cppは次のようになる。[修正後のGame.cpp]
//============================================================================= // Game処理関係の自作関数群 //============================================================================= #include "common.h" //----------------------------------------------------------------------------- // プロトタイプ宣言(ソース内でしか使わないもの) //----------------------------------------------------------------------------- static void ScreenOut(void); static void CharMove(void); static void ScreenHitCheck(void); static void CharHitCheck(void); static bool HitCheck(RECT, RECT);static void StatusInit(STATUS*, int, int, int, int, int, int, int, int, int, int, int, int);//----------------------------------------------------------------------------- // ゲーム処理用グローバル変数 //-----------------------------------------------------------------------------static STATUS Angel; // 天使・ ・ ・ //----------------------------------------------------------------------------- // 関数名 : GameInit() // 機能概要: スタート処理初期化 //----------------------------------------------------------------------------- void GameInit(HWND hWnd) { //------------------------------------------------------- 各変数の初期化 /* 天使(カーソルキーで移動) */StatusInit(&Angel, 0, 608, 48, 656, 4, 4, 40, 40, 310, 230, 4, 4);/* ゴキブリ(動かない) */ ・ ・ ・※初期化処理もすっきりした
確認!!
Game.cppにステータス情報初期化用関数を作成し、初期化処理をその関数で行うようプログラムを修正し、正常に動くかどうか確かめよう。