name = $this->getCharacterName(); $this->hp = $hp; $this->power = $power; $this->endurance = $endurance; } /** * 名前を取得します * @return string 名前 */ public function getName() { return $this->name; } /** * 力を取得します * @return int 力の値 */ public function getPower() { return $this->power; } /** * 耐久を取得します * @return int 耐久の値 */ public function getEndurance() { return $this->endurance; } /** * キャラクター情報を表示します * @return string */ public function showParameter() { $str = nl2br('名 前' . $this->name . "\r\n" . '体 力' . $this->hp . "\r\n" . ' 力 ' . $this->power . "\r\n" . '耐 久' . $this->endurance); return $str; } /** * 戦闘を行います。負の数が返ってきた場合、逃げるを選択したことになります * @param int $defence 攻撃を受ける側の耐久 * @return int 最終的に計算されたダメージ量 */ public function battle($defence) { $random = rand(0, 100); $rate = $this->getEscapeRate(); // 設定された確率で逃げる if ($random < $rate) { return -1; } else { // ダメージの算出(0ダメージにはならないようにする) $dam = $this->damage($defence); if ($dam <= 0) { $dam = 1; } return $dam; } } /** * 受けたダメージ分、HPを減らす。 * HPが0以下になった場合は、倒されたと判断し、falseを返す * @param int $damage 受けるダメージ * @return bool true -> 生き残っている場合、false -> 倒された場合 */ public function dealsDamage($damage) { $this->hp -= $damage; if ($this->hp <= 0) { return false; } return true; } /** * このモンスターの名前を取得します * @return string 設定する名前 */ protected abstract function getCharacterName(); /** * このモンスターが逃げる確率を設定します。 * 例えば、10%で逃げる場合は、10を設定します * @return int 逃げる確率 */ protected abstract function getEscapeRate(); /** * モンスター毎に攻撃判定を行います。 * 例えば、通常攻撃・スキル・魔法などモンスターごとに行動割合を決定し、最終的に計算されたダメージ量を判定します * @param int $defence 攻撃を受ける側の耐久 * @return int 最終的に計算されたダメージ量 */ protected abstract function damage($defence); }