用php写一个游戏的技能: 当攻击者攻击目标时80%概率附加眩晕状态3回合
时间: 2023-11-27 14:54:25 浏览: 127
剑网3的lua事件列表
以下是用PHP实现该技能的代码:
```php
<?php
class Skill {
public $name = "眩晕攻击";
public $description = "攻击目标时80%概率附加眩晕状态3回合";
public function apply($attacker, $target) {
// 80%的概率触发眩晕效果
if (rand(1, 100) <= 80) {
$target->addStatusEffect(new StunStatusEffect(3));
echo "{$attacker->name} 使用了 {$this->name},{$target->name} 被眩晕了!\n";
} else {
echo "{$attacker->name} 使用了 {$this->name},但是没有眩晕 {$target->name}。\n";
}
}
}
class StatusEffect {
public $name;
public $duration;
public function __construct($duration) {
$this->duration = $duration;
}
public function apply($target) {
$this->duration--;
if ($this->duration <= 0) {
$this->remove($target);
}
}
public function remove($target) {
echo "{$this->name} 效果结束了。\n";
$target->removeStatusEffect($this);
}
}
class StunStatusEffect extends StatusEffect {
public $name = "眩晕状态";
public function apply($target) {
parent::apply($target);
if ($this->duration % 2 == 0) {
echo "{$target->name} 被眩晕了,无法行动!\n";
}
}
}
class Character {
public $name;
public $hp;
public $statusEffects = array();
public function __construct($name, $hp) {
$this->name = $name;
$this->hp = $hp;
}
public function attack($target, $skill) {
echo "{$this->name} 攻击了 {$target->name}!\n";
$skill->apply($this, $target);
}
public function addStatusEffect($statusEffect) {
$this->statusEffects[] = $statusEffect;
}
public function removeStatusEffect($statusEffect) {
$index = array_search($statusEffect, $this->statusEffects);
if ($index !== false) {
unset($this->statusEffects[$index]);
}
}
public function updateStatusEffects() {
foreach ($this->statusEffects as $statusEffect) {
$statusEffect->apply($this);
}
}
}
// 示例用法
$player1 = new Character("玩家1", 100);
$player2 = new Character("玩家2", 100);
$skill = new Skill();
// 玩家1攻击玩家2
$player1->attack($player2, $skill);
// 更新状态效果
$player2->updateStatusEffects();
```
这里定义了一个 `Skill` 类来表示技能,并且实现了一个名为 `apply` 的方法来应用该技能。在 `apply` 方法中,我们使用 `rand` 函数随机生成一个数(1到100之间),如果随机数小于等于80,就触发眩晕效果,否则不触发。如果触发了眩晕效果,我们会在目标上添加一个 `StunStatusEffect` 对象,表示目标被眩晕了。
`StatusEffect` 类表示状态效果,例如眩晕、中毒、减速等等。在这个例子中,我们定义了一个 `StunStatusEffect` 类来表示眩晕状态。我们在 `apply` 方法中判断当前状态持续时间是否为偶数,如果是就输出一条无法行动的消息。
`Character` 类表示游戏角色,包含角色的名字、血量和状态效果列表。我们定义了一个 `attack` 方法来表示攻击行为,并且在其中调用技能的 `apply` 方法。我们还定义了 `addStatusEffect` 和 `removeStatusEffect` 方法来添加和移除角色的状态效果。最后,我们还定义了一个 `updateStatusEffects` 方法来更新角色的状态效果,这样每回合结束时可以自动更新状态效果的持续时间。
阅读全文