Точность оружия в PHP игре - PullRequest
1 голос
/ 06 мая 2010

Я пытаюсь найти способ, позволяющий игрокам стрелять из своего оружия и наносить удары только в течение определенного процента. Например, одна пушка может поражать только 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)];
    }

Это не , кажется , что игроки бьют правильные проценты, но я не совсем уверен, почему.

Есть идеи или предложения? Что-то явно не так с ними?

Спасибо

1 Ответ

10 голосов
/ 06 мая 2010
private function weapon_fired($weight)
    {
        return mt_rand(0, 99) < $weight;
    }
...