2011-12-01 126 views
2

我需要用我的俄羅斯方塊遊戲 我用C正在編碼++有點幫助「人物」,這裏是我的問題:基於概率

俄羅斯方塊塊列表是7種: {'我','J','L','S','Z','O','T'}

我需要選擇上述字符中的一個,使得 S和Z以概率每個1/12,其他塊以 每個1/6選擇。

根據這些概率生成塊的最佳方法是什麼?

+0

可能重複的[加權隨機數](http://stackoverflow.com/questions/1761626/weighted-random-numbers) – Hasturkun

+0

如果你有一個有用的答案,接受它(見[問]] – Hasturkun

回答

4

像這樣創建的數組:

const char* block_distribution = {'I', 'I', 'J', 'J', 'L', 'L', 'S', 
            'Z', 'O', 'O', 'T', 'T'}; 

然後從使用均勻分佈的陣列選擇一個元素。

+0

Thankyou,我已經做出了陣列,現在我只需要從[0,11]中產生一個隨機的麻木,你知道我該怎麼做嗎?我不熟悉C++中的隨機數字生成 –

+0

@Shehryar這應該是給讀者留下的練習。這很容易查找幾乎每個參考手冊。 –

+0

@MannyD燁,已經明白了:P –

7

聲明和定義一個單項出現的S和Z的12項數組;其餘兩次發生兩次;並從中選擇一個隨機元素。

+0

Thankyou,那是我的想法:) –

1

把這些字符中的字符陣列和產生的隨機值從0到6與srand() 比你可以得到一個隨機

炭myArray的[] = { 'I', 'J',「L ','S','Z','O','T'};

,然後得到的值與

myArray的[(RAND()%5)+1]

+0

嗨約翰尼,我使用這種方法,如果我希望它們以等概率正確生成? –

+0

是的,初始srand()與主函數中的時間一起來防止總是相同的「隨機」值 – hnzjo

0

我能想到的最簡單的解決方案是使用數字範圍和僞隨機數字。

所以,首先分配範圍到每個字母:

I:0至1
Y:1至2
L:2〜3
S:3〜3.5
Z:3.5〜4
○:4〜5
T:5至6

則該範圍內0生成的僞隨機數爲6無論那個數量落在內,這是你選擇的字母的範圍的一部分。

不幸的是,我不知道C++,所以我不能提供代碼,但我認爲它不應該太難實現。