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


Still got negative values even I set already less than or equals to 0

我正在创建一个PLayer 1 vs PLayer 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';
        }
    ?>

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

Player1以100生命值开始。在玩家2每次攻击后,这个数字会下降8。第12次攻击后,玩家1将拥有4点生命值。在第13次攻击时,该值又减少了8,产生了正负;4.

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

如果你不想让值低于零,即使在攻击之后,也要检查并修复它:

$p1Health = $p1Health - $p2Attack;
if ($p1Health < 0)
  $p1Health = 0;

这是因为在循环的执行数20中,值仍然可能为负数。循环仍然会再次执行到第21次迭代,在那里if条件将被打破。

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

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

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