PHP游戏武器精度

PHP游戏武器精度,php,random,weighted,Php,Random,Weighted,我正试图想出一种方法,让玩家可以发射他们的武器,并且只命中一定的百分比。例如,一支枪只能命中70%的时间,而另一支枪只能命中34%的时间 到目前为止,我所能想到的就是加权数组 尝试1: private function weighted_random(&$weight) { $weights = array(($weight/100), (100-$weight)/100); $r = mt_rand(1,1000); $offse

我正试图想出一种方法,让玩家可以发射他们的武器,并且只命中一定的百分比。例如,一支枪只能命中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)];
    }
球员们似乎没有达到正确的百分比,但我不确定为什么

有什么想法或建议吗?这些有什么明显的问题吗


谢谢

这是我第二次尝试的简单方法,对吗?你知道它是否准确吗?应该准确。你可以通过打几千次电话来测试准确度,然后看看结果如何。这取决于你所说的准确度。随机性是一件有趣的事情。仅仅因为它可以连续返回10次,对于一个有1%几率击中的武器来说,这并不意味着它是不准确的。还有一件重要的事情要考虑。在开发游戏时,你肯定不希望你的武器射击功能是任何形式的循环。它不是:mt_rand0,99<$weight你的答案使用0,100,返回101种可能性中的一种。这是我第二次尝试的一种更简单的方法,对吗?你知道它是否准确吗?应该准确。你可以通过打几千次电话来测试准确度,然后看看结果如何。这取决于你所说的准确度。随机性是一件有趣的事情。仅仅因为它可以连续返回10次,对于一个有1%几率击中的武器来说,这并不意味着它是不准确的。还有一件重要的事情要考虑。在开发游戏时,你肯定不希望你的武器射击功能是任何形式的循环。它不是:mt_rand0,99<$weight你的答案使用0,100,返回101种可能性中的一种。明显错误?是的,它们比下面Chris Atley所示的更简单的方法要慢得多。你肯定不想迭代任何类型的数组,更不用说在每次武器开火时对其进行排序。谢谢,我没有考虑开销!大错特错?是的,它们比下面Chris Atley所示的更简单的方法要慢得多。你肯定不想迭代任何类型的数组,更不用说在每次武器开火时对其进行排序。谢谢,我没有考虑开销!
private function weapon_fired($weight)
    {
        return mt_rand(0, 99) < $weight;
    }