我正在制作俄罗斯方 block 并且有 7 个数字。 当我需要一个新图形时,我在 FigureFactory 类中这样做:
srand(time(NULL));
int shape = rand() % 7;
然后我从 FigureFactory 获取当前和下一个数字: the_figure = ff.getFigure(); next_figure = ff.getFigure();
结果是第一张图和下一张图一样。同样是快速按下空格键几次时得到的数字。
所以,rnd 生成器有点粗糙。 你能推荐我如何让它更敏感吗?
最佳答案
rand()
生成器没有任何问题。是您在每次调用 rand()
之前通过执行 srand(time(NULL))
明确要求它从相同的种子值重新启动。如果你这样做的频率足够高,time
将简单地返回相同的值,并且生成器将重置为相同的起点。难怪您会从 rand()
中获得相同的“随机”数字。
您不应该在每次调用 rand()
之前重新播种生成器。这个不成立。 rand()
的全部意义在于生成一个伪随机序列。所以,让它产生那个序列,不要重新启动它。如果您想根据当前时间随机化程序的行为,请在开始时仅重新播种一次。
您也可以稍后重新播种,但您应该在两次重新播种之间留出一些时间。如果重新播种之间的时间量是不可预测的,比如基于用户输入延迟等,那就更好了。
关于c++ - 如何锐化 rnd 生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16996615/