no message
This commit is contained in:
24
Question13-Inheritance/Ex01.php
Normal file
24
Question13-Inheritance/Ex01.php
Normal file
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* [Ex01 継承とnamespaceを使った問題]
|
||||
*
|
||||
* TODO:
|
||||
* 1. 既に作成されている "common/Animal.php" を使用します。
|
||||
* ※Animal.php は namespace Common を使用して定義されています。
|
||||
* 仕様:
|
||||
* - クラス名:Animal
|
||||
* - プロパティ:private $name
|
||||
* - メソッド:
|
||||
* setName($name) : 名前をセットするセッター
|
||||
* getName() : 名前を取得するゲッター
|
||||
* run() : 「{name}は走る」と出力する
|
||||
* breathe() : 「{name}は呼吸する」と出力する
|
||||
*
|
||||
* 2. 本ファイル内で、下記の処理を実装してください。
|
||||
* a. require_once を使い "common/Animal.php" を読み込む。
|
||||
* b. namespace を利用し、Animal クラスを継承したクラス "Ex01" を定義する。
|
||||
* c. "Ex01" のインスタンスを生成し、setName() メソッドで名前に '人' をセットする。
|
||||
* d. 継承したメソッド run() と breathe() を実行し、結果を出力する。
|
||||
*
|
||||
*/
|
||||
20
Question13-Inheritance/Ex02.php
Normal file
20
Question13-Inheritance/Ex02.php
Normal file
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* [Ex02 オブジェクト指向 - Heroクラスの利用]
|
||||
*
|
||||
*
|
||||
* TODO:
|
||||
* 1. 既に実装済みの "common/Hero.php" および "common/Character.php"(namespace inheritance\Common を使用)
|
||||
* は変更不要です。これらのファイルは、Hero クラスと Character クラスを定義しています。
|
||||
* ※Hero クラスは Character クラスを継承し、コンストラクタ内で初期値(HP:25, POWER:10, ENDURANCE:7)を設定しています。
|
||||
*
|
||||
* 2. 本ファイル内で、require_once を使い "/common/Hero.php" を読み込んでください。
|
||||
*
|
||||
* 3. namespace を利用して、inheritance\common\Common\Hero クラスを使用してください。
|
||||
*
|
||||
* 4. Common\Hero クラスのインスタンスを生成し、setName() メソッドを使って名前に "勇者" を設定してください。
|
||||
*
|
||||
* 5. その後、showParameter() メソッドを呼び出して、キャラクター情報を出力してください。
|
||||
*
|
||||
*/
|
||||
22
Question13-Inheritance/Ex03.php
Normal file
22
Question13-Inheritance/Ex03.php
Normal file
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* [Ex03 オブジェクト指向 - Slimeクラスの利用]
|
||||
*
|
||||
* TODO:
|
||||
* 1. 既に実装済みの "common/Character.php"(namespace inheritance\Common を使用) は変更不要です。
|
||||
* 2. 新しく "common/Slime.php" を作成し、以下の仕様に従って Slime クラスを定義してください。
|
||||
* - クラス名: Slime
|
||||
* - Slime クラスは Common\Character クラスを継承すること。
|
||||
* - コンストラクタ内で、親クラスのコンストラクタを呼び出し、HP, POWER, ENDURANCE に
|
||||
* (50, 5, 2) の初期値を設定してください。
|
||||
*
|
||||
* 3. 本ファイル内で、require_once を使い "common/Slime.php" を読み込んでください。
|
||||
*
|
||||
* 4. namespace を利用して、inheritance\Common\Slime クラスを使用してください。
|
||||
*
|
||||
* 5. Common\Slime クラスのインスタンスを生成し、setName() メソッドを使って名前に "スライム" を設定してください。
|
||||
*
|
||||
* 6. その後、showParameter() メソッドを呼び出して、キャラクター情報を出力してください。
|
||||
*
|
||||
*/
|
||||
27
Question13-Inheritance/Ex04.php
Normal file
27
Question13-Inheritance/Ex04.php
Normal file
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* [Ex04 オブジェクト指向 - 戦闘シミュレーション]
|
||||
*
|
||||
* TODO:
|
||||
* 1. 既に実装済みの "common/Hero.php" と "common/Slime.php"(および "common/Character.php")は変更不要です。
|
||||
* ※これらのファイルは namespace Common を使用して定義されています。
|
||||
* ※Hero クラスは Character クラスを継承し、コンストラクタで初期値 (HP:25, POWER:10, ENDURANCE:7) を設定。
|
||||
* ※Slime クラスは Character クラスを継承し、コンストラクタで初期値 (HP:50, POWER:5, ENDURANCE:2) を設定。
|
||||
*
|
||||
* 2. 本ファイル内で、require_once を使い "common/Hero.php" と "common/Slime.php" を読み込んでください。
|
||||
*
|
||||
* 3. namespace を利用して、inheritance\Common\Hero と inheritance\Common\Slime クラスを使用してください。
|
||||
*
|
||||
* 4. Hero クラスのインスタンスと Slime クラスのインスタンスを生成し、それぞれ setName() メソッドを用いて
|
||||
* "勇者" と "スライム" を設定してください。
|
||||
*
|
||||
* 5. 以下の戦闘シミュレーションを実装してください:
|
||||
* - Hero の攻撃 → Slime の damage() でダメージ判定
|
||||
* - もし Slime が倒れていなければ、Slime の攻撃 → Hero の damage() でダメージ判定
|
||||
* - これを、どちらかのキャラクターの体力が 0 になるまで繰り返す。
|
||||
*
|
||||
* 6. 戦闘終了後、勝者に応じたメッセージを出力してください。
|
||||
* 例:"勇者はスライムとの戦闘に勝利した" または "スライムは勇者との戦闘に勝利した"
|
||||
*
|
||||
*/
|
||||
27
Question13-Inheritance/Ex05.php
Normal file
27
Question13-Inheritance/Ex05.php
Normal file
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* [Ex05 オブジェクト指向 - Itemクラスの作成と利用]
|
||||
*
|
||||
* 難易度:初級
|
||||
*
|
||||
* TODO:
|
||||
* 1. 新しいファイル "common/Item.php" を作成し、以下の仕様に従って Item クラスを定義してください。
|
||||
* - クラス名: Item
|
||||
* - プロパティ(すべて private):
|
||||
* - name : string
|
||||
* - additional_damage : int
|
||||
* - 各プロパティのゲッターとセッターを実装してください。
|
||||
* - コンストラクタ: 引数として name と additional_damage を受け取り、各プロパティに初期値を設定する。
|
||||
*
|
||||
* 2. 本ファイル内で、require_once を使い "common/Item.php" を読み込んでください。
|
||||
*
|
||||
* 3. namespace を利用して、Common\Item クラスを使用してください。
|
||||
*
|
||||
* 4. 以下の仮のデータを利用して、Common\Item クラスのインスタンスを生成してください:
|
||||
* - name: "Sword"
|
||||
* - additional_damage: 15
|
||||
*
|
||||
* 5. 生成した Item インスタンスの各プロパティの値を、アクセサ(ゲッター)を利用して出力してください。
|
||||
*
|
||||
*/
|
||||
33
Question13-Inheritance/Ex06.php
Normal file
33
Question13-Inheritance/Ex06.php
Normal file
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* [Ex06 オブジェクト指向 - SuperHeroクラスの作成と利用]
|
||||
*
|
||||
* 難易度:上級
|
||||
*
|
||||
* TODO:
|
||||
* 1. 既に実装済みの "common/Hero.php"(および "common/Character.php")は変更不要です。
|
||||
* ※Hero クラスは namespace Common を使用して定義され、初期値は (HP:25, POWER:10, ENDURANCE:7) となっています。
|
||||
*
|
||||
* 2. 新しく "common/SuperHero.php" を作成し、以下の仕様に従って SuperHero クラスを定義してください。
|
||||
* - クラス名: SuperHero
|
||||
* - SuperHero クラスは Common\Hero クラスを継承すること。
|
||||
* - プロパティ:
|
||||
* equipment : Common\Item(装備品。型チェックは任意ですが、アクセサは実装すること)
|
||||
* - メソッド:
|
||||
* ・アクセサ:getEquipment() と setEquipment() を実装してください。
|
||||
* ・attack() メソッドのオーバーライド:
|
||||
* 基本の攻撃力(Hero::attack() の戻り値)に加え、もし equipment が設定されている場合は
|
||||
* equipment の追加ダメージ(getAdditionalDamage() の値)を加算した値を返すようにしてください.
|
||||
*
|
||||
* 3. 本ファイル内で、require_once を使い "common/SuperHero.php" を読み込んでください。
|
||||
*
|
||||
* 4. namespace を利用して、Common\SuperHero クラスおよび Common\Item クラスを使用してください。
|
||||
*
|
||||
* 5. 以下の仮のデータを利用して、SuperHero クラスのインスタンスを生成してください:
|
||||
* - 名前: "スーパー勇者"
|
||||
* - 装備品: Common\Item クラスのインスタンス(例:"Excalibur", additional_damage: 20)
|
||||
*
|
||||
* 6. 生成した SuperHero インスタンスの attack() メソッドを実行し、攻撃力(基本攻撃+追加ダメージ)の値を出力してください。
|
||||
*
|
||||
*/
|
||||
33
Question13-Inheritance/Ex07.php
Normal file
33
Question13-Inheritance/Ex07.php
Normal file
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* [Ex07 オブジェクト指向 - 装備付きSuperHeroとSlimeの戦闘シミュレーション]
|
||||
*
|
||||
*
|
||||
* TODO:
|
||||
* 1. 既に実装済みの "common/Item.php", "common/SuperHero.php"(または "common/super_hero.php")、"common/Slime.php"(namespace Common 使用)
|
||||
* は変更不要です。
|
||||
* ※SuperHero クラスは Hero クラスを継承し、attack() メソッドで装備品の追加ダメージを加算する実装になっています。
|
||||
*
|
||||
* 2. 本ファイル内で、require_once を使い以下のファイルを読み込んでください。
|
||||
* - "common/SuperHero.php" (または "common/super_hero.php")
|
||||
* - "common/Item.php"
|
||||
* - "common/Slime.php"
|
||||
*
|
||||
* 3. namespace を利用して、Common\SuperHero, Common\Item, Common\Slime クラスを使用してください。
|
||||
*
|
||||
* 4. 以下の手順で処理を実装してください:
|
||||
* a. Common\SuperHero のインスタンスを生成し、setName() メソッドで "勇者(装備あり)" を設定する。
|
||||
* b. Common\Slime のインスタンスを生成し、setName() メソッドで "スライム" を設定する。
|
||||
* c. Common\Item のインスタンスを生成し、コンストラクタの引数として ("こんぼう", 4) を指定する。
|
||||
* d. 生成した Item インスタンスを SuperHero の装備品として設定する(setEquipment() を利用)。
|
||||
*
|
||||
* 5. 次に、以下の戦闘シミュレーションを実装してください:
|
||||
* - SuperHero の攻撃 → Slime の damage() によるダメージ判定
|
||||
* - もし Slime が倒れていなければ、Slime の攻撃 → SuperHero の damage() によるダメージ判定
|
||||
* - 上記の攻撃とダメージ判定を、どちらかの体力が0になるまで繰り返す。
|
||||
*
|
||||
* 6. 戦闘終了後、勝者に応じたメッセージを出力してください。
|
||||
* 例:"勇者(装備あり)はスライムとの戦闘に勝利した" または "スライムは勇者(装備あり)との戦闘に勝利した"
|
||||
*
|
||||
*/
|
||||
45
Question13-Inheritance/common/Animal.php
Normal file
45
Question13-Inheritance/common/Animal.php
Normal file
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
namespace Common;
|
||||
|
||||
class Animal
|
||||
{
|
||||
/** 名前 */
|
||||
private $name;
|
||||
|
||||
/**
|
||||
* 名前をセットするセッター
|
||||
*
|
||||
* @param string $name
|
||||
*/
|
||||
public function setName($name)
|
||||
{
|
||||
$this->name = $name;
|
||||
}
|
||||
|
||||
/**
|
||||
* 名前を取得するゲッター
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getName()
|
||||
{
|
||||
return $this->name;
|
||||
}
|
||||
|
||||
/**
|
||||
* 「{name}は走る」と出力する
|
||||
*/
|
||||
public function run()
|
||||
{
|
||||
echo $this->name . 'は走る';
|
||||
}
|
||||
|
||||
/**
|
||||
* 「{name}は呼吸する」と出力する
|
||||
*/
|
||||
public function breathe()
|
||||
{
|
||||
echo $this->name . 'は呼吸する';
|
||||
}
|
||||
}
|
||||
97
Question13-Inheritance/common/Character.php
Normal file
97
Question13-Inheritance/common/Character.php
Normal file
@@ -0,0 +1,97 @@
|
||||
<?php
|
||||
|
||||
namespace inheritance\Common;
|
||||
|
||||
class Character
|
||||
{
|
||||
|
||||
/** 名前 */
|
||||
private $name = 'キャラクター';
|
||||
|
||||
/** 体力 */
|
||||
private $hp;
|
||||
|
||||
/** 力 */
|
||||
private $power;
|
||||
|
||||
/** 防御力 */
|
||||
private $endurance;
|
||||
|
||||
/**
|
||||
* 体力、攻撃力、防御力の初期値を設定しつつ、Characterインスタンスを生成します
|
||||
*
|
||||
* @param int $hp
|
||||
* @param int $power
|
||||
* @param int $endurance
|
||||
*/
|
||||
public function __construct($hp, $power, $endurance)
|
||||
{
|
||||
$this->hp = $hp;
|
||||
$this->power = $power;
|
||||
$this->endurance = $endurance;
|
||||
}
|
||||
|
||||
/**
|
||||
* 名前を設定します
|
||||
*
|
||||
* @param string $name
|
||||
*/
|
||||
public function setName($name)
|
||||
{
|
||||
$this->name = $name;
|
||||
}
|
||||
|
||||
/**
|
||||
* 名前を取得します
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getName()
|
||||
{
|
||||
return $this->name;
|
||||
}
|
||||
|
||||
/**
|
||||
* 攻撃を行います
|
||||
*
|
||||
* @return int 攻撃力を返す
|
||||
*/
|
||||
public function attack()
|
||||
{
|
||||
return $this->power;
|
||||
}
|
||||
|
||||
/**
|
||||
* ダメージ判定を行います
|
||||
*
|
||||
* @param int $attack
|
||||
* @return bool 体力が0になったら true、まだ残っていれば false
|
||||
*/
|
||||
public function damage($attack)
|
||||
{
|
||||
$calc = $attack - $this->endurance;
|
||||
if ($calc <= 0) {
|
||||
$calc = 1;
|
||||
}
|
||||
$this->hp -= $calc;
|
||||
if ($this->hp <= 0) {
|
||||
$this->hp = 0;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* キャラクター情報を表示します
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function showParameter()
|
||||
{
|
||||
$str = nl2br('名 前:' . $this->name
|
||||
. "\r\n" . '体 力:' . $this->hp
|
||||
. "\r\n" . ' 力 :' . $this->power
|
||||
. "\r\n" . '耐 久:' . $this->endurance);
|
||||
return $str;
|
||||
}
|
||||
}
|
||||
18
Question13-Inheritance/common/Hero.php
Normal file
18
Question13-Inheritance/common/Hero.php
Normal file
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
namespace inheritance\Common;
|
||||
|
||||
require_once __DIR__ . '/Character.php';
|
||||
|
||||
class Hero extends Character
|
||||
{
|
||||
|
||||
/**
|
||||
* Hero クラスのコンストラクタ
|
||||
* Character のコンストラクタを利用して初期値(HP:25, POWER:10, ENDURANCE:7)を設定
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct(25, 10, 7);
|
||||
}
|
||||
}
|
||||
110
Question13-Inheritance/index.html
Normal file
110
Question13-Inheritance/index.html
Normal file
@@ -0,0 +1,110 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>PTra13スタートページ</title>
|
||||
|
||||
<!-- Bootstrap Core CSS -->
|
||||
<link href="../common/css/bootstrap.min.css" rel="stylesheet">
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="page-header">
|
||||
<h1>
|
||||
独習PHP第10章練習問題 <small>継承</small>
|
||||
</h1>
|
||||
</div>
|
||||
|
||||
<div class="panel-group" id="accordion">
|
||||
<!-- Ex01 -->
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h4 class="panel-title">
|
||||
<a href="Ex01.php" target="_blank">
|
||||
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>
|
||||
Ex01: クラスの継承とnamespace利用 (初級)
|
||||
</a>
|
||||
</h4>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Ex02 -->
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h4 class="panel-title">
|
||||
<a href="Ex02.php" target="_blank">
|
||||
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>
|
||||
Ex02: Heroクラス 継承 (初級)
|
||||
</a>
|
||||
</h4>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Ex03:Slimeクラスの作成と利用 -->
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h4 class="panel-title">
|
||||
<a href="Ex03.php" target="_blank">
|
||||
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>
|
||||
Ex03: Slimeクラス 継承(初級)
|
||||
</a>
|
||||
</h4>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Ex04 -->
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h4 class="panel-title">
|
||||
<a href="Ex04.php" target="_blank">
|
||||
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>
|
||||
Ex04: HeroとSlimeの戦闘シミュレーション(中級)
|
||||
</a>
|
||||
</h4>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Ex05 -->
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h4 class="panel-title">
|
||||
<a href="Ex05.php" target="_blank">
|
||||
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>
|
||||
Ex05: Itemクラスの作成と利用
|
||||
</a>
|
||||
<small>初級</small>
|
||||
</h4>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Ex06 -->
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h4 class="panel-title">
|
||||
<a href="Ex06.php" target="_blank">
|
||||
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>
|
||||
Ex06: SuperHeroクラスの作成と利用 (中級)
|
||||
</a>
|
||||
</h4>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Ex07 -->
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h4 class="panel-title">
|
||||
<a href="Ex07.php" target="_blank">
|
||||
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>
|
||||
Ex07: 装備付きSuperHero vs Slime 戦闘シミュレーション
|
||||
</a>
|
||||
</h4>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- jQuery -->
|
||||
<script src="../common/js/jquery-3.2.1.min.js"></script>
|
||||
|
||||
<!-- Bootstrap Core JavaScript -->
|
||||
<script src="../common/js/bootstrap.min"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
Reference in New Issue
Block a user