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

ソーラー

「突然ですが


構造体をもちいて


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


player1

HP10

MP8

AP22

TP18


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


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


学んだ方法を使って


player1のステータスデータ


HP10

MP8

AP22

TP18


を管理する


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


このとき



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


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



ことになります。



👆の文章をよくみると


player1のステータスデータ(player1StatusData)と構造体変数が対応しているのがわかります


ですので


構造体変数名はplayer1StatusDataとし


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


player1のステータスデータ


HP10を


player1StatusData.HP=10;


のように格納します



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


HP

MP

AP

TP


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


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


ソーラー

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


HP

MP

AP

TP


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


てんC


「そこで構造体の名前は


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


PlayerStatusDataにします


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 <iostream>


using namespace std;


typedef struct PlayerStatusData

{

int HP;

int MP;

int AP;

int TP;

}PlayerStatusData;

/*ここの部分で

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

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


int main(){


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のメンバ変数に代入しました。*/


cout<<player1StatusData.HP<<"\n";

cout<<player1StatusData.MP<<"\n";

cout<<player1StatusData.AP<<"\n";

cout<<player1StatusData.TP<<"\n";

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


return 0;

}


ビルド実行結果

10

8

22

18


てんC


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


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


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


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


このプログラムは


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


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


#include <iostream>


using namespace std;


typedef struct PlayerStatusData

{

int HP;

int MP;

int AP;

int TP;

}PlayerStatusData;

/*ここの部分で

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

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


int main() {


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

/* 👆このように

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


cout << player1StatusData.HP << "\n";

cout << player1StatusData.MP << "\n";

cout << player1StatusData.AP << "\n";

cout << player1StatusData.TP << "\n";

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


return 0;

}


ビルド実行結果

10

8

22

18


てんC「構造体の便利なところは


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

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 <iostream>


using namespace std;


typedef struct PlayerStatusData

{

int HP;

int MP;

int AP;

int TP;

}PlayerStatusData;

/*ここの部分で

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

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


int main() {


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

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

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

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

player1StatusData

player2StatusData

player3StatusData

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


cout << "player1"<< "\n";

cout << player1StatusData.HP << "\n";

cout << player1StatusData.MP << "\n";

cout << player1StatusData.AP << "\n";

cout << player1StatusData.TP << "\n";

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



cout << "player2"<< "\n";

cout << player2StatusData.HP << "\n";

cout << player2StatusData.MP << "\n";

cout << player2StatusData.AP << "\n";

cout << player2StatusData.TP << "\n";

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


cout << "player3"<< "\n";

cout << player3StatusData.HP << "\n";

cout << player3StatusData.MP << "\n";

cout << player3StatusData.AP << "\n";

cout << player3StatusData.TP << "\n";

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

return 0;

}


ビルド実行結果


player1

10

8

22

18

player2

100

38

80

77

player3

555

150

220

338


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


HP 555

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


てんC「このようにゲーム管理者には


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


そこで


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


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


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


それでは


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


player1「腕がなるぜ!!!」


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


player3 「はいですの」



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


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


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


てんC「さあ、結果はどうなったでしょうか?


結果は


クエスト1  150秒

クエスト2  7800秒

クエスト3  1238000秒


クエスト3 クリアに


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


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


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


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


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



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


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


てんC 「楽しい旅をされたのでしょうか?


そこが気になります。」


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


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


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



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


構造体変数player1StatusDataのメンバ変数(cleartimequest1)に格納できるよう


構造体にメンバ変数(cleartimequest1)を作製してみましょう。


#include <iostream>


using namespace std;



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() {


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

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

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

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

player1StatusData

player2StatusData

player3StatusData

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


player1StatusData.cleartimequest1 = 150;

player1StatusData.cleartimequest2 = 7800;

player1StatusData.cleartimequest3 = 123800;

/* さらに

player1のクエスト終了時刻データを

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

player1StatusData.cleartimequest1

player1StatusData.cleartimequest2

player1StatusData.cleartimequest3


に追加して代入しました。*/

cout << "player1"<< "\n";

cout << player1StatusData.HP << "\n";

cout << player1StatusData.MP << "\n";

cout << player1StatusData.AP << "\n";

cout << player1StatusData.TP << "\n";

cout << player1StatusData.cleartimequest1 << "\n";

cout << player1StatusData.cleartimequest2 << "\n";

cout << player1StatusData.cleartimequest3 << "\n";


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

return 0;

}


ビルド実行結果

player1

10

8

22

18

150

7800

123800


てんC「構造体にメンバ変数として


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 <iostream>


using namespace std;



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() {


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

を初期化しました

*/


cout << "player1" << "\n";

cout << player1StatusData.HP << "\n";

cout << player1StatusData.MP << "\n";

cout << player1StatusData.AP << "\n";

cout << player1StatusData.TP << "\n";

cout << player1StatusData.cleartimequest1 << "\n";

cout << player1StatusData.cleartimequest2 << "\n";

cout << player1StatusData.cleartimequest3 << "\n";



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


return 0;

}


ビルド実行結果

player1

10

8

22

18

150

7800

123800


☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆



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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る