2015-03-31 2 views
1

Это будет довольно странный вопрос, но нести меня.Моя проблема с массивом PHP

Я кодирую браузерную игру, и каждый игрок имеет количество охранников, каждый из которых имеет 100 здоровья. Каждый раз, когда их снимают, охранники теряют здоровье. Если все охранники мертвы, игрок берет здоровье вместо этого.

Урон от выстрела всегда перекрывается, поэтому, если игрок имеет 3 стража, а верхняя защита имеет 60 здоровья, выстрел в 100 убивает охранника 3 и оставляет охрану 2 с 60 здоровьем.

Я использую массив 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'. Установите его, чтобы пройти через свой код, и он покажет вам, где изменяется переменная. –

ответ

0

Не зная содержимое $rs или зная, что константы bgs_hp2, hp2 и BGs2 есть, это трудно сказать, но похоже, что проблема лежит вокруг этой комбинации линий:

$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

Я думаю, что это может быть так, что я не устанавливал состояние здоровья телохранителей. Спасибо –

+0

'BGs2' должно быть между кавычками. –

Смежные вопросы