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,62 @@
<?php
namespace Common;
require_once __DIR__ . '/PaymentInterface.php';
/**
* 銀行振込決済を行うクラス
*/
class BankTransferPayment implements PaymentInterface
{
/** @var string 銀行名 */
private $bankName;
/** @var string 口座番号 */
private $accountNumber;
/** @var string 口座名義 */
private $accountHolder;
/**
* コンストラクタ
*
* @param string $bankName 銀行名
* @param string $accountNumber 口座番号
* @param string $accountHolder 口座名義
*/
public function __construct($bankName, $accountNumber, $accountHolder)
{
// TODO: 銀行名、口座番号、口座名義をプロパティに設定してください
}
/**
* 銀行振込で決済を実行する
*
* @param int $amount 決済金額(円)
* @return bool 決済が成功したかどうか
*/
public function pay($amount)
{
// TODO: 以下の情報を表示して、最後に true を返してください
// - "🏦 銀行振込処理"
// - "振込先銀行: " に続けて銀行名
// - "口座番号: " に続けて口座番号
// - "口座名義: " に続けて口座名義
// - "振込金額: ¥" に続けて金額をカンマ区切りで表示
// - "振込手数料: ¥330"
// - "合計金額: ¥" に続けて (金額 + 330) をカンマ区切りで表示
// - "振込が完了しました。"
// ※各行の最後に <br> を付けること
}
/**
* 決済方法の名前を取得する
*
* @return string 決済方法名
*/
public function getPaymentMethodName()
{
// TODO: "銀行振込" という文字列を返してください
}
}

View File

@@ -0,0 +1,125 @@
<?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);
}

View File

@@ -0,0 +1,19 @@
<?php
interface Course
{
const PREFIX = '【Eラーニング】';
/**
* コースの名称を取得します。
* 例)Java、DB基礎、IT基礎 など
* @return string 単元の名称
*/
function getCourseName();
/**
* コースの単元を取得します
* 例)プログラミングの書き方、式と演算子 など
* @return string
*/
function getCourseUnit();
}

View File

@@ -0,0 +1,71 @@
<?php
namespace Common;
require_once __DIR__ . '/PaymentInterface.php';
/**
* クレジットカード決済を行うクラス
*/
class CreditCardPayment implements PaymentInterface
{
/** @var string カード番号 */
private $cardNumber;
/** @var string カード名義人 */
private $cardHolder;
/**
* コンストラクタ
*
* @param string $cardNumber カード番号
* @param string $cardHolder カード名義人
*/
public function __construct($cardNumber, $cardHolder)
{
// TODO: カード番号とカード名義人をプロパティに設定してください
}
/**
* クレジットカードで決済を実行する
*
* @param int $amount 決済金額(円)
* @return bool 決済が成功したかどうか
*/
public function pay($amount)
{
// TODO: 以下の情報を表示して、最後に true を返してください
// - "💳 クレジットカード決済処理"
// - "カード番号: " に続けてマスキングされたカード番号(maskCardNumber メソッドを使用)
// - "名義人: " に続けてカード名義人
// - "決済金額: ¥" に続けて金額をカンマ区切りで表示(number_format 関数を使用)
// - "決済が完了しました。"
// ※各行の最後に <br> を付けること
}
/**
* 決済方法の名前を取得する
*
* @return string 決済方法名
*/
public function getPaymentMethodName()
{
// TODO: "クレジットカード" という文字列を返してください
}
/**
* カード番号をマスキングする(セキュリティのため)
*
* @param string $cardNumber カード番号
* @return string マスキングされたカード番号
*/
private function maskCardNumber($cardNumber)
{
// TODO: カード番号を「****-****-****-最後の4桁」の形式でマスキングしてください
// ヒント:
// 1. explode('-', $cardNumber) でカード番号を '-' で分割して配列にする
// 2. 配列の要素数が4つの場合、最後の要素($parts[3])以外を「****」に置き換える
// 3. "****-****-****-" と最後の4桁を結合して返す
// 4. 配列の要素数が4つでない場合は "****-****-****-****" を返す
}
}

View File

