引数にクラス型のオブジェクトを設定できる仕組みを用いてゲームキャラクターが武器や防具を装備することを表現してみましょう

ゲームキャラクターが装備する武器や防具を取り扱うクラスを作製してみよ~う

ソーラー「次に


ゲームキャラクターが装備する


武器や防具のデータを取り扱う


クラスを


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



ゲームキャラクターに持たせる木の盾を


プロトタイプオブジェクト=対象としてみるモノ


とします


盾の


名前

防御力



データを


取り扱うクラスShieldのクラス宣言と


盾のデータを表示するメンバ関数shieldDataDisplay()の定義を


以下のように設定してみます

👇

class Shield{


public:

string shieldname;

int shieldDP;

public:

void shieldDataDisplay();


};



void Shield::shieldDataDisplay() {


cout << shieldname << "\n";

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


}


このクラスShieldが用いられた


プログラムを実行してみます



#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";


}



int main() {


Shield WoodShiled;


WoodShiled.shieldname = "木の盾";

WoodShiled.shieldDP = 2;

WoodShiled.shieldDataDisplay();


return 0;

}



ビルド実行結果


木の盾

防御力 2


マックス「なんかRPGゲームっぽくなってきた


木の盾

防御力 2


か・・・


旅立ちのころの装備品ってわけか」


マックス「


じゃあ


   プロトタイプオブジェクト=対象としてみるモノ


            を


           妖精の盾


とするなら


妖精の盾



データをコマンドプロンプト画面に表示してみるなら


プログラムはこんな感じになるんだろう」

👇


#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";


}



int main() {


Shield FairyShiled;


//🌞FairyShiledのオブジェクト宣言を行っています 可愛い名前ですね


FairyShiled.shieldname = "妖精の盾";

FairyShiled.shieldDP = 15;

FairyShiled.shieldDataDisplay();


return 0;

}



ビルド実行結果


妖精の盾

防御力 15



マックス「おお 麗しい


妖精の盾

防御力 15



コマンドプロンプト画面に表示されている・・・


じゃあ


定番っぽい盾😊を登場させてみるとしてみるか




プロトタイプオブジェクトを光の盾に設定して


光の盾



データをコマンドプロンプト画面に表示してみるなら


プログラムはこんな感じになるんだろう」

👇


#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";


}



int main() {


Shield LightShiled;


//🌞LightShiledのオブジェクト宣言を行っています Lightは光という意味です


LightShiled.shieldname = "光の盾";

LightShiled.shieldDP = 100;

LightShiled.shieldDataDisplay();


return 0;

}


ビルド実行結果


光の盾

防御力 15



ソーラー「そうなんです


この


クラスShiledを用いれば


木の盾

皮の盾

鉄の盾

妖精の盾

ドラゴンの盾

光の盾

などの様々な盾の


名前と

防御力を


とりあつかうオブジェクトを


生成することができるんです


つまり


クラスShiledは


ゲームキャラクターが持つ盾のデータを取り扱う


オブジェクトの


設計図


というわけです


ゲームキャラクターが持つ盾=対象としてみるモノ


つまり


        プロトタイプオブジェクト


の設計図でなく


ゲームキャラクターが持つ盾=対象としてみるモノ


つまり


     プロトタイプオブジェクトのデータを取り扱う


          💖オブジェクト💖の


   設計図


というわけです


そもそも


        プロトタイプオブジェクト=対象としてみるモノ


は設計するものではなく


対象としてみるモノです


さりげないポイントかな😊」


てんC「ということは


クラスShiledは


ゲームキャラクターが持つ盾の


名前

防御力

データを取り扱う


オブジェクトの設計図


なら


クラスShiledに変更を加えて


クラスShiledを


ゲームキャラクターが持つ盾の


名前

防御力

重さ


データを取り扱う


オブジェクトの設計図


にすることもできるというわけですね」


ソーラー「そうなんです


盾の重さが


キャラクターの素早さ(AGIRITY)


をあらわす


AP


に影響を与えるゲームもたくさんでているけど


そのときに使えそうなクラスになるというわけだね」

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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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