Комментарии:
srand(time(NULL));
Его следует вызывать только один раз во время запуска приложения.Это обычно лучше вызывать в main () при запуске.
int randNum = 0, numCards = 0, totalNumCards = 0;
bool selector = true, aisDone = false, bisDone = false;
Один идентификатор на строку.У каждого написанного стандарта кодирования есть это правило.Это также предотвращает некоторые тонкие ошибки, которые могут появиться при использовании указателей.Привыкайте к этому.
randNum = rand() % 3;
Нижние биты ранда являются наименьшим случайным.
rand Num = rand() / (MAX_RAND / 3.0);
Вопрос:
if(!aisDone && !bisDone)
{
This can execute
and set one of the above to isDone
Example:
Exit state aisDone == false bsiDone == false // OK
Exit state aisDone == true bsiDone == false // Will run below
Exit state aisDone == false bsiDone == ture // Will run below
}
if(aisDone && !bisDone)
{
Is this allowed to run if the first block above is run?
}
if(bisDone && !aisDone)
{
Is this allowed to run if the first block above is run?
}
Остальное слишком сложно иЯ не понимаю.
Я могу придумать более простые приемы, чтобы получить хорошую перетасовку колоды карт:
for(loop = 0 .. 51)
{
rand = rand(51 - loop);
swap(loop, loop+rand);
}
Вышеизложенное имитирует случайный выбор карты из колоды Aи положить его на верх колоды B (колода B изначально пуста).Когда цикл завершается, B теперь A (как это было сделано на месте).
Таким образом, каждая карта (из A) имеет одинаковую вероятность размещения в любой позиции в B.