случайный — C ++ бросок нескольких кубиков

Возможный дубликат:
Как часто мне следует вызывать srand () в приложении C ++?

Я пытаюсь реализовать бросание нескольких кубиков, но с моим кодом, даже если я создаю 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;
}

0

Решение

Я подозреваю, что ваш «начальный» ГСЧ использует шкалу времени, которая изменяется медленнее, чем как скоро создаются ваши объекты b1 — b3; т. е. ваш вызов time (0) не меняется так быстро, как создаются b1 — b3 и вызывают их метод roll ().

Вы можете использовать 3 разных времени начала в начале создания объекта, обеспечивая другой RNG, или использовать функции 1 RNG для создания однозначных сопоставлений для извлечения большего числа номеров RNG.

Так что одним словом — медленно! Добавление вызовов sleep () между вызовами может изменить ситуацию.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]