我正在创建一个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';
}
?>
我不知道我的代码是否正确,但这是基于我的理解,任何改善这一点的想法对我来说都是一个很大的帮助。
答案 0 :(得分:3)
玩家1以100点生命值开始。在每次来自玩家2的攻击之后,它会下降8.在第12次攻击之后,玩家1将拥有4点生命值。在第13次攻击时,该值减少了8,产生-4。
每当一名球员的攻击强度不能均衡地分配对方的健康时,你就会看到这种现象。
如果您不希望该值低于零,即使在攻击之后,请检查并修复它:
$p1Health = $p1Health - $p2Attack;
if ($p1Health < 0)
$p1Health = 0;
答案 1 :(得分:0)
这是因为在循环的执行号20中,值仍然可以为负。循环仍将再次执行到迭代次数21,其中if条件将中断。
您可以考虑在while条件中使用健康值,如:
while ($count < $rounds && p1Health > 0 && p2Health > 0) {
然后消除循环中检查健康值的第一个条件。