Code:
/* card.c
gcc -std=c11 -o card card.c
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
enum Suit {
SPADES = 0,
HEARTS,
CLUBS,
DIAMONDS
};
enum Card_Value {
ACE = 1,
TWO,
THREE,
FOUR,
FIVE,
SIX,
SEVEN,
EIGHT,
NINE,
TEN,
JACK,
QUEEN,
KING
};
typedef struct
{
enum Suit suit;
enum Card_Value card;
} Card;
static void init_deck( Card * );
static void shuffle_deck ( Card * );
static char *get_card( Card * );
int main( void )
{
Card deck[52];
int i;
init_deck( deck );
srand( time(NULL) );
shuffle_deck ( deck );
for ( i = 0; i < 52; i++ )
printf( "%s ", get_card( deck + i ) );
putchar('\n');
}
void init_deck( Card *deckp )
{
int i, j, k;
k = 0;
for (i = SPADES; i <= DIAMONDS; i++)
for (j = ACE; j <= KING; j++)
deckp[k++] = (Card){ i, j };
}
#define swap_cards( a, b ) { Card tmp; tmp = (a); (a) = (b); (b) = tmp; }
void shuffle_deck ( Card *deckp )
{
int i, j;
Card tmp;
for ( i = 0; i < 52; i++ )
{
j = rand() % 52;
swap_cards( deckp[i], deckp[j] );
}
}
static char *get_card( Card *card )
{
static char *cards[][13] = {
/* spaces */ { u8"", u8"", u8"", u8"", u8"",
u8"", u8"", u8"", u8"", u8"",
u8"", u8"", u8"" },
/* hearts */ { u8"", u8"", u8"", u8"", u8"",
u8"", u8"", u8"", u8"", u8"",
u8"", u8"", u8"" },
/* clubss */ { u8"", u8"", u8"", u8"", u8"",
u8"", u8"", u8"", u8"", u8"",
u8"", u8"", u8"" },
/* diamonds */ { u8"", u8"", u8"", u8"", u8"",
u8"", u8"", u8"", u8"", u8"",
u8"", u8"", u8"" },
};
return cards[card->suit][card->card - 1];
}
Result: