第三十話 構造体
「じゃ、FILEの説明に出てきた構造体をついでに解説しちゃうわよ」
先輩の言葉に、俺たちは耳を傾ける。
「構造体ってのは、要するに一つの変数の中に複数の変数をまとめて入れたものよ」
「それって、何か意味あるんですか?」
「イツキくん、無かったら作られるわけないでしょうが。こうすることで、関連する変数を一つにまとめられるから、わかりやすくなるわけよ」
「関連する変数、ですか?」と西原さん。
「ちょっとこれは例を出したほうがいいわね。たとえばイツキくんらがRPGを作っているとするでしょ。そしてプレイヤーのキャラのデータを作っているとして……」
先輩はカタカタとコードをうち始めた。
#include<stdio.h>
int main(void)
{
struct PC {
char* name;
int hp;
int str;
int mp;
};
struct PC itsuki;
itsuki.name = "イツキ";
itsuki.hp = 50;
itsuki.str = 40;
itsuki.mp = 10;
printf("PC %s HP %d STR %d MP %d \n",itsuki.name, itsuki.hp, itsuki.str, itsuki.mp);
return 0;
}
「こんな風に、一つにまとめていた方が、データを参照するにも便利でしょ」
「ああ、なるほど。確かにそうですね」
「このstructで構造体の型を宣言するの。それから、最初は型のタグで、最後にそのまま変数を追加するなら、省略も可能よ。次の行で、PC itsukiで、PC構造体の型のitsukiって変数を定義するわけ」
「うん。俺キャラのパラメータもばっちり設定されてるぜ」
「でしょ? それに、これだと、たとえばキャラを追加するのも簡単よ」
先輩はさらにコードを付け加える。
int main(void)
{
int i;
struct PC {
char* name;
int hp;
int str;
int mp;
};
struct PC pcs[2];
pcs[0].name = ”イツキ”;
pcs[0].hp = 50;
pcs[0].str = 40;
pcs[0].mp = 10;
pcs[1].name = ”アカネ”;
pcs[1].hp = 30;
pcs[1].str = 30;
pcs[1].mp = 50;
for (i = 0; i < 2; i++){
printf("PC %s HP %d STR %d MP %d \n", pcs[i].name, pcs[i].hp, pcs[i].str, pcs[i].mp);
}
return 0;
}
「ほらね、配列にしたら、for文を使えば複数のキャラの表示も簡単に出来るでしょ?」
「うーむ。確かにこの方がわかりやすくなるなぁ」
「ま、データ構造は、プログラミングの基礎だから、しっかりと覚えておいてね。じゃ、今日はこれくらいにしておくわ」
時間がすでに帰る時刻だ。俺は頷いた。
「今日も勉強したなぁ。もう俺もC言語も使えるようになったかな?」
「甘い甘い」先輩は苦笑しながらかぶりを振った。「C言語はまだまだ奥が深い言語よ。イツキくんに教えていない事は、まだいっぱいあるから、それはまたいずれ話すとするわ。でも、今はゲームを完成させる事に専念するほうがいいわね」
「そ、そうなのか……」
「でも、ここまで来れたイツキくんだもの。大丈夫ですよ」
「うん。私も、そう思う」
西原さんとサヤちゃんにも励まされる。
「じゃ、明日また続きをするとして、今日は解散!」
これで俺の今日の部活は終わった。
明日はいよいよ総集編となる。