2012-09-11 43 views
0

我正在創建一個PLayer 1 vs Player 2簡單系統,並且系統僅限於30輪,如果30輪完成並且兩個玩家都還活着,那麼它是稱爲平局。如果玩家1在30輪之前獲得0或小於0並且玩家2仍然活着,那麼玩家2贏得遊戲等等...即使我已經設置了小於或等於0的值,我仍然得到了負值

問題是爲什麼我仍然有負值什麼是我的代碼錯?我已經在那裏設置了一條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

我不確定我明白你在問什麼。遊戲結束後你會得到錯誤的最終遊戲狀態嗎? – Erik

+1

我會使用'echo'語句慷慨地檢查代碼中不同部分的所有變量的值。這樣,當這些值做了你不指望的事情時,你可以看到它發生了什麼。 – John

+0

後續工作:看起來您已經在代碼的某些部分執行此操作。它告訴你什麼?也許在你的問題中顯示遊戲的輸出? – John

回答

3

玩家1以100點生命值開始。在玩家2的每次攻擊之後,這個數值會下降8.在第12次攻擊之後,玩家1將擁有4點生命值。在第13次攻擊中,該值會減少另一個8,產生− 4.

任何時候一個玩家的攻擊強度不會均勻分配對方的健康狀態,您會看到這種現象。

如果你不希望值低於零,甚至攻擊後,再檢查這一點,解決它:

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

這是因爲該值仍然可以進去,說消極的,循環的執行號碼20。該循環仍然會執行第21次迭代,如果條件會中斷。

你可能會考慮使用while條件的健康值,如:

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

然後消除在檢查健康值循環中的第一個條件。

相關問題