クラスGameCharacterとクラスShiledを用いてゲームキャラクターに盾を装備させることに相当するプログラムを実行してみましょう

マックス「ゲームキャラクターといったら


武器や防具の装備だろう


装備がよければ


キャラクターを簡単に強くすることができるからな


にゃ( ̄∇ ̄;)ハッハッハ」


ソーラー「そうなんだけど


ゲームキャラクターを強くすることができるのは

















            LOVE  愛





なんです」



マックス「あ、あ・・・」


ソーラー「っでも


やっぱり


ゲームキャラクターに


武器や防具を装備させると簡単に強くなるね!」




マックス「


ゲームキャラクター


リリアーネに


武器や防具を装備させる


ということをプログラムで表現することができるのか?」



ソーラー「もっちろん!


たいていのRPGゲームでは


ゲームキャラクターに


攻撃力

防御力


が設定されていて


武器や防具を装備することにより


攻撃力

防御力


アップすることができますね


そのことをプログラムを用いて表現してみたいと思います」



ぶーにゃん「にゃ~ん😸」



ソーラー「


以前のエピソードでは


クラスShieldと


そのメンバ関数shieldDataDisplay()の定義は


以下のように設定されていました

👇

class Shield{


public:

string shieldname;

int shieldDP;

public:

void shieldDataDisplay();


};



void Shield::shieldDataDisplay() {


cout << shieldname << "\n";

cout << "防御力 " << shieldDP << "\n";


}


そして



クラスGameCharacterとそのメンバ関数statusDataDisplay()の定義は以下のように設定されていましたね

👇


class GameCharacter {


public:

string name;

int HP;

int MP;


void statusDataDisplay();


};



void GameCharacter::statusDataDisplay() {


cout << name << "\n";

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

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

}


ソーラー「


今度は


ゲームキャラクターの


DP(防御力)


を取り扱う


         オブジェクト


が生成できるよう


クラスGameCharacterに


メンバ変数宣言


int DP;



メンバ関数宣言


void setShield(Shield a);


を付け加えてみたいと思います」



マックス「void setShield(Shield a);??」



ソーラー「


そのときの


クラスGameCharacterのクラス宣言と


クラスGameCharacterのメンバ関数


setShield(Shield a)


statusDataDisplay()


の定義は以下のようになります

👇


class GameCharacter {


public:

string name;

int HP;

int MP;

int DP;//🌞メンバ変数宣言を付け加えました

void setShield(Shield a);//🌞メンバ関数宣言を付け加えました

void statusDataDisplay();


};


void GameCharacter::setShield(Shield a) {

cout << "\n";

cout << "盾を装備しました" << "\n";

cout << "\n";

DP = DP + a.shieldDP;

}



void GameCharacter::statusDataDisplay() {


cout << name << "\n";

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

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

cout << "DP " << DP << "\n";

}


以上で


準備完了です


それでは


ゲームキャラクター


リリアーネに


盾を装備させてDP(防御力)を増加させることに相当する


プログラムを実行してみたいとおもいます


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

👇



#include <iostream>

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

using namespace std;


class Shield {


public:

string shieldname;

int shieldDP;


public:

void shieldDataDisplay();


};



void Shield::shieldDataDisplay() {


cout << shieldname << "\n";

cout << "防御力 " << shieldDP << "\n";


}



class GameCharacter {


public:

string name;

int HP;

int MP;

int DP;//🌞メンバ変数宣言を付け加えました

void setShield(Shield a);//🌞メンバ関数宣言を付け加えました

void statusDataDisplay();


};


void GameCharacter::setShield(Shield a) {

cout << "\n";

cout << "盾を装備しました" << "\n";

cout << "\n";

DP = DP + a.shieldDP;

}



void GameCharacter::statusDataDisplay() {


cout << name << "\n";

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

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

cout << "DP " << DP << "\n";

}




int main() {


Shield WoodShiled;


WoodShiled.shieldname = "木の盾";

WoodShiled.shieldDP = 2;


GameCharacter Lyliane;


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

Lyliane.HP=10;

Lyliane.MP=8;

Lyliane.DP=3;

Lyliane.statusDataDisplay();


Lyliane.setShield(WoodShiled);

//🌞リリアーネのDPが3から5に増加しました

Lyliane.statusDataDisplay();



return 0;

}


ビルド実行結果


リリアーネ

HP 10

MP 8

DP 3


盾を装備しました


リリアーネ

HP 10

MP 8

DP 5


マックス「なんか


リリアーネの


DP(防御力)が


3


から


5


にアップしている!」


てんC「リリアーネさん


木の盾を装備したのですか?」


ソーラー「このプログラムでは


WoodShiledのShield型のオブジェクト宣言


Shield WoodShiled;


を実行することにより



プロトタイプオブジェクトである


             木の盾


のデータを取り扱うクラスShield型のオブジェクト


WoodShiled


を生成しています


WoodShiled.shieldname = "木の盾";

WoodShiled.shieldDP = 2;


を実行することにより


プロトタイプオブジェクトである


             木の盾


名前

防御力を


WoodShiled.shieldname

WoodShiled.shieldDP

WoodShiled.shieldname = "木の盾";

WoodShiled.shieldDP = 2;


と格納しています



次に


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


GameCharacter Lyliane;


を実行することにより


プロトタイプオブジェクトである


       ゲームキャラクター リリアーネ


のデータを取り扱うクラスGameCharacter型のオブジェクト


Lyliane


を生成しています


そして


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

Lyliane.HP=10;

Lyliane.MP=8;

Lyliane.DP=3;

を実行することにより


プロトタイプオブジェクトである


       ゲームキャラクター リリアーネ


名前 リリアーネ

HP 10

MP 8

DP 3

のデータを


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


Lyliane.name

Lyliane.HP

Lyliane.MP

Lyliane.DP

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

Lyliane.HP=10;

Lyliane.MP=8;

Lyliane.DP=3;


と格納しています


このとき


Lyliane.statusDataDisplay();


が実行されると


コマンドプロンプト画面に


リリアーネ

HP 10

MP 8

DP 3


が表示されますね


そして


いよいよ


         Lyliane.setShield(WoodShiled);


の実行ですね


         Lyliane.setShield(WoodShiled);



ゲームキャラクター リリアーネが


木の盾を装備することに相当します


         Lyliane.setShield(WoodShiled);


が実行されると



クラスGameCharacterのメンバ関数setShield(Shield a)の定義


👇

void GameCharacter::setShield(Shield a) {


DP = DP + a.shieldDP;

}

👆


内の


DP = DP + a.shieldDP;


が実行されることになります


そのとき


DP


には


Lyliane.DP


が代入されます



引数である


Shield a



つまり


クラスShield型のオブジェクトaに


クラスShield型のオブジェクト


WoodShiled


が代入されることになります


その状態の


Lyliane.DP= Lyliane.DP + WoodShiled.shieldDP;


が実行されると


WoodShiled.shieldDPは


木の盾の防御力



を表しているので


リリアーネの防御力をあらわす


Lyliane.DPの値は5になります


リリアーネの防御力は


木の盾を装備することにより


3から5に変化したというわけです」




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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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