どの様な時にコンストラクタは用いられるのでしょうか😊 ゲームキャラクターのデータをコンストラクタを用いて初期化してみよう
ゲームキャラクターのデータをコンストラクタを用いて初期化してみよう
ソーラー「いままでコンストラクタの仕組みを学んできましたが
どのようなときにコンストラクタは用いられるのでしょうか?
今日はコンストラクタがどのような時に用いられるかを見ていきましょう
さきほどは
ゲームキャラクターのデータを
クラスGamecharacterを用いて取り扱うことができました」
そのプログラムはこちらです
👇
#include <iostream>
#include <string>//文字列を取り扱うためにヘッダファイル <string>をインクルードしています
using namespace std;
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";
}
int main() {
GameCharacter Lyliane;
//🌞LylianeのGameCharacter型のオブジェクト宣言を実行しています🌞
Lyliane.name = "リリアーネ";
Lyliane.HP = 10;
Lyliane.MP = 50;
Lyliane.statusDataDisplay();
return 0;
}
ビルド実行結果
リリアーネ
HP 10
MP 50
ソーラー「このプログラムで取り扱われている
💖プロトタイプオブジェクト= 対象としてみるモノ💖
は
リリアーネという名前のゲームキャラクターなんです
リリアーネという名前のゲームキャラクターは
GameCharacterのカテゴリーに属しているので
💖プロトタイプオブジェクト= 対象としてみるモノ💖のデータ
すなわち
💖リリアーネという名前のゲームキャラクター💖のデータ
を
GameCharacterのカテゴリーに属しているゲームキャラクターをとりあつかう
クラスGameCharacter型のオブジェクトLylianeを用いて取り扱っています
このプログラムでは
LylianeのクラスGameCharacter型のオブジェクト宣言
GameCharacter Lyliane;
を実行し
オブジェクトLylianeを生成しています
そして
オブジェクトLylianeのメンバ変数
Lyliane.name
Lyliane.HP
Lyliane.MP
に
💖プロトタイプオブジェクト= 対象としてみるモノ💖
のデータ
つまり
リリアーネという名前のゲームキャラクターの
リリアーネという名前
HP 10
MP 50
の
データ
を格納しています
そして
オブジェクトLylianeのメンバ関数
Lyliane.statusDataDisplay()
を用いて
それらのデータを
コマンドプロンプト画面に表示しています
このプログラムでは
Lyliane.name = "リリアーネ";
Lyliane.HP = 10;
Lyliane.MP = 50;
の実行により
オブジェクトLylianeのメンバ変数
Lyliane.name
Lyliane.HP
Lyliane.MP
に
"リリアーネ"
10
50
が代入されています」
ソーラー「ところで
今は
リリアーネという名前のゲームキャラクターの
名前
HP
MP
の
データを
取り扱うために
LylianeのGameCharacter 型のオブジェクト宣言
GameCharacter Lyliane;
を実行しましたが
エルフィンという名前のゲームキャラクターの
名前
HP
MP
の
データを
取り扱うために
ElfineのGameCharacter型のオブジェクト宣言
GameCharacter Elfine;
を実行することもあれば
ユーリという名前のゲームキャラクターの
名前
HP
MP
の
データを
取り扱うために
YuuriのGameCharacter型のオブジェクト宣言
GameCharacter Yuuri;
を実行することもあるわけです」
マックス「そりゃあ
ゲームだからいろいろなキャラクターが出てくるのは当然か」
ソーラー「さてさて
みなさんが
ゲームの制作者なら
いろいろなゲームキャラクターを登場させて
より
面白いゲームにしていきたいとおもわれることでしょう
さらにさらに
ゲームキャラクターが登場してくることになります
ヒューマンタイプのアルテイシア
エルフタイプのディアーナ
動物タイプのたまちゃん
アンドロイドタイプのアイザック
・
・
・
など
など
ひょっとしたら
総勢
10000以上のゲームキャラクターが登場する
ゲームになるかもしれません
ゲーム制作初期の段階では、これらのゲームキャラクターの
HP
MP
はどのくらいの値に設定したらよいか
まだまだ
決められないということもありえますね
ゲームバランスを考えながら
さまざまなゲームキャラクターの
HP
MP
を
設定、変更する、ということも
十分あり得ます
しかし
キャラクターの
HP
MP
を設定しておかなければ
そもそも
ゲームが進行できず
ゲームバランスを考えながら
ゲームキャラクターの
HP
MP
を
設定、変更する、ということも
もちろんできませんね
そこで
ゲームキャラクターの
HP
MP
を
適当に設定して
ゲームバランスをみていくことになるわけですが
10000以上のゲームキャラクターがいる場合
一人ひとりのゲームキャラクターの
HP
MP
を
適当に設定していくのは
手間がかかりますね
そこで
コンストラクタを用いて
オブジェクトが作製されると同時に
自動的に
オブジェクトのメンバ変数である
オブジェクト.HP
オブジェクト.MP
に数値データ
1000
1000
が代入されるようにしてみます
具体的には
オブジェクトLylianeが作製されると同時に
自動的に
オブジェクトLylianeのメンバ変数である
Lyliane.HP
Lyliane.MP
に数値データ
1000
1000
が代入されるということになります
そのプログラムはこちらです
👇
#include <iostream>
#include <string>
using namespace std;
class GameCharacter{
public:
string name;
int HP;
int MP;
void statusDataDisplay();
GameCharacter();//🌞👈ここに注目 コンストラクタを設定しました
};
void GameCharacter::statusDataDisplay() {
cout << name << "\n";
cout << "HP " << HP << "\n";
cout << "MP " << MP << "\n";
}
GameCharacter::GameCharacter() {
HP = 1000;
MP = 1000;
}
int main() {
GameCharacter Lyliane;
Lyliane.name = "リリアーネ";
Lyliane.statusDataDisplay();
return 0;
}
ビルド実行結果
リリアーネ
HP 1000
MP 1000
ソーラー「クラスGameCharacter型のオブジェクト宣言
GameCharacter Lyliane;
により
クラスGameCharacter型のオブジェクトLylianeが生成されると同時に
自動的に実行される
クラスGameCharacter型のオブジェクトLylianeのコンストラクタにより
リリアーネの
HP
MP
が
1000
1000
に設定されましたね
どの様な GameCharacter型の
オブジェクトのメンバ変数HP
オブジェクトのメンバ変数MP
も
1000
1000
に設定される
つまり
どのゲームキャラクターの
HP
MP
も
1000
1000
に設定されるというわけです
これだけ
HP
MP
があると
いろいろなことをゲーム内で試しても大丈夫そうですね」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます