Я только начал работать в средней школе, и я пытаюсь сделать карточную игру.
Мой учитель хочет, чтобы мы создали функцию, которая перетасовывает и раздает карты случайным образом (пользователь может ввести количество колод, которые они хотят использовать). Я много часов думал о том, как это сделать, и предложил несколько идей. Я хочу представить каждую карту со значением int, а затем присвоить значение карты на основе этого номера. Для этого я в основном хочу просто разделить число по модулю 4, чтобы получить значение 1-4 (значение костюма).
Проблема, однако, в том, что я не знаю, как назначить ценность карты (Ace, Two, Three.... и т.д.). Я думаю, что лучший способ сделать это - это собрать все по кратным 4. Я был долгое время думая и до сих пор не поняв, как это сделать. Любые идеи очень помогли бы. Спасибо!
Возьмите номер mod 4 для костюма (число от 0 до 3). Возьмите число, деленное на 4 для значения (задание числа от 0 до 12, которое вы можете добавить 1 для того, чтобы иметь значение от 1 до 13). Помните, что целочисленное деление вернет "пол" математически точного ответа.
Для нескольких колод вы сначала разделите на 4, затем возьмите этот мод 13 (затем добавьте 1, если хотите).
Общий алгоритм перетасовки (в C):
void shuffle_deck(int *deck) {
for (int i = DECKSIZE - 1; i > 1 ; --i) {
int r = rand() % (i + 1);
int t = deck[r];
deck[r] = deck[i];
deck[i] = t;
}
}
std::swap
а всю функцию можно заменить вызовомstd::shuffle
илиstd::random_shuffle
.