我需要用我的俄羅斯方塊遊戲 我用C正在編碼++有點幫助「人物」,這裏是我的問題:基於概率
俄羅斯方塊塊列表是7種: {'我','J','L','S','Z','O','T'}
我需要選擇上述字符中的一個,使得 S和Z以概率每個1/12,其他塊以 每個1/6選擇。
根據這些概率生成塊的最佳方法是什麼?
我需要用我的俄羅斯方塊遊戲 我用C正在編碼++有點幫助「人物」,這裏是我的問題:基於概率
俄羅斯方塊塊列表是7種: {'我','J','L','S','Z','O','T'}
我需要選擇上述字符中的一個,使得 S和Z以概率每個1/12,其他塊以 每個1/6選擇。
根據這些概率生成塊的最佳方法是什麼?
像這樣創建的數組:
const char* block_distribution = {'I', 'I', 'J', 'J', 'L', 'L', 'S',
'Z', 'O', 'O', 'T', 'T'};
然後從使用均勻分佈的陣列選擇一個元素。
Thankyou,我已經做出了陣列,現在我只需要從[0,11]中產生一個隨機的麻木,你知道我該怎麼做嗎?我不熟悉C++中的隨機數字生成 –
@Shehryar這應該是給讀者留下的練習。這很容易查找幾乎每個參考手冊。 –
@MannyD燁,已經明白了:P –
聲明和定義一個單項出現的S和Z的12項數組;其餘兩次發生兩次;並從中選擇一個隨機元素。
Thankyou,那是我的想法:) –
把這些字符中的字符陣列和產生的隨機值從0到6與srand()
比你可以得到一個隨機
炭myArray的[] = { 'I', 'J',「L ','S','Z','O','T'};
,然後得到的值與
myArray的[(RAND()%5)+1]
嗨約翰尼,我使用這種方法,如果我希望它們以等概率正確生成? –
是的,初始srand()與主函數中的時間一起來防止總是相同的「隨機」值 – hnzjo
我能想到的最簡單的解決方案是使用數字範圍和僞隨機數字。
所以,首先分配範圍到每個字母:
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++,所以我不能提供代碼,但我認爲它不應該太難實現。
可能重複的[加權隨機數](http://stackoverflow.com/questions/1761626/weighted-random-numbers) – Hasturkun
如果你有一個有用的答案,接受它(見[問]] – Hasturkun