💖has a💖の関係を用いて ゲームキャラクターが持ち物を持っていることを表現することができます

ソーラー「今日はゲーム内に登場させるゲームキャラクターが


持ち物を持っているということを表現してみたいと思います」



マックス「もちものを誰が所有しているかをあらわすことができるってことか」


ソーラー「


そうなんです


とりあえず


ゲーム内に登場するアイテム



取り扱うためのオブジェクトを生成するための



クラスItemと


そのメンバ関数ItemDataDisplay()の定義を


作製してみたいと思います」


👇

class Item{


public:

string itemname;


public:

void itemDataDisplay();


};



void Item::itemDataDisplay() {


cout << itemname << "\n";



}


ソーラー「そして



クラスItemが用いられたプログラムは以下のようになります」


#include <iostream>

#include <string>//文字列を取り扱うためにヘッダファイル <string>をインクルードしています

using namespace std;


class Item {


public:

string itemname;



public:

void itemDataDisplay();


};



void Item::itemDataDisplay() {


cout << itemname << "\n";



}



int main() {


Item kakinotane;


kakinotane.itemname = "柿の種";


kakinotane.itemDataDisplay();


return 0;

}


ビルド実行結果


柿の種




マックス「・・・


くっくっ






             柿の種






が表示されたか」



ソーラー「


そして



クラスGameCharacterとそのメンバ関数statusDataDisplay()の定義は


以下のように設定します


今までの


クラスGameCharacterとそのメンバ関数statusDataDisplay()の定義


から


ちょっと変更されているよ


どこだかわかるかな?」


👇


class GameCharacter {


public:

string name;

int HP;

int MP;

Item item;//👈ここです

void statusDataDisplay();


};



void GameCharacter::statusDataDisplay() {


cout << name << "\n";

cout << "HP " << HP << "\n";

cout << "MP " << MP << "\n";

cout <<name<< "のもちもの" << item.itemname<< "\n";//👈ここです

}


マックス「なんだ?


クラスGameCharacterのクラス宣言に


なんか


itemのItem型のオブジェクト宣言


Item item;


が設定されている


しかも


クラスGameCharacterのメンバ関数statusDataDisplay()の定義に


cout <<name<< "のもちもの" << item.itemname<< "\n";//👈


が追加されたか


なんだ

ど~いうことだ・・・・・」


👇


class GameCharacter {


public:

string name;

int HP;

int MP;

Item item;//👈ここです

void statusDataDisplay();


};


void GameCharacter::statusDataDisplay() {


cout << name << "\n";

cout << "HP " << HP << "\n";

cout << "MP " << MP << "\n";

cout <<name<< "のもちもの" << item.itemname<< "\n";//👈ここです

}





ソーラー「


これで


ゲームキャラクターであるリリアーネは


持ち物を所有することができることを


プログラムを用いて表現することができるようになります


つまり


持ち物を誰が所有しているかをあらわすことができるようになるんです」


そのことを示すプログラムはこちらです


👇


#include <iostream>

#include <string>//文字列を取り扱うためにヘッダファイル <string>をインクルードしています

using namespace std;


class Item {


public:

string itemname;



public:

void itemDataDisplay();


};



void Item::itemDataDisplay() {


cout << itemname << "\n";



}



class GameCharacter {


public:

string name;

int HP;

int MP;

Item item;//👈ここです

void statusDataDisplay();


};



void GameCharacter::statusDataDisplay() {


cout << name << "\n";

cout << "HP " << HP << "\n";

cout << "MP " << MP << "\n";

cout <<name<< "のもちもの " << item.itemname << "\n";//👈ここです

}




int main() {



GameCharacter Lyliane;


Lyliane.name = "リリアーネ";

Lyliane.HP = 10;

Lyliane.MP = 8;

Lyliane.item.itemname= "柿の種";


Lyliane.statusDataDisplay();


return 0;

}


ビルド実行結果


HP 10

MP 8

リリアーネのもちもの 柿の種


マックス「



GameCharacter Lyliane;



GameCharacter型のオブジェクトLylianeを生成している


そうして


ゲームキャラクターであるリリアーネのステータスデータ


名前 リリアーネ

HP 10

MP 8



オブジェクトLylianeのメンバ変数


Lyliane.name

Lyliane.HP

Lyliane.MP



Lyliane.name = "リリアーネ";

Lyliane.HP = 10;

