2015-03-31 94 views
1

這將是一個很奇怪的問題,但請耐心等待。我的PHP陣列問題

我正在編寫一個基於瀏覽器的遊戲,每個玩家都有一定數量的衛兵,每人有100個衛生。每次射擊時,衛兵失去健康。如果所有的守衛都死了,玩家就會改變健康。

射門傷害總是重疊,所以如果球員有3名後衛,而頂級後衛有60名生命,則100次射門會殺死後衛3並留下60後衛2。

我使用一個php數組來排序這個,它起作用,除非它涉及到玩家的健康。它不能正確計算,例如所有的球員守衛都已經死亡,並且球員剩下60個生命值。他被射中了100,而不是死於健康循環,所以他有一些其他數字健康而不是-40。

$p_bg = array(); // players guard count 
$p_bg[0] = $rs[bgs_hp2]; // only the top guard hp is saved (bgs_hp2) 
$p_hp = $rs[hp2]; // players health 
$dmg = 80 // shot damage 

$x = 0; 
while($x < $rs[BGs2]) { $p_bg[$x] = 100; $x++; } 

// As long as there's still damage to take and bgs to take it: 
while($dmg && !empty($p_bg)) { 
    $soak = min($p_bg[0], $dmg); // not more than the first bg can take 
    $p_bg[0] -= $soak; // remove hps from the first bg 
    $dmg -= $soak; // deduct from the amount of damage to tage 

    if ($p_bg[0] == 0) { 
     // bodyguard dead, remove him from the array 
     array_shift($p_bg); 
     } 
    } 

// If there's any damage left over, it goes to hp 
$p_hp = $p_hp - $dmg; 
+0

我現在不在PHP框中,所以不能爲你做,但這是'xdebug'的錯誤。安裝它來遍歷你的代碼,它會告訴你變量在哪裏被改變。 – 2015-03-31 20:39:57

回答

0

不知道的$rs內容或知道什麼是常量bgs_hp2hp2BGs2是,這是很難說,但它似乎是問題的關鍵在於圍繞線的結合:

$p_bg = array(); // Create an empty array 
$p_bg[0] = $rs[bgs_hp2]; // Populate the first index, possibly null? 
$x = 0; 
while($x < $rs[BGs2]) { $p_bg[$x] = 100; $x++; } 

我會懷疑BGs2是玩家的保鏢嗎?每次這個代碼被擊中時,你似乎將最高保鏢的健康度設置爲100。

$p_bg = array($rs[bgs_hp2]); 
for ($x = 0; $x < $rs[BGs2]; $x++) { $p_bg[] = 100; } 

其他,註銷你的變量(使用print_r($var)var_dump($var)必要的),看你執行上的實際數據:也許,如果它被重新安排如下將更爲清晰。祝你好運!

+0

我認爲這可能是因爲我沒有設定當前的保鏢健康。謝謝 – 2015-03-31 21:20:57

+0

'BGs2'應該在引號之間。 – 2015-03-31 21:30:37