0

可能重复:
我应该多久在 C++ 应用程序中调用 srand()?

我正在尝试实现滚动多个骰子,但是使用我的代码,即使我创建了 2 个以上的骰子,它们似乎总是滚动相同的数字。这是我的代码:

Dice::Dice() {}

void Dice::roll() 
{
srand(time(0));
setFaceValue((rand() % MAX_FACE_VALUE + 1));
}

int Dice::getFaceValue()
{
return currentFaceValue;
}

void Dice::setFaceValue(int value) 
{
currentFaceValue = value;
}

如果我将它编程到我的驱动程序中,我会得到相同的数字 3 次。

int main()
{
Dice d1, d2, d3;
d1.roll();
cout << d1.getFaceValue() << endl;

d2.roll();
cout << d2.getFaceValue() << endl;

d3.roll();
cout << d3.getFaceValue() << endl;
}
4

1 回答 1

1

我怀疑您的“播种”RNG 使用的时间尺度变化比创建对象 b1 - b3 的速度要慢;即您的 time(0) 调用不会像创建 b1 - b3 并调用它们的 roll() 方法那样快。

您可以在开始时使用 3 个不同的种子时间,在对象创建时确保使用不同的 RNG,或者使用 1 RNG 的函数进行 1 对 1 值映射以提取更多 RNG 编号。

所以一句话,慢慢来!在调用之间添加 sleep() 调用可能会改变一些事情。

于 2012-12-04T05:35:04.380 回答