Создайте структуру данных колоды карт в c ++, используя массивы - PullRequest
1 голос
/ 23 апреля 2020

Я пытаюсь создать массив размером 52, который содержит все карты в стандартной колоде игральных карт. Как бы я сделал это без ручной инициализации каждой из карт?

Вот мой код:

    int main()
    {
        int suit;
        int face;
        int deck[52] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52 };

        char suit[4] = { 'D','H','C','S' };

        int face[13] = { 1,2,3,4,5,6,7,8,9,10,10,10,10 };

        for (int count = 0; count < 52; count++) {
            face = deck[count] % 13;
            suit = deck[count] / 13;
        }



        return 0;
    }

Ответы [ 2 ]

3 голосов
/ 23 апреля 2020

Вот довольно простой способ сделать это, используя int s для представления масти и значения. Я думаю, что важно хранить вместе и грань и значение, чтобы у вас не было 2 разных контейнеров для отслеживания.

struct Card
{
  int suit, value;  
};

Теперь вы можете заполнить массив карт довольно легко:

Card cards[52];
for (int i = 0; i < 52; ++i)
{
  cards[i].suit = i % 4; // 4 suits
  cards[i].value = i % 13; // 13 values
}
2 голосов
/ 23 апреля 2020

Чтобы сделать это, я сначала создал бы два перечислимых типа для граней и наборов, например, так:

enum faces = {ACE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING};
enum suite = {DIAMONDS, SPADES, CLUBS, HEARTS};

Затем я бы создал структуру карт, чтобы объединить эти два типа.

struct Card {
   suite s;
   face f;
};

И, наконец, я бы создал класс с полной колодой, содержащей конструктор, который перебирает грани и типы комплектов и создает все различные комбинации. Он также включает в себя основные функции-члены c и переменные для доступа к колоде. Я также, вероятно, реализовал бы колоду как вектор.

Вот как будет работать конструктор:

for(int i = 0; i < 4; i++) {
   for(int j = 0;j < 13; j++) {
      Card temp;
      temp.s = i;
      temp.f = j;
   }
}

РЕДАКТИРОВАТЬ: И если вы собираетесь их перемешать, Вы можете просто добавить функцию-член для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...