【发布时间】:2010-05-06 03:11:51
【问题描述】:
我正在尝试想出一种方法,让玩家可以用他们的武器开火并且只命中一定的百分比。例如,一把枪只能命中 70% 的时间,而另一把只能命中 34% 的时间。
到目前为止,我能想到的只是加权数组。
尝试 1:
private function weighted_random(&$weight)
{
$weights = array(($weight/100), (100-$weight)/100);
$r = mt_rand(1,1000);
$offset = 0;
foreach($weights as $k => $w)
{
$offset += $w*1000;
if($r <= $offset)
return $k;
}
}
尝试 2:
private function weapon_fired(&$weight)
{
$hit = array();
for($i = 0; $i < $weight; $i++)
$hit[] = true;
for($i = $weight; $i < 100; $i++)
$hit[] = false;
shuffle($hit);
return $hit[mt_rand(0,100)];
}
似乎球员的命中率并不正确,但我不太确定为什么。
有什么想法或建议吗?这些有什么明显的问题吗?
谢谢
【问题讨论】:
-
明显错了吗?是的,它们比下面显示的 Chris AtLee 等更简单的方法要慢得多。您绝对不想遍历任何类型的数组,更不用说每次武器开火时对其进行排序(随机播放)。
-
谢谢,我没有考虑开销!