新たに別の種類のデータを管理するために構造体に新たなメンバ変数を追加してみます

ソーラー

「突然ですが


構造体をもちいて


player1と名付けられたゲームプレイヤー


player1

HP10

MP8

AP22

TP18


のステータスデータを管理してみましょう。


構造体、構造体変数の名前の付け方のエピソードで


学んだ方法を使って


player1のステータスデータ


HP10

MP8

AP22

TP18


を管理する


構造体、構造体変数の名前をきめてみます


このとき



🍓player1のステータスデータ(player1StatusData)のHP10を🍓


    🍓構造体変数のメンバ変数HPに格納する🍓



ことになります。



👆の文章をよくみると


player1StatusDataと構造体変数が対応しているのがわかります


ですので


構造体変数名はplayer1StatusDataとし


構造体変数player1StatusDataのメンバ変数HPに10を


player1StatusData.HP=10;


のように格納します



次に構造体の名前をきめてみます


HP

MP

AP

TP


の4つのデータをもつものは


プレイヤーのステータスデータですね」


ソーラー

「プレイヤーのステータスデータは


HP

MP

AP

TP


で表されるって ほんと まんまだね」


アレサ


「そこで構造体の名前は


プレイヤーステータスデータを英語に直して


PlayerStatusDataにします


PlayerStatusData型の構造体に


HP

MP

AP

TP

は格納されるので


構造体変数player1StatusDataのメンバ変数は


player1StatusData.HP

player1StatusData.MP

player1StatusData.AP

player1StatusData.TP

となり


player1のステータスデータ


HP10

MP8

AP22

TP18


構造体変数player1StatusDataのメンバ変数に


player1StatusData.HP=10;

player1StatusData.MP=8;

player1StatusData.AP=22;

player1StatusData.TP=18;


と格納されていきます。


構造体の名前はPlayerStatusData

構造体変数の名前はplayer1StatusData


としてプログラムを構成してみます


次のプログラムをご覧ください


#include <stdio.h>

typedef struct PlayerStatusData

{

int HP;

int MP;

int AP;

int TP;

}PlayerStatusData;

/*ここの部分で

struct PlayerStatusDataの構造体宣言struct PlayerStatusDataを行うと同時に

構造体名を struct PlayerStatusData からPlayerStatusDataに変更しました*/


int main(void){


PlayerStatusData player1StatusData;

/* player1の4つのデータ

HP=10

MP=8

AP=22

TP=18

をplayer1StatusDataのメンバ変数

player1StatusData.HP

player1StatusData.MP

player1StatusData.AP

player1StatusData.TP

に格納するために

player1StatusDataの構造体変数宣言をおこないました。*/


player1StatusData.HP=10;

player1StatusData.MP=8;

player1StatusData.AP=22;

player1StatusData.TP=18;

/* player1のステータスデータを

構造体変数player1StatusDataのメンバ変数に代入しました。*/


printf ("%d\n", player1StatusData.HP);

printf ("%d\n", player1StatusData.MP);

printf ("%d\n", player1StatusData.AP);

printf ("%d\n", player1StatusData.TP);

/* player1のステータスデータをprintf出力表示しました。*/


return 0;

}


コンパイル結果

10

8

22

18


アレサ


「このプログラムを見てお分かりになられますように


構造体struct PlayerStatusDataと構造体変数player1StatusDataをもちいて


player1のステータスデータを管理し


printf出力表示することができました。


このプログラムは


構造体変数宣言と初期化を同時に行い簡略化することにより


次のように記述することもできます。


#include <stdio.h>

typedef struct PlayerStatusData

{

int HP;

int MP;

int AP;

int TP;

}PlayerStatusData;

/*ここの部分で

struct PlayerStatusDataの構造体宣言struct PlayerStatusDataを行うと同時に

構造体名を struct PlayerStatusData からPlayerStatusDataに変更しました*/


int main(void){


PlayerStatusData player1StatusData={10,8,22,18};

/* 👆このように

player1の構造体変数宣言、初期化を同時に行い簡略化しました。*/


printf ("%d\n", player1StatusData.HP);

printf ("%d\n", player1StatusData.MP);

printf ("%d\n", player1StatusData.AP);

printf ("%d\n", player1StatusData.TP);

/*player1のデータをprintf出力表示しました。*/


return 0;

}


コンパイル結果

10

8

22

18


アレサ「構造体の便利なところは


構造体をもちいて複数のプレーヤー

player1

player2

player3

player4

player5

のデータを簡単に管理できることにあります。


こんどは

ゲームプレイをしている

player1

HP10

MP8

AP22

TP18


player2

HP100

MP38

AP60

TP77


player3

HP555

MP150

AP220

TP338

の方のデータを管理、表示してみましょう。


#include <stdio.h>

typedef struct PlayerStatusData

{

int HP;

int MP;

int AP;

int TP;

}PlayerStatusData;

