伪随机数生成

本文关键字:随机数 | 更新日期: 2023-09-27 17:50:51

我正在生成一个随机数在我的游戏中使用:

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

问题是这些数字太随机了。这些数字与瓦片有关,我没有在20次滚动中获得特定的瓦片。

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

如果有人能给我指一下正确的方向,我将不胜感激。

这是我目前的想法。谢谢golo给我指这条路。想法吗?

  1. 创建一个我想要的号码列表
  2. 增加x个随机数
  3. Shuffle list -var shuffledList = unshuffledList。order (x => rand.Next()).ToList();
  4. 抓取第一项并从列表中删除。

这应该意味着所有的数字都会频繁出现,但你仍然可以重复,所以它将保持随机的感觉。

伪随机数生成

用你想要的数字创建一个列表,然后从这个列表中随机选择一个元素并删除它。

重复此操作,直到列表清空,然后重新开始。

这样,您将在n尝试中获得每个数字一次,但它们的顺序将是随机的。

我喜欢@Golo的回答,但只是添加一个不同的旋转…

听起来他的响应只会给你每个值一次。(即:在所有其他值都"滚动"一次之前,您将不会再次看到值n。)

为了保持事情真正的随机,同时稍微更可预测,尝试加权随机数生成器。

每次选择后,您可以将所选项的权重为0(减少它被下一个选择的机会,并增加选择"最老"未选择值的机会)

这些没有在。net中,但应该可以让你开始学习算法。

http://www.perlmonks.org/?node_id=242744
http://peterkellyonline.blogspot.com/2012/02/weighted-random-selection-in-php.html