2012-04-26 83 views
6

我有一個棘手的問題,我已經仔細研究過幾次而沒有發現它。隨機函數:較高的值出現的頻率低於較低的值

一些背景故事:我正在製作一個基於文本的RPG遊戲,玩家可以對抗動物/怪物等。它可以像任何其他遊戲一樣,在每一輪擊中對方的多個生命值。

問題:我在php中使用隨機函數來生成命中的最終值,具體取決於等級,護甲等。但是我希望更高的值(比如最大值命中)比低值更少出現。

這是一個例子,圖中:

Example graph

我怎樣才能重現像這樣使用PHP和蘭特功能?當輸入rand(1,100)時,每個號碼都有被選中的機會相等。

我的想法是這樣的:做一個二次(或二次函數)並使用隨機數(x)來進行計算。

這個工作就像我想要的?

這個問題有點棘手,請讓我知道如果你想了解更多信息和細節。

+1

看看[如何偏向隨機數發生器](http://stackoverflow.com/questions/1858364/how-to-bias-a-random-number-generator)。 – deceze 2012-04-26 11:33:02

+0

如果您希望較高的值出現的頻率低於較低的值,那麼該圖應該反轉爲否?我猜測X軸是數字,Y軸有機會出現。 – pomeh 2012-04-26 12:28:45

回答

0

OK,這是我的想法:

比方說,你已經有了元素的數組(a,b,c,d),你會不會對隨機挑選其中之一。做一個rand(1,4)來獲得隨機元素索引,意味着所有元素都有相同的出現機會。 (25%)

現在讓我們來看看這個數組:(a,b,c,d,d)

在這裏,我們仍然有4個元素,但不是每個人都有平等的機會出現。

  • A,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) 
... 

或者類似的東西。(你可以使用任何數學運算你想象,模或任何...和你玩的算法),我希望你明白我的想法。

祝你好運! :-)