我进一步了解了我自己的小试验和错误,想要创建一个while循环,如果$ monster或$ du低于" 0"则结束。我解决了第一个问题,即循环永久在循环中。但现在它只是在$ du等于或低于" 0"而不是"怪物"低于" 0"。
我需要改变什么?
说清楚:如果$ du为零或,如果$ monster为零,我希望脚本停止。只有一件事是" true" 来阻止它。因为英雄杀死了怪物或怪物杀死了英雄 - 战斗结束了。 现在它只会在$ du为零时停止并且仍然继续,即使$ monster低于零,同时英雄高于零。
<?php
if(isset($_POST['gesendet'])){
// Variablen deklararien und Werte zuweisen.
$waffe = $_POST['waffe'];
$monster = 100;
$du = 70;
$i = 0;
$ko = 0;
switch($waffe){
case "1":
while ( $du > 0 OR $monster > 0) {
$schaden2 = rand(1,6);
$dolch = rand(1,4) + 4;
$du = ($du - $schaden2);
$monster = ($monster - $dolch);
$i = $i + 1;
echo "Runde: " . $i . "<br>" ;
echo "Du triffst das Monster mit einem Dolch für " . $dolch . " Schaden.<br>" ;
echo "Es hat noch " . $monster . " HP<br>" ;
echo "Das Monster trifft dich für " . $schaden2 . " Schaden.<br>" ;
echo "Du hast noch " . $du . " HP<br>" ;
}
break;
case "2":
while ( $du > 0 OR $monster > 0) {
$schaden2 = rand(1,6);
$schwert = rand(1,6) + 2;
$du = ($du - $schaden2);
$monster = ($monster - $schwert);
$i = $i + 1;
echo "Runde: " . $i . "<br>" ;
echo "Du triffst das Monster mit einem Schwert für " . $schwert . " Schaden.<br>" ;
echo "Es hat noch " . $monster . " HP<br>" ;
echo "Das Monster trifft dich für " . $schaden2 . " Schaden.<br>" ;
echo "Du hast noch " . $du . " HP<br>" ;
}
break;
case "3":
while ( $du > 0 OR $monster > 0) {
$schaden2 = rand(1,6);
$zweihaender = rand(1,6) * 2;
$du = ($du - $schaden2);
$monster = ($monster - $zweihaender);
$i = $i + 1;
echo "Runde: " . $i . "<br>" ;
echo "Du triffst das Monster mit einem Zweihänder für " . $zweihaender . " Schaden.<br>" ;
echo "Es hat noch " . $monster . " HP<br>" ;
echo "Das Monster trifft dich für " . $schaden2 . " Schaden.<br>" ;
echo "Du hast noch " . $du . " HP<br>" ;
}
break;
}
}
?>
答案 0 :(得分:1)
首先我要改变
while ( $du > 0 OR $monster > 0) {
要
while ( $du > 0 || $monster > 0) {
这是因为关于“或”和“||”的运算符优先级。
然后看一下逻辑。当$du
或 $monster
低于零时,您告诉脚本停止。如果您希望循环在两者都低于零时退出,则将代码更改为。
while ( $du > 0 && $monster > 0) {
一些链接:
将您的switch语句更改为:
switch($waffe) {
case "1":
while ( $du > 0 && $monster > 0) {
$schaden2 = rand(1,6);
$dolch = rand(1,4) + 4;
$du = ($du - $schaden2);
$monster = ($monster - $dolch);
$i = $i + 1;
echo "Runde: " . $i . "<br>" ;
echo "Du triffst das Monster mit einem Dolch für " . $dolch . " Schaden.<br>" ;
echo "Es hat noch " . $monster . " HP<br>" ;
echo "Das Monster trifft dich für " . $schaden2 . " Schaden.<br>" ;
echo "Du hast noch " . $du . " HP<br>" ;
}
break;
对于switch语句中的所有情况重复一遍(如果将它们全部添加,那么我的答案会很长,而且我在手机上)。
这背后的逻辑是你要让脚本使用这个逻辑:
如果$monster
和 $du
为正,则继续运行while循环
否则有人死了。
所以,这些是案例:
如果$monster
为正数且$du
为正,则继续战斗
如果$monster
为负且$du
为正,那么怪物就会被杀死
如果$monster
为正数且$du
为负数,那么玩家就会被杀
(这个不太可能但是)如果$monster
为负且$du
为负,则两者都已死亡。
您之前的代码意味着如果$monster
低于零,则代码将继续运行,因为$du
仍大于零,这意味着整个循环为真。
考虑这个例子:
$a = 5;
$b = 2;
if ($a < 4 || $b < 4)
{
echo "This will be true.";
}
在此示例中,$a
不小于4,但$b
表示结果为true。或声明的作用方式是其中一个必须为真。
使用和声明两者都必须为真。这意味着如果你这样做了:
$a = 5;
$b = 2;
if ($a < 4 && $b < 4)
{
echo "This will be false and won't run.";
}
上面的代码不会运行,因为$a
大于4.这将取消If语句。
使用和for while循环意味着您将获得所需的结果。