no message

This commit is contained in:
a-kizaki
2026-10-06 12:10:09 +09:00
commit 9c2090ffa2
156 changed files with 14850 additions and 0 deletions

View 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() を実行し、結果を出力する。
*
*/

View 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() メソッドを呼び出して、キャラクター情報を出力してください。
*
*/

View 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() メソッドを呼び出して、キャラクター情報を出力してください。
*
*/

View 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. 戦闘終了後、勝者に応じたメッセージを出力してください。
* 例:"勇者はスライムとの戦闘に勝利した" または "スライムは勇者との戦闘に勝利した"
*
*/

View 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 インスタンスの各プロパティの値を、アクセサ(ゲッター)を利用して出力してください。
*
*/

View 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() メソッドを実行し、攻撃力(基本攻撃+追加ダメージ)の値を出力してください。
*
*/

View 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. 戦闘終了後、勝者に応じたメッセージを出力してください。
* 例:"勇者(装備あり)はスライムとの戦闘に勝利した" または "スライムは勇者(装備あり)との戦闘に勝利した"
*
*/

View 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 . 'は呼吸する';
}
}

View 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;
}
}

View 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);
}
}

View 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>