PHP使用Case进行循环调试

时间:2017-04-09 13:41:11

标签: php

我进一步了解了我自己的小试验和错误,想要创建一个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;


    }
  }





    ?>

1 个答案:

答案 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循环意味着您将获得所需的结果。