なぜ必要なのか?
そう思う人も多いでしょう。
そこで具体例として、RPGでモンスターとの戦闘を作る場合について考えてみましょう。
まず、モンスターにどのようなステータスが必要か決めなければならない。
例えば、「名前、HP、攻撃力、防御力、素早さ」が要るとする。
それをプログラムで書くとこんな感じ。
String name = "スライム"; //名前
int hp = 5; //HP
int attack = 12; //攻撃
int defense = 8; //防御
int agility = 10; //素早さ
モンスターが複数現れた場合はこれをたくさん書かなければならない。
String name2 = "ドラゴン"; //名前
int hp2 = 150; //HP
int attack2 = 220; //攻撃
int defense2 = 180; //防御
int agility2 = 45; //素早さ
はっきり言って超メンドクサイ!!
ならば、これらのステータスをモンスタークラスとしてまとめてしまおう!
各ステータスをインスタンス変数にして、そこに値を設定するコンストラクタを作成する。
class Monster {
String name; //名前
int hp; //HP
int attack; //攻撃
int defense; //防御
int agility; //素早さ
//コンストラクタ、引数は(名前,HP,攻撃力,防御力,素早さ)
Monster(String name, int hp, attack, defense, agility) {
this.name = name; //名前を設定
this.hp = hp; //HPを設定
this.attack = attack; //攻撃を設定
this.defense = defense; //防御を設定
this.agility = agility; //素早さを設定
}
}
このクラスを作って先ほどのモンスター2体を表現すると
Monster slime = new Monster("スライム", 5, 12, 8, 10);
Monster dragon = new Monster("ドラゴン", 150, 220, 180, 45);
モンスター2体を2つの変数で表現できてシンプルでわかり易い!
このようにクラスを使った方が便利ですねえ。
さらにMonsterクラスに攻撃された場合のメソッドをつくると…
int attacked(int hit) {
//被弾値-防御=ダメージ
int damage = hit - defense;
//ダメージを受けた場合
if (damege > 0) {
//HPからダメージを引く
hp -= damage - defense;
} else {
damege = 0;
}
return damege;
}
そうすると、モンスターを攻撃した場合の処理は…
//スライムを生成
Monster slime = new Monster("スライム", 5, 12, 8, 10);
//スライムに攻撃力40で攻撃
int damege = slime.attacked(40);
//32のダメージを与えた
System.out.printf("%dのダメージを与えた", damege);
と直感的にわかりやすくなる。
このようにクラスとはモンスターを作るのに決めなければならない項目の集まりである。
モンスターには攻撃力や防御力などのステータスが必要!
だから、フィールドにそれらを持たせる。
モンスターを攻撃したときにHPを減らしたい!
だから、メソッドとしてそういう機能を作る。
そうすることで、モンスターを生成し攻撃してダメージを与えるという処理が直感的で簡潔にコーディングすることができるわけです。
クラスって便利ですよね?
0 件のコメント:
コメントを投稿