伪随机数生成

时间:2015-05-26 04:56:29

标签: c# random numbers

我在游戏中生成一个随机数:

System.Random rnd = new System.Random ();
int TileType = rnd.Next (0, 8);

问题是数字太随机了。这些数字与瓷砖有关,我没有得到20卷的特定瓷砖。

我需要制作一个生成“假”随机数的函数的指导。所以基本上我想确保我在x卷中生成每个tile类型。我想12可能是x的一个很好的起点,但我希望能够调整x。

如果有人能指出我正确的方向,我们将不胜感激。

更新

这是我目前正在思考的问题。谢谢@Golo这样指着我。想法?

  1. 创建我想要的数字列表。
  2. 添加x个随机数。
  3. 随机列表-var shuffledList = unshuffledList.OrderBy(x => rand.Next())。ToList();
  4. 抓住第一项并从列表中删除。
  5. 空时重新创建列表。
  6. 这应该意味着所有数字都会经常出现,但你仍然可以重复,所以它会保持随机的感觉。

2 个答案:

答案 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