この章では、キャラクタを制御する各変数を構造体で持ち、キャラクタ情報を効率的に管理する方法を学ぶ。
4章までのプログラムでは、キャラクタ情報を全てグローバル変数として宣言しているため、情報が増えれば増えるほど見にくくなる。
[現在のキャラクタ情報]
//----------------------------------------------------------------------------- // ゲーム処理用グローバル変数 //----------------------------------------------------------------------------- /* 天使のキャラクタ情報 */ static RECT AngelRect; // 矩形 static RECT AngelHitRect; // 当たり判定用矩形 static int AngelWidth, AngelHeight; // 幅・高さ static int AngelX, AngelY; // 表示座標 static int AngelMoveX, AngelMoveY; // 移動量 /* ゴキブリのキャラクタ情報 */ static RECT GokiRect; // 矩形 static RECT GokiHitRect; // 当たり判定用矩形 static int GokiWidth, GokiHeight; // 幅・高さ static int GokiX, GokiY; // 表示座標
- キャラクタの情報(ライフ、スコアなど)が増えると見にくくなる
- 違うキャラクタでも、持つべき情報はほとんど同じ
- 変数名が覚えきれない
- ...etc
そこで、キャラクタが持つべき情報を構造体で宣言し、キャラクタの数だけ構造体変数を持つことにより、管理を容易にする。
※構造体についてはC言語の教科書またはWeb教材のC言語入門「第10章構造体」を参照
現在、天使またはゴキブリが持っている情報は次の通りである。
- バック・バッファに表示するときの
x、y座標- 転送元画像の
矩形- 当たり判定用の
矩形- x方向、y方向の
移動量- キャラクタの
幅と高さこれらの情報を持つ構造体を作成する。
[common.h]
struct STATUS { int x, y; // 表示座標 RECT rect; // 画像の矩形 RECT hitrect; // 当たり判定用の矩形 int move_x, move_y; // 移動量 int width, height; // キャラクタの幅と高さ };※common.h内で構造体を宣言すると、ソース内で宣言する必要が無いだけでなく、どのソースからも使える