【发布时间】:2010-04-19 10:26:16
【问题描述】:
最近我开始开发一个简单的游戏。它是我开发的早期版本的改进版本。游戏的成功很大程度上取决于不同模式下的随机数生成:
MODE1 - 真正随机模式
myRand(min,max,mode=1);
- 应该返回一个随机整数 b/w min & max。
MODE2 - 伪随机:令牌出袋模式
myRand(min,max,mode=2);
- 应该返回一个随机整数 b/w min & max。还应在内部跟踪返回的值,并且在所有其他值至少返回一次之前不得再次返回相同的值。
MODE3 - 伪随机:人类模式
myRand(min,max,mode=3);
- 应该返回一个随机整数 b/w min & max。随机化不应该是纯粹的数学随机,而是用户感知的随机。 How Humans see RANDOM。
* 假设代码是时间关键的(即欢迎任何性能优化)
* 伪代码可以,但我正在寻找 C 中的实现。
* 请保持简单。一个函数就足够了(这就是我要找的)
谢谢
【问题讨论】:
-
你不能在电脑上生成真正的随机数!嗯,你可以例如。通过这个设备cryptography.com/resources/whitepapers/IntelRNG.pdf
-
@Yacoby。是的 rand() 并不是真正随机的。因此,我正在尝试实现我自己的 myrand() 函数,如上所示。
-
对于模式 2,说在给出所有数字之前永远不要重复,这不是随机的。随机意味着您无法预测一个数字是否会重复。通过说他们不能重复,你放弃了一些关于后续数字的可能性的东西。因此并不是真正随机的。可能是你想要的,但它不能被称为随机。
-
所以 mode2 实际上是关于返回数字 min、min+1、...、max 的随机排列,而不是随机数序列
-
@Tesserex 那是一种伪随机模式。它用于像谁想成为百万富翁的测验这样的情况,在这种情况下,同一个问题不应该在一个会话中被问两次。我想我现在已经透露了我游戏的一部分...... ;-)