Программирование на C и C++

Онлайн справочник программиста на C и C++

тасование и раздача колоды карт используя битные поля

Аватар пользователя merkul40
вс, 05/27/2018 - 21:06 -- merkul40
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

struct bitCard{
    unsigned face : 4;
    unsigned suit : 2;
    unsigned color : 1;
};

typedef struct bitCard Card;

void fillDeck(Card *);
void deal (Card *, const char *wFaceBase[], const char *wSuitBase[], const char *wColor[]);
void shuffle(Card *wDeck);

int main()
{
   Card deck[52];
   const char * faceBase [14] = {"Ace", "Deuce", "Three", "Four",//Номинал
                           "Five", "Six", "Seven", "Eight",
                           "Nine", "Ten", "Jack", "Queen", "King", "\n"};

   const char *suitBase[5] = {"Hearts", "Diamonds", "Clubs", "Spades", "\n"};
   const char *color[2] = {"Red", "Black"};

   srand (time(NULL));

   fillDeck(deck);
   shuffle(deck);
   deal(deck, faceBase, suitBase, color);

   return 0;
}

void fillDeck(Card *wDeck)
{
    int i;

    for (i = 0; i <= 51; i++)
    {
        wDeck[i].face = i % 13;
        wDeck[i].suit = i / 13;
        wDeck[i].color = i / 26;
        }
}

void deal(Card *wDeck, const char *wFaceBase[], const char *wSuitBase[], const char *wColor[])
{
    int k1, k2;

    for(k1 = 0, k2 = k1 + 26; k1 <= 25; k1++, k2++)
    {
        printf("%6s of %8s Color is %5s   ",
               wFaceBase[wDeck[k1].face], wSuitBase[wDeck[k1].suit], wColor[wDeck[k1].color]);

        printf("%6s of %8s Color is %5s\n",
                wFaceBase[wDeck[k2].face], wSuitBase[wDeck[k2].suit], wColor[wDeck[k2].color]);
        }
}

void shuffle(Card *wDeck)
{
    int i, j;
    Card temp;
    for (i = 0; i < 52; i++)
    {
        j = rand() % 52;
        temp = wDeck[i];
        wDeck[i] = wDeck[j];
        wDeck[j] = temp;
        }
    }