2012-04-26 10 views
6

が、私はそれを考え出すことなく、時代のカップルに見てきましたトリッキーな質問があります下よりも頻繁に表示されます。ランダム機能:高い値が

バックストーリー:私は、動物/怪物などと戦うテキストベースのRPGゲームを作っています。それはあなたが毎回お互いに多くのヒットポイントを打つ他のゲームと同じように機能します。

問題:私はレベル、鎧などに応じて、ヒットの最終的な値を生成するためにPHPでランダム機能を使用しています。しかし、より高い値(最大ヒットのような)が低い値よりも少なく表示されるようにしたいと思います。

これは、例えば、グラフである:

Example graph

どのように私は、この使用してPHPとのrand関数のようなものを再現することができますか? rand(1,100)と入力すると、すべての数字が選択される可能性は同じです。

私の考えはこれです:第二度(または二次関数)を作成し、計算を行うために乱数(X)を使用します。

は私のようなこの作品はしたいですか?

質問は少しトリッキーで、あなたはより多くの情報と詳細をたいなら、私に知らせてください。

+1

[乱数ジェネレータをバイアスする方法](http://stackoverflow.com/questions/1858364/how-to-bias-a-random-number-generator)をご覧ください。 – deceze

+0

より高い値を低い値よりも少なく表示する場合は、グラフを反転する必要はありませんか?私はX軸が数字であり、Y軸が現れることを推測しています。 – pomeh

答えて

1

は、この美しい記事をご覧ください: http://www.redblobgames.com/articles/probability/damage-rolls.html

が転がるサイコロと結果の割合を考慮し、対話型の図があります。 これは非常に便利です。乱数を転がり、この種の

ご注意:

roll1 = rollDice(2, 12); 
roll2 = rollDice(2, 12); 
damage = min(roll1, roll2); 

これは、あなたが探して何を与える必要があります。

0

OK、ここに私の考えだ:

は、あなたが要素の配列を持っているとしましょう(a,b,c,d)あなたがランダムにそれらのいずれかを選ぶことはありません。ランダム要素インデックスを取得するためにrand(1,4)を実行すると、すべての要素が同じように表示される可能性があります。 (25%)

ここで、この配列を取ってみましょう:(a,b,c,d,d)

は、ここではまだ4つの要素を持っていますが、ないそれらの一つ一つは、表示されるように同じチャンスを持っています。

  • 、B、C:20%
  • D:40%

か、のはこの配列をみましょう:

(1,2,3,...,97,97,97,98,98,98,99,99,99,100,100,100,100)

ヒント:この方法では、乱数生成アルゴリズムにバイアスをかけますが、実際にはそれぞれの出現確率(または数値の範囲)を設定します。


だから、それは私がそれについて行く方法は次のとおりです。あなたは1から100までの数字をしたい場合は(高い数値がより頻繁に登場して、1から1000までの乱数を取得

とを関連付け広い範囲。例:

rand = 800-1000 => rand/10 (80->100) 
rand = 600-800 => rand/9 (66->88) 
... 

またはそのような何か。(あなたが...モジュロまたは何、あなたが想像任意の数学演算を使用して、あなたのアルゴリズムで遊ぶことができる)。私はあなたが私のアイデアを得る願っています。

幸運を祈る! :-)

関連する問題