伪随机数生成
本文关键字:随机数 | 更新日期: 2023-09-27 17:50:51
我正在生成一个随机数在我的游戏中使用:
System.Random rnd = new System.Random ();
int TileType = rnd.Next (0, 8);
问题是这些数字太随机了。这些数字与瓦片有关,我没有在20次滚动中获得特定的瓦片。
我需要指导制作一个生成"假"随机数的函数。所以基本上我想确保在x次滚动中生成每种类型的贴图。我想12可能是x的一个很好的起点,但我希望能够调整x。
如果有人能给我指一下正确的方向,我将不胜感激。这是我目前的想法。谢谢golo给我指这条路。想法吗?
- 创建一个我想要的号码列表
- 增加x个随机数
- Shuffle list -var shuffledList = unshuffledList。order (x => rand.Next()).ToList();
- 抓取第一项并从列表中删除。
这应该意味着所有的数字都会频繁出现,但你仍然可以重复,所以它将保持随机的感觉。
用你想要的数字创建一个列表,然后从这个列表中随机选择一个元素并删除它。
重复此操作,直到列表清空,然后重新开始。
这样,您将在n
尝试中获得每个数字一次,但它们的顺序将是随机的。
我喜欢@Golo的回答,但只是添加一个不同的旋转…
听起来他的响应只会给你每个值一次。(即:在所有其他值都"滚动"一次之前,您将不会再次看到值n。)
为了保持事情真正的随机,同时稍微更可预测,尝试加权随机数生成器。
每次选择后,您可以将所选项的权重为0(减少它被下一个选择的机会,并增加选择"最老"未选择值的机会)
这些没有在。net中,但应该可以让你开始学习算法。
http://www.perlmonks.org/?node_id=242744
http://peterkellyonline.blogspot.com/2012/02/weighted-random-selection-in-php.html