Группировка чисел по кратным 4

0

Я только начал работать в средней школе, и я пытаюсь сделать карточную игру.

Мой учитель хочет, чтобы мы создали функцию, которая перетасовывает и раздает карты случайным образом (пользователь может ввести количество колод, которые они хотят использовать). Я много часов думал о том, как это сделать, и предложил несколько идей. Я хочу представить каждую карту со значением int, а затем присвоить значение карты на основе этого номера. Для этого я в основном хочу просто разделить число по модулю 4, чтобы получить значение 1-4 (значение костюма).

Проблема, однако, в том, что я не знаю, как назначить ценность карты (Ace, Two, Three.... и т.д.). Я думаю, что лучший способ сделать это - это собрать все по кратным 4. Я был долгое время думая и до сих пор не поняв, как это сделать. Любые идеи очень помогли бы. Спасибо!

Теги:
shuffle

1 ответ

2
Лучший ответ

Возьмите номер 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;
    }
}
  • 0
    Вы можете заменить последние три строки с помощью std::swap а всю функцию можно заменить вызовом std::shuffle или std::random_shuffle .
  • 0
    Согласовано. Это функция Си.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню