2

ゲームの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 つの記事を見つけました。

確率分布に基づいて結果を取得する

PHPパーセンテージチャンス


距離に基づいてモンスターのグループ分けを簡単に判断できます。たとえば、記事 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 マイル) を具体的に知っています。そのため、他のモンスター レベルの重み付けを作成できません (または作成方法がわかりません)。

この質問が十分に具体的でない場合はお知らせください。解決策をさらに検討し、投稿/更新します。誰かが少なくともアプローチに関するベストプラクティスの考えを教えてくれることを願っています。そこから、達成するためのコードを書く方法をおそらく理解できるでしょう。

4

1 に答える 1

1

weighted_random1つの方法は、発見した関数を使用することですが、別の方法で使用します。

さまざまな距離でモンスタークラスを見つける確率に対応する配列を作成します。

$a=array(1,2,3,4,5,6,7,8,9,10);
$b=array(0,0,0,0,1,2,3,4,5, 6);
$c=array(0,0,0,0,0,0,0,1,2, 3);

これは、距離0でモンスタークラスAの確率が100%であることを示しています。一方、距離9では、モンスタークラスAの確率は10/19、Bは6/19、Cは3/19です。もちろん、配列内の数値を変更して、好きな確率分布を作成することもできます。

これらの配列をプログラムで使用するには、これらを2D配列に変換します。

$probtable=array();
for($i=0;$i<count($a);$i++){
   $probtable[$i]=array($a[$i],$b[$i],$c[$i]);

ここで、移動距離が$d次の場合、適切なモンスターの重みがによって与えられ$probtable[$d]、カテゴリは次のように取得されます。

weighted_random($values, $probtable[$d])

確率分布を正しくするために、必要に応じて初期配列を調整します。

于 2013-01-03T10:03:33.323 に答える