新たに別の種類のデータを管理するために構造体に新たなメンバ変数を追加してみます
ソーラー
「突然ですが
構造体をもちいて
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
☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆ ☆
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます