我的PHP数组问题

时间:2015-03-31 20:37:22

标签: php arrays

这将是一个非常奇怪的问题,但请耐心等待。

我正在编写一个基于浏览器的游戏,每个玩家都有一定数量的守卫,每个守卫都有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;

1 个答案:

答案 0 :(得分: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))以查看您正在执行的实际数据。祝你好运!