/*ここの部分で

struct PlayerStatusDataの構造体宣言struct PlayerStatusDataを行うと同時に

構造体名を struct PlayerStatusData からPlayerStatusDataに変更しました*/


int main(void){


PlayerStatusData player1StatusData={10,8,22,18};

PlayerStatusData player2StatusData={100,38,60,77};

PlayerStatusData player3StatusData={555,150,220,338};

/* このように簡略化して

player1StatusData

player2StatusData

player3StatusData

構造体変数宣言、初期化を同時におこないました。*/


printf("player1\n");

printf ("%d\n", player1StatusData.HP);

printf ("%d\n", player1StatusData.MP);

printf ("%d\n", player1StatusData.AP);

printf ("%d\n", player1StatusData.TP);

/* player1のデータを表示します。*/


printf("player2\n");

printf ("%d\n", player2StatusData.HP);

printf ("%d\n", player2StatusData.MP);

printf ("%d\n", player2StatusData.AP);

printf ("%d\n", player2StatusData.TP);

/* player2のデータを表示します。*/


printf("player3\n");

printf ("%d\n", player3StatusData.HP);

printf ("%d\n", player3StatusData.MP);

printf ("%d\n", player3StatusData.AP);

printf ("%d\n", player3StatusData.TP);

/* player3のデータを表示します。*/



return 0;

}


コンパイル結果


player1

10

8

22

18

player2

100

38

80

77

player3

555

150

220

338


ソーラー「player3の人は大分レベルをあげているね。


HP 555

TP(テクニックポイント)338まであげているね。」


アレサ「このようにゲーム管理者には


各プレイヤーのデータがみえているわけです。


そこで


今回、ゲーム好きplayer1の方に


クエストを3つクリアしてもらうことにします。


どれくらいでクリアできるかな


それでは


player1の方 よろしくおねがいしま~す。」


player1「腕がなるぜ!!!」


player2「にゃ~~~~~ん~~~」


player3 「おC~」



ソーラー「どっかで聞いたことがあるような声だなあ・・・」


こうして 勇者player1 は旅立っていった。


途中で川越え、山越え、ついにクエストを3つクリアした。


アレサ「さあ、結果はどうなったでしょうか?


結果は


クエスト1  150秒

クエスト2  7800秒

クエスト3  1238000秒


クエスト3 クリアに


1日24時間プレイしたとして


14.328703700370・・日かかっておられますね。


1日6時間プレイしたとしてもクリアに57日かかる計算になります。


1日3時間プレイしたとしてもクリアに114日かかる計算になります。


1日2時間プレイしたとしてもクリアに171日かかる計算になります。



ソーラー 「171日!! なんだって!


これは相当な時間が費やされているね。」


アレサ 「楽しい旅をされたのでしょうか?


そこが気になります。」


ソーラー 「そうだね。充実したよい時間をすごしてほしいな。」


player1 「もちろん、楽しい旅だったさ」


ソーラー 「そうこなくっちゃ」



アレサ 「さて、このplayer1のクエストクリア時間も


変数に格納し構造体におさめてみましょう。


#include <stdio.h>

typedef struct PlayerStatusData

{

int HP;

int MP;

int AP;

int TP;

int cleartimequest1;

int cleartimequest2;

int cleartimequest3;

}PlayerStatusData;

/*ここの部分で

struct PlayerStatusDataの構造体宣言struct PlayerStatusDataを行うと同時に

構造体名を struct PlayerStatusData 

からPlayerStatusDataに変更しました。

そして

クエスト終了時刻を格納するために

メンバ変数として

変数

cleartimequest1

cleartimequest2

cleartimequest3を追加しました。*/


int main(void){


PlayerStatusData player1StatusData;

/* player1のデータを管理するために

player1StatusDataの構造体変数宣言をおこないました。

*/


player1StatusData.HP=10;

player1StatusData.MP=8;

player1StatusData.AP=22;

player1StatusData.TP=18;

player1StatusData.cleartimequest1=150;

player1StatusData.cleartimequest2=7800;

player1StatusData.cleartimequest3=123800;

/* player1のデータを

構造体変数 player1StatusDataのメンバ変数に代入しました。*/


printf("player1\n");

printf ("%d\n", player1StatusData.HP);

printf ("%d\n", player1StatusData.MP);

printf ("%d\n", player1StatusData.AP);

printf ("%d\n", player1StatusData.TP);

printf ("%d\n", player1StatusData.cleartimequest1);

printf ("%d\n", player1StatusData.cleartimequest2);

printf ("%d\n", player1StatusData.cleartimequest3);


/* player1のデータをprintf出力表示しました。*/


return 0;

}


コンパイル結果

player1

10

8

22

18

150

7800

123800


アレサ「構造体にメンバ変数として


cleartimequest1

cleartimequest2

cleartimequest3

を追加して


3つのクエストクリア時間をplayer1のデータに


加えることができましたの」



  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます