Я использую эту функцию для генерации случайных перестановок цифр 0,1,2,3, которые переводится на перемещения агентами в двумерной сетке для игры Tron.Движения случайного агента C++ идентичны
srand(time(nullptr));
vector<int> permutationMoves = { 0, 1, 2, 3 };
auto currentIndexCounter = permutationMoves.size();
for (auto iter = permutationMoves.rbegin(); iter != permutationMoves.rend();
iter++, --currentIndexCounter) {
int randomIndex = rand() % currentIndexCounter;
if (*iter != permutationMoves.at(randomIndex)) {
swap(permutationMoves.at(randomIndex), *iter);
}
}
Однако, у меня есть два вопроса:
- Если два агента делают последовательные шаги, которые они делают то же самое движение из-за того, что случайное число зависит от времени.
- Если агенты играют несколько раундов друг за другом, ходы обоих агентов идентичны ходам в предыдущей игре. Таким образом, сетка всегда одна и та же, и 1 агент в большинстве случаев выигрывает 95% -100% игр.
Вся помощь будет очень признательна, спасибо!
Пожалуйста, вставьте код здесь. – amchacon
Вызов 'srand()' один раз в начале программы, а не каждый раз в функции. – Barmar
Я просто оставлю [это] (https://channel9.msdn.com/Events/GoingNative/2013/rand-Considered-Harmful) здесь ... –