我的代码处理两个骰子(一个10面的“公平”骰子和一个20面的“公平”骰子),并使用类,数组和随机数生成器生成两个骰子及其总和的随机掷骰,但是所有我的代码显示为“ You roll:18”。那不是很随机。
#include <iostream>
#include <stdlib.h>
using namespace std;
class Dice
{
private:
int rollDice[2] = {};
public:
void setval1(int x)
{
rollDice[0] = x;
}
void setval2(int y)
{
rollDice[1] = y;
}
double getVal1()
{
return rollDice[0];
}
double getVal2()
{
return rollDice[1];
}
};
int main()
{
Dice a;
a.setval1(rand()%9+1);
a.setval2(rand()%19+1);
cout << "You rolled: " << a.getVal1() + a.getVal2();
}
答案 0 :(得分:0)
您需要播种使用的伪随机数生成器 std :: rand()。如果在调用srand()之前使用rand(),则rand() 的行为就像是用srand(1)播种的。
每次rand()用相同的种子播种时,它必须产生 相同的值顺序。
在C ++中正确用法如下:
std::srand(std::time(nullptr)); // use current time as seed for random generator
int random_variable = std::rand();
如果您要进行特定的统计分布,则应查看标题随机documentation