5-2.クラス-インターフェース
はじめに
本大問で作成するプログラム(演習課題も含む)を保存するためのパッケージを作成する。
- パッケージ名
web._05._02
本題
Xincor Quest は急ピッチで開発が進んでおり、様々なアップデートを控えている。
直近の要件としては、モンスターの作成と2次職の作成である。
まずは、モンスターの作成から取り掛かることになった。
5-2-1
下級モンスターのインターフェース作成&実装クラス作成
モンスターは大きく下級モンスター・中級モンスター・上級モンスターと3つのランクに分別される。
次のアップデートでは、下級モンスター・中級モンスターを実装する予定である。
まずは下級モンスタークラスの作成から実施することになった。
今後、多くの下級モンスタークラスを作る必要があり、その仕事を複数の人に依頼する予定である。
それに先駆け、下級モンスタークラスに実装するメソッドの仕様(メソッド名、引数、戻り値のデータ型)を統一するため、下級モンスタークラスのインターフェースを作成しよう!
また、インターフェースの作成後、インターフェースを実装(インプリメンツ)したクラスも作成してみよう。
【インターフェースの要件】
<インターフェース名>
ILowMonstar
<作成するフィールド>
なし
<作成するメソッド>
下級モンスタークラスに実装するメソッドは以下2つ。
攻撃メソッド
メインキャラクターに攻撃するメソッド。
◇メソッド名
attack
◇引数
戦闘対象のキャラクターインスタンスを保管するMainCharacter型変数
◇戻り値
メインキャラクターに与えたダメージ(整数型)
死亡判定メソッド
モンスターが死亡したかを判定するメソッド。
◇メソッド名
isDead
◇引数
なし
◇戻り値
死亡したかを判定する真偽型変数
hpフィールドが0以下であれば死亡(true)、そうでなければ生存(false)とする。
下級モンスタークラスのインターフェース
package web._05._02;
/**
* 5-2-1
* 下級モンスターのインターフェイスです。
*
* @author akira_ishii
*
*/
public interface ILowMonster {
/**
* 攻撃をします。
* ダメージ(残りヒットポイントの2割)をメインキャラクターに与えます。
*
* @param mainCharacter 戦闘対象のメインキャラクター
* @return メインキャラクターに与えたダメージ
*/
int attack(MainCharacter mainCharacter);
/**
* 死亡しているか判定します。
*
* @return true:死亡 false:生存
*/
boolean isDead();
}
【インターフェースを実装したクラスの要件】
下級モンスター「スライヌ」クラスを作成してみよう。
<クラス名>
Sline
<インプリメンツするインターフフェイス>
ILowMonster
<作成するフィールド>
- 「ヒットポイントを保管するためのフィールド」を用意する。
変数名: hp
アクセス修飾子:自クラスからのみ参照可能
データ型:整数型
初期値:30
<作成するメソッド>
1. 攻撃メソッド
インターフェースの攻撃メソッドを実装する。
◇処理内容
1. 敵に与えるダメージとして、自身のhpフィールドの0.2倍を計算する。
※ダメージは整数値とし、小数は切り捨てること。
2. 引数のMainCharacterインスタンスのHPを①で計算したダメージ分減らして上書きする。
例)
自身の残りHPが10、MainCharacterインスタンスのHPが10とした場合、
Monsterインスタンスへのダメージが10×0.2で2となる。
従って、MainCharacterインスタンスのHPを2(10-2)で上書きする。
2. 死亡判定メソッド
インターフェースの死亡判定メソッドを実装する。
◇処理内容
①自身のhpフィールドが0以下の場合は true (死亡)を戻し、0より大きい場合は false (生存)を戻す。
3. HPのsetter・getter
他クラスからHPを参照するためのメソッド。
HPのsetメソッド, getメソッドを作成する。
インターフェースをインプリメンツして作成した下級モンスター「スライヌ」クラス
package web._05._02;
/**
* 5-2-1
* 下級モンスター「スライヌ」のクラスです。
*
* @author akira_ishii
*
*/
public class Sline implements ILowMonster {
/** ヒットポイント(初期値:30) */
private int hp = 30;
/**
* 攻撃をします。
* ダメージ(残りヒットポイントの2割)をメインキャラクターに与えます。
*
* @param mainCharacter 戦闘対象のメインキャラクター
* @return メインキャラクターに与えたダメージ
*/
@Override
public int attack(MainCharacter mainCharacter) {
int damage = (int)(this.hp * 0.2);
mainCharacter.setHp(mainCharacter.getHp() - damage);
return damage;
}
/**
* 死亡しているか判定します。
*
* @return true:死亡 false:生存
*/
@Override
public boolean isDead() {
return this.hp <= 0;
}
/**
* HPを返します。
*
* @return hp ヒットポイント
*/
public int getHp() {
return this.hp;
}
/**
* HPを設定します。
*
* @param hp ヒットポイント
*/
public void setHp(int hp) {
this.hp = hp;
}
}
5-2-2
中級モンスターのインターフェース作成
続いて、中級モンスタークラスのインターフェースを作成しよう!
提出物は、作成したインターフェースとします。
【インターフェースの要件】
<インターフェース名>
任意
<作成するフィールド>
なし
<作成するメソッド>
中級モンスタークラスのインターフェースに定義するメソッドは以下5つ。
1. 物理攻撃メソッド
メインキャラクターに物理攻撃するメソッド。
◇メソッド名
任意とする。
◇引数
戦闘対象のメインキャラクターインスタンスを保管するMainCharacter型変数
◇戻り値
メインキャラクターに与えたダメージ(整数型)
2. 魔法攻撃メソッド
メインキャラクターに魔法攻撃するメソッド。
◇メソッド名
任意とする。
◇引数
戦闘対象のメインキャラクターインスタンスを保管するMainCharacter型変数
◇戻り値
メインキャラクターに与えたダメージ(整数型)
3. スキル攻撃メソッド
メインキャラクターにスキル攻撃をするメソッド。
スキル攻撃には「通常スキル攻撃」と「特殊スキル攻撃」の2種類があり、
それぞれメインキャラクターに与えるダメージが異なる。
◇メソッド名
任意とする。
◇引数
①戦闘対象のメインキャラクターインスタンスを保管するMainCharacter型変数
②特殊スキル攻撃か通常スキル攻撃を判定する真偽型変数
※true:特殊スキル攻撃 false:通常スキル攻撃、と判定する。
◇戻り値
メインキャラクターに与えたダメージ(整数型)
4. 自己回復メソッド
自身のHPを、メインキャラクターから受けたダメージの3割回復するメソッド。
100ダメージうけたら、3割の30回復する。
◇メソッド名
任意とする。
◇引数
受けたダメージを保管する整数型変数
◇戻り値
なし
5. 死亡判定メソッド
モンスターが死亡したかを判定するメソッド。
◇メソッド名
isDead
◇引数
なし
◇戻り値
死亡したかを判定する真偽型変数
hpフィールドが0以下であれば死亡(true)、そうでなければ生存(false)とする。
Copyright © Xincor miXell Co., Ltd. All rights reserved