C ++多个骰子卷

时间:2012-12-04 05:28:53

标签: c++ random dice

  

可能重复:
  How often should I call srand() in a C++ application?

我正在尝试使用我的代码来实现滚动多个骰子,即使我创建了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;
}

1 个答案:

答案 0 :(得分:1)

我怀疑你的'种子'RNG使用的时间尺度变化比创建对象b1-b3的时间要慢;即你的时间(0)调用没有像b1-b3那样快速地改变并调用他们的roll()方法。

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

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