@@ -0,0 +1,44 @@
<?php
namespace Common;
require_once __DIR__ . '/NotificationInterface.php';
/**
* メール通知を行うクラス
*/
// TODO: EmailNotification クラスを作成し、NotificationInterface を実装してください
// ヒント: class EmailNotification implements NotificationInterface
// TODO: private プロパティ $emailAddress を定義してください
/**
* コンストラクタ
*
* @param string $emailAddress 送信先のメールアドレス
*/
// TODO: コンストラクタを実装してください
// 引数で受け取った $emailAddress を $this->emailAddress に設定
/**
* メールで通知を送信する
*
* @param string $title 通知のタイトル
* @param string $message 通知の本文
* @return void
*/
// TODO: send メソッドを実装してください
// 以下の内容を表示(各行の最後に <br> を付ける):
// - "📧 メール送信"
// - "宛先: " . $this->emailAddress
// - "件名: " . $title
// - "本文: " . $message
// - "メールを送信しました。"
/**
* 送信先のメールアドレスを取得する
*
* @return string メールアドレス
*/
// TODO: getDestination メソッドを実装してください
// $this->emailAddress を返す

View File

@@ -0,0 +1,40 @@
<?php
namespace Common;
require_once __DIR__ . '/MessageSenderInterface.php';
/**
* LINE でメッセージを送信するクラス
*/
// TODO: LineMessage クラスを作成し、MessageSenderInterface を実装してください
// TODO: private プロパティ $userName を定義してください
/**
* コンストラクタ
*
* @param string $userName 送信先のユーザー名
*/
// TODO: コンストラクタを実装してください
// 引数で受け取った $userName を $this->userName に設定
/**
* LINE でメッセージを送信する
*
* @param string $message メッセージ内容
* @return void
*/
// TODO: send メソッドを実装してください
// 以下の内容を表示(各行の最後に <br> を付ける):
// - "📱 LINE送信"
// - "送信先: " . $this->userName
// - "メッセージ: " . $message
/**
* 送信先の名前を取得する
*
* @return string ユーザー名
*/
// TODO: getDestinationName メソッドを実装してください
// $this->userName を返す

View File

@@ -0,0 +1,25 @@
<?php
namespace Common;
/**
* メッセージ送信のためのインタフェース
*/
// TODO: MessageSenderInterface という名前のインタフェースを定義してください
/**
* メッセージを送信する
*
* @param string $message メッセージ内容
* @return void
*/
// TODO: send メソッドを定義してください(実装は不要)
// public function send($message);
/**
* 送信先の名前を取得する
*
* @return string 送信先の名前
*/
// TODO: getDestinationName メソッドを定義してください(実装は不要)
// public function getDestinationName();

View File

@@ -0,0 +1,28 @@
<?php
namespace Common;
require_once __DIR__ . '/MessageSenderInterface.php';
/**
* メッセージ送信サービスクラス
* インタフェース型を引数で受け取ることで、様々な送信方法に対応できる
*/
// TODO: MessageService クラスを作成してください
/**
* メッセージを送信する
*
* @param MessageSenderInterface $sender 送信方法(インタフェース型)
* @param string $message メッセージ内容
* @return void
*/
// TODO: sendMessage メソッドを実装してください
// ★ポイント: 引数の型を MessageSenderInterface にすることで、
// LineMessage でも SlackMessage でも受け取れます!
//
// 以下の内容を表示(各行の最後に <br> を付ける):
// - "【送信開始】"
// - "送信方法: " . $sender->getDestinationName()
// - $sender->send($message) を呼び出す
// - "【送信完了】"

View File

@@ -0,0 +1,26 @@
<?php
namespace Common;
/**
* 通知を送信するためのインタフェース
*/
// TODO: NotificationInterface という名前のインタフェースを定義してください
// TODO: 以下のメソッドを定義してください(実装は不要)
/**
* 通知を送信する
*
* @param string $title 通知のタイトル
* @param string $message 通知の本文
* @return void
*/
// public function send($title, $message);
/**
* 送信先の情報を取得する
*
* @return string 送信先(メールアドレスや電話番号など)
*/
// public function getDestination();

View File

