2011-12-01 88 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++,所以我不能提供代码,但我认为它不应该太难实现。