Php 即使我设置的值已经小于或等于0,仍然得到负值

Php 即使我设置的值已经小于或等于0,仍然得到负值,php,Php,我正在创建一个玩家1对玩家2的简单系统,系统限制只有30轮,如果30轮结束,并且两个玩家都还活着,则称为平局。如果玩家1在30轮之前得到0或少于0,并且玩家2仍然活着,那么玩家2将赢得比赛,等等 问题是为什么我仍然有负值我的代码有什么问题?我已经在那里设置了一个if语句。任何想法都会对我有很大的帮助,我愿意改进,因为我还是一个初学者。谢谢 <?php //Player 1 $p1Health = 100; $p1Attack = 5;

我正在创建一个玩家1对玩家2的简单系统,系统限制只有30轮,如果30轮结束,并且两个玩家都还活着,则称为平局。如果玩家1在30轮之前得到0或少于0,并且玩家2仍然活着,那么玩家2将赢得比赛,等等

问题是为什么我仍然有负值我的代码有什么问题?我已经在那里设置了一个if语句。任何想法都会对我有很大的帮助,我愿意改进,因为我还是一个初学者。谢谢

<?php 

        //Player 1
        $p1Health = 100;
        $p1Attack = 5;
        $p1Speed = 3;

        //Player 2
        $p2Health = 70;
        $p2Attack = 8;
        $p2Speed = 5;

        //Greater speed attack first
        $speed1=0;
        $speed2=0;

        echo '<td>'.$p1Health.'</td><td>'.$p1Attack.'</td><td>'.$p1Speed.'</td>';

        echo '<td>'.$p2Health.'</td><td>'.$p2Attack.'</td><td>'.$p2Speed.'</td>';

        //Compare speed
        if($p1Speed<$p2Speed){
            $speed1=1; //start first
            $speed2=0;
        }
        else {
            $speed1=0; //start first
            $speed2=1;
        }

        $rounds = 30; //maximum rounds
        $count = 0;

        while($count<=30){

            if($p1Health<=0 || $p2Health<=0){ //if any of the players health is equal or below zero loop stop and declare winner

                break;

            }
            else if($speed1==1){

                $p2Health = $p2Health - $p1Attack;

                echo 'Player 2 damaged by '.$p1Attack.' points.Health points left: '.$p2Health.'<br>'; 

                //turn to other player to attack
                $speed1=0;
                $speed2=1;

            }
            else if($speed2==1){

                $p1Health = $p1Health - $p2Attack;

                echo 'Player 1 damaged by '.$p2Attack.' points.Health points left: '.$p1Health.'<br>';

                //turn to other player to attack
                $speed1=1;
                $speed2=0;

            }

            $count++;
        }

        if($p1Health>0 && $p2Health<=0){

            echo 'Player 1 wins the battle';

        }
        else if($p2Health>0 && $p1Health<=0){

            echo 'Player 2 wins the battle';

        }
        else if($p1Health>0 && $p2Health>0){

            echo 'Battle draw';

        }

    ?>


我不知道我的代码是否正确,但这是基于我的理解,任何改进这一点的想法都会对我有很大帮助。

玩家1从100点生命值开始。在玩家2的每次攻击后,下降8。第12次攻击后,玩家1将获得4点生命值。在第13次攻击中,该值再减少8,让步−四,

当一个玩家的攻击强度不能平均分配另一个玩家的生命值时,你就会看到这种现象

如果您不希望该值低于零,即使是在攻击之后,请检查并修复该值:

$p1Health = $p1Health - $p2Attack;
if ($p1Health < 0)
  $p1Health = 0;
$p1Health=$p1Health-$p2攻击;
如果($p1Health<0)
$p1Health=0;

玩家1以100点生命值开始。在玩家2的每次攻击后,下降8。第12次攻击后,玩家1将获得4点生命值。在第13次攻击中,该值再减少8,让步−四,

当一个玩家的攻击强度不能平均分配另一个玩家的生命值时,你就会看到这种现象

如果您不希望该值低于零,即使是在攻击之后,请检查并修复该值:

$p1Health = $p1Health - $p2Attack;
if ($p1Health < 0)
  $p1Health = 0;
$p1Health=$p1Health-$p2攻击;
如果($p1Health<0)
$p1Health=0;

这是因为在循环的执行编号20中,值仍然可以变为负值。循环仍然会再次执行到迭代编号21,在这里if条件将中断

您可以考虑在while条件下使用健康值,如:

while ($count < $rounds && p1Health > 0 && p2Health > 0) {
while($count<$rounds&&p1Health>0&&p2Health>0){

然后消除循环中检查运行状况值的第一个条件。

这是因为在循环的执行编号20中,值仍然可以为负值。循环仍将再次执行到迭代编号21,此时if条件将中断

您可以考虑在while条件下使用健康值,如:

while ($count < $rounds && p1Health > 0 && p2Health > 0) {
while($count<$rounds&&p1Health>0&&p2Health>0){

然后消除循环中检查运行状况值的第一个条件。

我不确定我是否理解您的要求。游戏结束后,您是否得到错误的游戏结束状态?我会慷慨地使用
echo
语句检查代码不同部分的所有变量的值。这样,当值不正确时一些你不期望的事情,你可以看到它发生的地方。后续:看起来你已经在你的部分代码中这样做了。它告诉了你什么?也许在你的问题中显示了游戏的输出?我不确定我是否理解你的问题。游戏结束后你是否得到了错误的游戏结束状态?我会使用
echo
语句gener我们需要在代码的不同部分检查所有变量的值。这样,当这些值做了您不期望的事情时,您可以看到它发生的地方。后续:看起来您已经在代码的部分中做了。它告诉了您什么?可能会在您的问题中显示游戏的输出?