Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;多掷骰子_C++_Random_Dice - Fatal编程技术网

C++ C++;多掷骰子

C++ C++;多掷骰子,c++,random,dice,C++,Random,Dice,可能重复: 我正在尝试实现滚动多个骰子,但在我的代码中,即使我创建了2+个骰子,它们似乎总是滚动相同的数字。这是我的密码: Dice::Dice() {} void Dice::roll() { srand(time(0)); setFaceValue((rand() % MAX_FACE_VALUE + 1)); } int Dice::getFaceValue() { return currentFaceValue; } void Dice::setFaceValue(int va

可能重复:

我正在尝试实现滚动多个骰子,但在我的代码中,即使我创建了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;
}
intmain()
{
骰子d1、d2、d3;
d1.滚动();

cout我怀疑您的“种子”——RNG使用的时间刻度的变化速度比对象b1-b3创建的速度慢;也就是说,您的时间(0)调用的变化速度不如b1-b3创建的快,并调用它们的roll()方法

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


一句话,慢慢来!添加sleep()调用之间的调用可能会改变情况。

使用
srand
一次。
sleep
调用之间的
srand
调用是蹩脚的,不完全是随机的。好的想法是使用不同的种子值;如果你喜欢使用非确定性量子源,你可以这样做。祝你好运找到现成的。