Files
php-question/Question14-AdvancedInheritance/common/Character.php
2026-10-06 12:10:09 +09:00

126 lines
2.9 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
abstract class Character
{
/** 名前 */
private $name = 'モンスター';
/** 体力 */
private $hp;
/** 力 */
private $power;
/** 防御力 */
private $endurance;
/**
* 体力、攻撃力、防御力の初期値を設定しつつ、Characterインスタンスを生成します
* @param hp
* @param attack
* @param defence
*/
function __construct($hp, $power, $endurance)
{
$this->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);
}