Lyliane.MP = 8;


代入しているわけだ




Lyliane.item.itemname= "柿の種";


は何が行われているのかということなんだが・・」


ソーラー「


Lyliane.item.itemname= "柿の種";



ゲームキャラクターであるリリアーネの持ち物である


            柿の種


の名前を


オブジェクトLylianeのメンバ変数


Lyliane.item.itemname


に代入しています


Lylianeのメンバオブジェクトが


Lyliane.itemで


Lylianeのメンバオブジェクト


Lyliane.itemのメンバ変数が


Lyliane.item.itemname


となっています


Lyliane.item.itemname= "柿の種";


が実行されている状態は


リリアーネのもちものが柿の種であるということを


あらわしています


Lyliane.item.itemname= "柿の種";


が実行された後


Lyliane.item.itemnameに何もデータを代入しなければ


リリアーネのもちものはずっと


柿の種ということになります


となると


この状態から


リリアーネが何も持ち物を持っていない状態を表現するためには


Lyliane.item.itemname= " ";


を実行すればよいことになります


そのプログラムはこちらです

👇

#include <iostream>

#include <string>//文字列を取り扱うためにヘッダファイル <string>をインクルードしています

using namespace std;


class Item {


public:

string itemname;



public:

void itemDataDisplay();


};



void Item::itemDataDisplay() {


cout << itemname << "\n";



}



class GameCharacter {


public:

string name;

int HP;

int MP;

Item item;//👈ここです

void statusDataDisplay();


};



void GameCharacter::statusDataDisplay() {


cout << name << "\n";

cout << "HP " << HP << "\n";

cout << "MP " << MP << "\n";

cout << name << "のもちもの " << item.itemname << "\n";//👈ここです

}




int main() {




GameCharacter Lyliane;


Lyliane.name = "リリアーネ";

Lyliane.HP = 10;

Lyliane.MP = 8;

Lyliane.MP = 8;

Lyliane.item.itemname = "柿の種";

Lyliane.statusDataDisplay();


Lyliane.item.itemname = " ";


Lyliane.statusDataDisplay();


return 0;

}


ビルド実行結果


HP 10

MP 8

リリアーネのもちもの 柿の種

HP 10

MP 8

リリアーネのもちもの 


//🌞リリアーネのもちものに何も表示されなくなりました 


ソーラー「このように


GameCharacterのクラス宣言内に


別のクラス宣言Item item;


を設定して


キャラクターが持ち物を持っていることを表現することができます


このときの


クラスGameCharacter



クラスItem


 の関係を



         💖has aの関係💖


といいます


Lyliane.item.itemname の構造は



クラスGameCharacter型のオブジェクトLylianeが


子クラスItem型のオブジェクトitemを管理していることになります


ですので


Lyliane.item.itemnameにアクセスして


Lyliane.item.itemnameに格納されているデータを変更するには


もちろん


GameCharacter Lyliane;


を実行し


Lyliane.item.itemname


を作製する必要があります


kakinotaneのクラスItem型のオブジェクト宣言


Item kakinotane;


kakinotane.itemname = "柿の種";


を実行しただけでは


柿の種がリリアーネの持ちものであることを表現することはできませんが


GameCharacterのクラス宣言内に


クラス宣言Item item;


を設定することにより


LylianeのクラスGameCharacter型のオブジェクト宣言


GameCharacter Lyliane;


Lyliane.item.itemname = "柿の種";


を実行して


柿の種がリリアーネの持ちものであることを表現することができています」




マックス「?


もしや・・・


??


GameCharacterのクラス宣言内に


別のクラス宣言Item item;


を設定してみたら


       

          😊たまたま😊



リリアーネの持ち物が


柿の種であることを表現することが


できるようになったってことなんじゃないかあ?」


ソーラー「うぅ ぐぅぅ


す、するどい


そう


GameCharacterのクラス宣言内に


別のクラス宣言Item item;


を設定してみたら


       

          😊たまたま😊



リリアーネの持ち物が


柿の種であることを表現することが


できるようになったんです😊



まあ


Lyliane.item.itemname = "柿の種";


が実行されている以上


Lyliane.statusDataDisplay();


を実行すれば


ビルド実行結果


HP 10

MP 8

リリアーネのもちもの 柿の種


表示されるのですから


コマンドプロンプト画面を見ている人は


リリアーネが柿の種をもっているようにみえるわけです」




     



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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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