配列と構造体

 RPGでは、よくパーティーの並び順を変更できます。変更することで、見た目や戦闘でのコマンド入力の順番も変わりますし、後ろのキャラほど攻撃を受けにくいといったルールを採用するRPGもあります。ここで、C言語の配列を使えば、並び順というものについてもプログラムで実装できることになります。

character party[4];

 このように宣言すれば、4人組のパーティー編成を宣言できます。以下のサンプルプログラムを確認してみて下さい。

void showStatus(struct person 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);
}

 このように書きます。構造体の指定の際は必ず「struct person aaaa;」のように「struct (構造体の型名) (変数名)」、つまり、3つの単語を記述しなければなりません。プログラムが長くなると少々面倒になります。「int a;」のように型名と変数名だけで定義できたら楽になります。それを実現してくれるのがtypedef宣言です。typedef宣言は、構造体の定義のすぐ下に、

typedef struct person character;

 このように書くことで、それ以降は「struct person」と2つの単語を書かなくても「character」の単語1語で済みます。「struct person」=「character」という意味が定義されます。以下のサンプルプログラムを確認してみて下さい。

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

struct person {
    char name[40];      // 名前
    char job[40];       // 職業
    int lv;             // レベル
    int hp;             // HP
    int mp;             // MP
};
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);
}

int main(int argc, const char * argv[])
{
    
    // insert code here...
    
    // 冒険するパーティーを宣言
    character party[4];
    
    // 戦士「ああああ」
    strcpy(party[0].name, "ああああ");
    strcpy(party[0].job, "戦士");
    party[0].lv = 40;
    party[0].hp = 360;
    party[0].mp = 0;
    
    // 魔法使い「いいいい」
    strcpy(party[1].name, "いいいい");
    strcpy(party[1].job, "魔法使い");
    party[1].lv = 38;
    party[1].hp = 250;
    party[1].mp = 230;
    
    showStatus(party[0]);
    showStatus(party[1]);
    
    return 0;
}

 前回までのプログラムと同じ結果になることを確認して下さい。並び順を定義できるので、当然、並び替えも行えるわけです。

■スポンサーリンク

このページの先頭へ