ゲームの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 と同じ確率方法論ですが、分布はより多くのモンスター レベルとより多くの潜在的な距離にわたっています。
正しい方向に考えさせられる 2 つの記事を見つけました。
距離に基づいてモンスターのグループ分けを簡単に判断できます。たとえば、記事 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 マイル) を具体的に知っています。そのため、他のモンスター レベルの重み付けを作成できません (または作成方法がわかりません)。
この質問が十分に具体的でない場合はお知らせください。解決策をさらに検討し、投稿/更新します。誰かが少なくともアプローチに関するベストプラクティスの考えを教えてくれることを願っています。そこから、達成するためのコードを書く方法をおそらく理解できるでしょう。