新たに別の種類のデータを管理するために構造体に新たなメンバ変数を追加してみます
ソーラー
「突然ですが
構造体をもちいて
player1と名付けられたゲームプレイヤー
player1
HP10
MP8
AP22
TP18
のステータスデータを管理してみましょう。
構造体、構造体変数の名前の付け方のエピソードで
学んだ方法を使って
player1のステータスデータ
HP10
MP8
AP22
TP18
を管理する
構造体、構造体変数の名前をきめてみます
このとき
🍓player1のステータスデータ(player1StatusData)のHP10を🍓
🍓構造体変数のメンバ変数HPに格納する🍓
ことになります。
👆の文章をよくみると
player1StatusDataと構造体変数が対応しているのがわかります
ですので
構造体変数名はplayer1StatusDataとし
構造体変数player1StatusDataのメンバ変数HPに
player1のステータスデータ
HP10を
player1StatusData.HP=10;
のように格納します
次に構造体の名前をきめてみます
HP
MP
AP
TP
の4つのデータをもつものは
プレイヤーのステータスデータですね」
ソーラー
「プレイヤーのステータスデータは
HP
MP
AP
TP
で表されるって ほんと まんまだね」
アレサ
「そこで構造体の名前は
プレイヤーステータスデータを英語に直して
PlayerStatusDataにします
PlayerStatusData型の構造体のメンバ変数は
HP
MP
AP
TP
に設定します
PlayerStatusData型の構造体に
HP
MP
AP
TP
は格納されるので
player1StatusDataの構造体PlayerStatusData型の構造体変数宣言
PlayerStatusData.player1StatusData;
により生成される
構造体変数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>
struct PlayerStatusData
{
int HP;
int MP;
int AP;
int TP;
};
/*ここの部分で
struct PlayerStatusDataの構造体宣言struct PlayerStatusDataを行っています*/
int main(void){
struct 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};
/* 👆このように
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
アレサ「構造体の便利なところは
構造体をもちいて複数のプレーヤー
player1
player2
player3
player4
player5
・
・
・
・
のデータを簡単に管理できることにあります。
こんどは
ゲームプレイをしている
player1
HP10
MP8
AP22
TP18
player2
HP100
MP38
AP60
TP77
player3
HP555
MP150
AP220
TP338
の3人のプレイヤー
player1
player2
player3
の方のデータを管理、表示してみましょう。
#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のクエストクリア時間も
構造体変数player1StatusDataのメンバ変数(cleartimequest1)に格納できるよう
構造体にメンバ変数(cleartimequest1)を作製してみましょう。
#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
アレサ「構造体PlayerStatusDataにメンバ変数として
cleartimequest1
cleartimequest2
cleartimequest3
を追加して
3つのクエストクリア時間をplayer1のデータに
加えることができましたの」
今のプログラムの
PlayerStatusData player1StatusData = { 10,8,22,18 };
PlayerStatusData player2StatusData = { 100,38,60,77 };
PlayerStatusData player3StatusData = { 555,150,220,338 };
player1StatusData.cleartimequest1 = 150;
player1StatusData.cleartimequest2 = 7800;
player1StatusData.cleartimequest3 = 123800;
の部分を
次のように
PlayerStatusData player1StatusData = { 10,8,22,18,150,7800,123800 };
PlayerStatusData player2StatusData = { 100,38,60,77 };
PlayerStatusData player3StatusData = { 555,150,220,338 };
記述して
より簡単に
構造体変数 player1StatusDataのメンバ変数
player1StatusData.HP
player1StatusData.MP
player1StatusData.AP
player1StatusData.TP
player1StatusData.cleartimequest1
player1StatusData.cleartimequest2
player1StatusData.cleartimequest3
を初期化することができます。
#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 = { 10,8,22,18,150,7800,123800 };
PlayerStatusData player2StatusData = { 100,38,60,77 };
PlayerStatusData player3StatusData = { 555,150,220,338 };
/* このように簡略化して1度に
player1StatusDataのすべてのメンバ変数
player1StatusData.HP
player1StatusData.MP
player1StatusData.AP
player1StatusData.TP
player1StatusData.cleartimequest1
player1StatusData.cleartimequest2
player1StatusData.cleartimequest3
を初期化しました
*/
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のデータをcout出力表示しました。*/
return 0;
}
ビルド実行結果
player1
10
8
22
18
150
7800
123800
☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆
今のプログラムの
構造体変数PlayerStatusDataのメンバ変数
PlayerStatusData player1StatusData
PlayerStatusData player2StatusData
PlayerStatusData player3StatusData
の初期化
の部分を
次のように
PlayerStatusData player1StatusData = { 10,8,22,18,150,7800,123800 };
PlayerStatusData player2StatusData = { 100,38,60,77 };
PlayerStatusData player3StatusData = { 555,150,220,338 };
記述して
より簡単に
構造体変数 player1StatusDataのメンバ変数
player1StatusData.HP
player1StatusData.MP
player1StatusData.AP
player1StatusData.TP
player1StatusData.cleartimequest1
player1StatusData.cleartimequest2
player1StatusData.cleartimequest3
を初期化することができます。
#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 = { 10,8,22,18,150,7800,123800 };
PlayerStatusData player2StatusData = { 100,38,60,77 };
PlayerStatusData player3StatusData = { 555,150,220,338 };
/* このように簡略化して1度に
player1StatusDataのすべてのメンバ変数
player1StatusData.HP
player1StatusData.MP
player1StatusData.AP
player1StatusData.TP
player1StatusData.cleartimequest1
player1StatusData.cleartimequest2
player1StatusData.cleartimequest3
を初期化しました
*/
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のデータをcout出力表示しました。*/
return 0;
}
ビルド実行結果
player1
10
8
22
18
150
7800
123800
☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます