共用体

 キャラクター個人のステータス要素ではなく、パーティー全体のステータス要素があります。「所持金」がその例です(個人個人で財布を管理しているゲームはほとんど無いでしょう)。「つよさ」の画面を見ると所持金も表示されますが、パーティー全体の所持金です。個人個人を定義する構造体だと、情報が点在することになります。そこで、情報を一元的に管理できる(メモリ上で同じ場所を見に行く)仕組みがあります。それが共用体です。

 以下のプログラムを作成し、実行してみて下さい。

#include <stdio.h>
#include <string.h>

union party {
    int money;              // 所持金
};

struct person {
    char name[40];          // 名前
    char job[40];           // 職業
    int lv;                 // レベル
    int hp;                 // HP
    int mp;                 // MP
    union party myParty;    // 所属するパーティー
};
typedef struct person character;

void showStatus(character chara) {
    printf("名前:%s\n", chara.name);
    printf("職業:%s\n", chara.job);
    printf("レベル:%d\n", chara.lv);
    printf("HP:%d\n", chara.hp);
    printf("MP:%d\n", chara.mp);
    printf("所持金:%dゴールド\n", chara.myParty.money);
}

int main(int argc, const char * argv[])
{
    
    // insert code here...
    
    // パーティー
    union party ourParty;
    ourParty.money = 1000;
    
    // 戦士「ああああ」
    character aaaa;
    strcpy(aaaa.name, "ああああ");
    strcpy(aaaa.job, "戦士");
    aaaa.lv = 40;
    aaaa.hp = 360;
    aaaa.mp = 0;
    aaaa.myParty = ourParty;
    
    // 魔法使い「いいいい」
    character iiii;
    strcpy(iiii.name, "いいいい");
    strcpy(iiii.job, "魔法使い");
    iiii.lv = 38;
    iiii.hp = 250;
    iiii.mp = 230;
    iiii.myParty = ourParty;
    
    showStatus(aaaa);
    showStatus(iiii);
    
    return 0;
}

 以下のような結果が出力されます。

名前:ああああ
職業:戦士
レベル:40
HP:360
MP:0
所持金:1000ゴールド
名前:いいいい
職業:魔法使い
レベル:38
HP:250
MP:230
所持金:1000ゴールド

 Tips:共用体もtypedef宣言で別名をつけることが可能です。

■スポンサーリンク

このページの先頭へ