这将是一个非常奇怪的问题,但请耐心等待。
我正在编写一个基于浏览器的游戏,每个玩家都有一定数量的守卫,每个守卫都有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 :(得分: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)
)以查看您正在执行的实际数据。祝你好运!