第5章 キャラクタ構造体を使う

この章では、キャラクタを制御する各変数を構造体で持ち、キャラクタ情報を効率的に管理する方法を学ぶ。

4章までのプログラム

5-1.キャラクタ構造体とは

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;            // 表示座標

そこで、キャラクタが持つべき情報を構造体で宣言し、キャラクタの数だけ構造体変数を持つことにより、管理を容易にする。

※構造体についてはC言語の教科書またはWeb教材のC言語入門「第10章構造体」を参照

(a) キャラクタ構造体の作り方

現在、天使またはゴキブリが持っている情報は次の通りである。

  1. バック・バッファに表示するときのx、y座標
  2. 転送元画像の矩形
  3. 当たり判定用の矩形
  4. x方向、y方向の移動量
  5. キャラクタの高さ

これらの情報を持つ構造体を作成する。

[common.h]
struct STATUS {
    int x, y;           // 表示座標
    RECT rect;          // 画像の矩形
    RECT hitrect;       // 当たり判定用の矩形
    int move_x, move_y; // 移動量
    int width, height;  // キャラクタの幅と高さ
};

※common.h内で構造体を宣言すると、ソース内で宣言する必要が無いだけでなく、どのソースからも使える


[ TOP ]