🌻天国にいけるC++言語入門🌻 進化し続けるオブジェクト指向プログラミング ver3.2307
クラスGameCharacterとクラスShiledを用いてゲームキャラクターに盾を装備させることに相当するプログラムを実行してみましょう
クラス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は
木の盾の防御力
2
を表しているので
リリアーネの防御力をあらわす
Lyliane.DPの値は5になります
リリアーネの防御力は
木の盾を装備することにより
3から5に変化したというわけです」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます