我正在尝试根据概率从数据集中随机选择,该概率由游戏的 PHP 中映射点之间的距离量决定。此外,数据集中包含的潜在记录也由距离决定。
我有一张等级从 1 到 20 的怪物表。我希望能够首先根据用户是否已经走了足够的距离来选择怪物。
示例 1:
- 如果距离在 1 - 100 之间,则只能包含 1,2,3 级的怪物
- 而且距离越接近100,他们就越有可能得到更高等级的怪物(例如,如果你在100距离,你最有可能得到3级怪物,不太可能得到2级和获得 1 级的可能性更小;如果您距离 50 岁,那么最有可能获得 2 级,同样可能获得 1 级或 3 级。
示例 2:
- 如果距离在 1 - 200 之间,则潜在怪物为 1,2,3,4,5,6 级
- 与示例 1 相同的概率方法,但分布跨越更多怪物级别和更多潜在距离。
我发现有两篇文章让我朝着正确的方向思考:
我很容易根据距离确定怪物分组。例如,我可以从文章 1 中的函数中看到,如果我知道怪物组内所有可能的距离,我可以像这样为它们分配权重:
function weighted_random($values, $weights){
$count = count($values);
$i = 0;
$n = 0;
$num = mt_rand(0, array_sum($weights));
while($i < $count){
$n += $weights[$i];
if($n >= $num){
break;
}
$i++;
}
return $values[$i];
}
$values = array('A','B','C','D','E'); // Potential monster levels
$weights = array(1,20,50,75,100); // Possible distance ranges
$weighted_value = weighted_random($values, $weights);
问题是,我只知道该组最大潜在距离内的实际距离。换句话说,对于怪物组 1(A、B、C、D、E),我知道玩家必须在 1 到 100 英里之间旅行,并且我特别知道他们走了多远(即 85 英里)。所以我不能为其他怪物级别创建权重(或不知道如何)。
请注意,如果这个问题不够具体,请告诉我,我会进一步考虑解决方案并发布/更新。我希望有人至少能给我一些关于方法的最佳实践想法,从那里我可能会弄清楚如何编写一些代码来完成。