【发布时间】:2014-10-18 10:19:13
【问题描述】:
结果是这样的:
- 你对敌人造成 8 点伤害,敌人还剩 92 点生命值
- 敌人对你造成 8 点伤害,你还剩 86 hp
- 你对敌人造成 5 点伤害,敌人还剩 81 点生命值
- 敌人对你造成 11 点伤害,你还剩 72 hp
- 你对敌人造成 12 点伤害,敌人还剩 67 点生命值
- 敌人对你造成 7 点伤害,你还剩 60 hp
- 你对敌人造成 13 点伤害,敌人还剩 40 点生命值
- 敌人对你造成 11 点伤害,你还剩 32 点生命值
- 你对敌人造成 2 点伤害,敌人还剩 33 点生命值
- 敌人对你造成 15 点伤害,你还剩 16 点生命值
- 你对敌人造成 15 点伤害,敌人还剩 2 点生命值
- 敌人对你造成 17 点伤害,你还剩 -11 hp
你死了:-11 hp 敌人获胜!
敌人的生命值是:-8 你赢了!你获得 50 经验!
两者都有 100 hp,正如您在第 2 行看到的那样,当敌人受到 8 点伤害并剩下 86 hp 时,有一个“循环”丢失了。
当其中一个死亡时如何停止循环以使两者不能同时死亡?因此,如果一个人死了,循环就会停止并确定获胜者。
有没有更好的方法来确定从随机开始?
<?php
$p_hp = 100;
$p_atk = 20;
$p_defence = 5;
$m_hp = 100;
$m_atk = 20;
$m_defence = 5;
if ($p_hp > 0) {
$turn = rand(0,1);
$hitnr = 0;
while (($p_hp >= 0) && ($m_hp >= 0)) {
$turn--;
$hitnr++;
$enemydef = $p_atk - $m_defence / 2;
$my_damage = rand(1, $enemydef);
$playerdef = $m_atk - $p_defence / 2;
$enemy_damage = rand(1, $playerdef);
$p_hp = $p_hp - $enemy_damage;
$m_hp = $m_hp - $my_damage;
// Player turn
if ($turn % 2 == 0) {
echo "<b>".$hitnr.".</b> Enemy hit you for <font color='red'><b>".$enemy_damage . "</b></font> damage you have <b>".$p_hp." hp</b> left<br>";
// Monster turn
} else {
echo "<b>".$hitnr.".</b> You hit enemy for <font color='green'><b>".$my_damage . "</b></font> damage enemy has <b>".$m_hp." hp</b> left<br>";
}
if ($p_hp <= 0) {
echo "<br>You died: ".$p_hp." hp<br><font color='red'><b>Enemy wins!</b></font>";
}
if ($m_hp <= 0) {
echo "<br>Enemy hp is: ".$m_hp."<br><font color='green'><b>You win! You gain 50 exp!</b></font>";
}
}
} else {
echo "You are dead. <a href='hospital.php'>Go to the hospital!</a>";
}
?>
【问题讨论】:
-
如果是玩家回合 - 那么大多数 hp 应该减少,反之亦然,现在每回合你都会减少两个角色的 hp。
-
检查两个命中点是否为负数,如果一个通过为真,则打破声明
if ($EnemyHealth < 0 OR $PlayerHealth < 0){ break; }
标签: php loops if-statement while-loop