我在游戏中生成一个随机数:
System.Random rnd = new System.Random ();
int TileType = rnd.Next (0, 8);
问题是数字太随机了。这些数字与瓷砖有关,我没有得到20卷的特定瓷砖。
我需要制作一个生成“假”随机数的函数的指导。所以基本上我想确保我在x卷中生成每个tile类型。我想12可能是x的一个很好的起点,但我希望能够调整x。
如果有人能指出我正确的方向,我们将不胜感激。
更新
这是我目前正在思考的问题。谢谢@Golo这样指着我。想法?
这应该意味着所有数字都会经常出现,但你仍然可以重复,所以它会保持随机的感觉。
答案 0 :(得分:4)
创建一个包含您想要的数字的列表,然后从该列表中随机选择一个元素并将其删除。
重复此操作,直至列表为空,然后重新开始。
通过这种方式,您可以在n
次尝试中获得每个号码,但他们的顺序将是随机的。
答案 1 :(得分:2)
我喜欢@ Golo的答案,但只是为了添加一个不同的旋转。 。
听起来他的回答只会给你一次价值。 (即:除非所有其他值都是"滚动"一次,否则您不会再看到值n。)
为了让事情真正随机而略微更可预测,请尝试使用加权随机数生成器。
在每次选择之后,您可以减去所选项目的权重(降低下一次选择项目的机会,并增加选择"最早的"未选择的值的机会。)
这些不在.Net中,但应该让你开始使用算法。
http://www.perlmonks.org/?node_id=242744
http://peterkellyonline.blogspot.com/2012/02/weighted-random-selection-in-php.html