7

ゲームのパーセンテージ ベースの確率を作成しようとしています。たとえば、アイテムのクリティカル ヒットの確率が 45% の場合、100 ヒット中 45 ヒットがクリティカルになることを意味する必要があります。

まず、簡単なソリューションを使用しようとしました。

R = new Random();
int C = R.Next(1, 101);
if (C <= ProbabilityPercent) DoSomething()

しかし、たとえば 48% の確率で 100 回反復すると、100 のうち 40-52 が得られます。49、50、51 についても同様です。したがって、これらの「パーセント」の間に違いはありません。

問題は、たとえば 50 のパーセンテージを設定し、厳密にランダムに 100 のうち 50 を取得する方法です。 アイテムとの出会いのチャンスを増やすきっかけとなる、レアアイテムの発見確率にとって非常に重要なことです。したがって、1% のバフは賢明です。

私の悪い英語でごめんなさい。

4

4 に答える 4

9

繰り返されるロール全体に均一に分布するという観点からのみ考える必要があります。

正確に45を生成するように強制することはランダムではないため、100以上のロールを調べることはできません。通常、そのようなロールは「記憶の欠如」を示すはずです。たとえば、6を探してサイコロを振った場合、6分の1の確率があります。あなたがそれを5回ロールし、6を取得しない場合、次のロールで6を取得する可能性は1ではありません。それでも6分の1です。したがって、それがどれだけうまくいったかを見ることができるだけです。統計的に多数のイベントで償却されたときのあなたの期待...100,000は言います。

基本的に:現在のコードは問題ありません。ユーザーが(クリティカルなしで55回ヒットしたため)次の45ヒットがクリティカルである必要があることをユーザーが知っている場合、それはランダムではなくなり、システムをゲーム化できます。

また; クリティカルヒットの45%の確率は少し高いようです; p

于 2012-11-12T10:32:36.957 に答える
4

私は C# の専門家ではないので、簡単にするために C++ 関数を使用しますが、どの言語にも適用できます。

rand() - 乱数ジェネレーター。

//33.34%
double probability = 0.3334;

//divide to get a number between 0 and 1
double result = rand() / RAND_MAX;
if(result < probability)
   //do something

私はこの方法を使用して非常に大きなパーコレート グリッドを作成しましたが、精度の値に優れています。

于 2013-08-12T20:48:51.567 に答える
4

ゲームのパーセンテージ ベースの確率を作成しようとしています。たとえば、アイテムのクリティカル ヒットの確率が 45% の場合、100 ヒット中 45 ヒットがクリティカルになることを意味する必要があります。

いいえ、そうではありません。あなたは確率の概念を完全に誤解しています。「パーセンテージベースの確率」は必要ありません。「100サンプルのパーセンテージベースのランダム分布」が必要です。

必要なのは「イベントのバッグ」で、そのうちの 45 は「重要」で、55 は「非重要」です。バッグからイベントを選択すると、次回は残りのイベントのみを選択できます。

次のようにモデル化できます。

Initialize two integer variables Crytical and NonCrytical so that they sum exactly 100 according to the desired percetnages.

Get a random value from 1 to Crytical+NonCrytical

If the random value is less than the value of Crytical, let you hit be crytical and:

   Crytical = Crytical -1

Else, let your hit be non-crytical

   NonCrytical = NonCrytical-1

End If

Repeat until Crytical+NonCrytical = 0
于 2012-11-12T10:38:43.503 に答える
0

問題は、Randomこのクラスを一度だけ初期化したい場合があるということです。

これは、Random乱数を生成するためのシードとしてシステム時間を使用するためです。ループが非常に高速な場合、複数のランダム インスタンスが同じシードを使用しているため、同じ数値が生成される可能性があります。

これが起こっていると思われる場合は、生成された数値を確認してください。

これに加えて、ランダム性に固有のものは、正確な結果が得られないことです。これは、50/50 の確率でも、100 回の「表」または「裏」のシーケンスで「表」が 100 回発生する可能性があることを意味します。

あなたができる唯一のことは、Random-instance を 1 回作成し、結果と共に生きることです。それ以外の場合は、Random を使用しないでください。

于 2012-11-12T10:31:31.810 に答える