@@ -0,0 +1,65 @@
<?php
namespace Common;
require_once __DIR__ . '/PaymentInterface.php';
/**
* 注文処理を行うクラス
* 決済方法をDI(依存性注入)で受け取る
*/
class OrderProcessor
{
/** @var PaymentInterface 決済方法 */
private $paymentMethod;
/**
* コンストラクタ
*
* @param PaymentInterface $paymentMethod 決済方法(インタフェース型)
*/
public function __construct(PaymentInterface $paymentMethod)
{
// TODO: 決済方法をプロパティに設定してください
// ポイント: この引数の型は PaymentInterface なので、
// CreditCardPayment や BankTransferPayment など、
// PaymentInterface を実装したどのクラスのインスタンスでも受け取れます。
// これが「依存性注入(DI)」と「多態性」の組み合わせです。
}
/**
* 注文を処理する
*
* @param int $amount 注文金額(円)
* @return void
*/
public function processOrder($amount)
{
// TODO: 以下の処理を実装してください
// 1. "注文処理を開始します" を表示
// 2. "決済方法: " に続けて、$this->paymentMethod->getPaymentMethodName() の結果を表示
// 3. "---" を表示(区切り線)
// 4. $this->paymentMethod->pay($amount) を呼び出して、戻り値を $result に格納
// 5. $result が true の場合:
// - "---" を表示
// - "✅ 注文が完了しました!" を表示
// 6. $result が false の場合:
// - "---" を表示
// - "❌ 決済に失敗しました。" を表示
// ※各行の最後に <br> を付けること
}
/**
* 決済方法を変更する
*
* @param PaymentInterface $paymentMethod 新しい決済方法
* @return void
*/
public function changePaymentMethod(PaymentInterface $paymentMethod)
{
// TODO: 以下の処理を実装してください
// 1. $paymentMethod をプロパティに設定
// 2. "決済方法を「" + 決済方法名 + "」に変更しました" を表示
// ※最後に <br> を付けること
}
}

View File

@@ -0,0 +1,24 @@
<?php
namespace Common;
/**
* 決済処理を行うためのインタフェース
*/
interface PaymentInterface
{
/**
* 決済を実行する
*
* @param int $amount 決済金額(円)
* @return bool 決済が成功したかどうか
*/
public function pay($amount);
/**
* 決済方法の名前を取得する
*
* @return string 決済方法名(例: "クレジットカード", "銀行振込")
*/
public function getPaymentMethodName();
}

View File

@@ -0,0 +1,40 @@
<?php
namespace Common;
require_once __DIR__ . '/MessageSenderInterface.php';
/**
* Slack でメッセージを送信するクラス
*/
// TODO: SlackMessage クラスを作成し、MessageSenderInterface を実装してください
// TODO: private プロパティ $channelName を定義してください
/**
* コンストラクタ
*
* @param string $channelName 送信先のチャンネル名
*/
// TODO: コンストラクタを実装してください
// 引数で受け取った $channelName を $this->channelName に設定
/**
* Slack でメッセージを送信する
*
* @param string $message メッセージ内容
* @return void
*/
// TODO: send メソッドを実装してください
// 以下の内容を表示(各行の最後に <br> を付ける):
// - "💬 Slack送信"
// - "チャンネル: " . $this->channelName
// - "メッセージ: " . $message
/**
* 送信先の名前を取得する
*
* @return string チャンネル名
*/
// TODO: getDestinationName メソッドを実装してください
// $this->channelName を返す

View File

@@ -0,0 +1,42 @@
<?php
namespace Common;
require_once __DIR__ . '/NotificationInterface.php';
/**
* SMS通知を行うクラス
*/
// TODO: SmsNotification クラスを作成し、NotificationInterface を実装してください
// TODO: private プロパティ $phoneNumber を定義してください
/**
* コンストラクタ
*
* @param string $phoneNumber 送信先の電話番号
*/
// TODO: コンストラクタを実装してください
// 引数で受け取った $phoneNumber を $this->phoneNumber に設定
/**
* SMSで通知を送信する
*
* @param string $title 通知のタイトル
* @param string $message 通知の本文
* @return void
*/
// TODO: send メソッドを実装してください
// 以下の内容を表示(各行の最後に <br> を付ける):
// - "📱 SMS送信"
// - "宛先: " . $this->phoneNumber
// - "内容: [" . $title . "] " . $message
// - "SMSを送信しました。"
/**
* 送信先の電話番号を取得する
*
* @return string 電話番号
*/
// TODO: getDestination メソッドを実装してください
// $this->phoneNumber を返す