#include <stdio.h>
#include <stdlib.h>
#include <time.h>

/* Structure to hold information about playing cards */
typedef struct {
    int suit;   /* The suit of the playing card */
    int value;  /* The value of the playing card */
} CARD;

/* Set up an integer to represent each suit */
const int CLUBS = 4, DIAMONDS = 3, HEARTS = 2, SPADES= 1;
/* Set up integers to represent non numeric cards */
const int ACE = 1, JACK = 11, QUEEN = 12, KING = 13;

void print_card(CARD);  // Print a single card in two characters
void shuffle_deck(CARD []); // Shuffle a deck of 52 cards


int main(int argc, char *argv[])
{
	CARD deck[52];
	int i,j,k;

    srand(time(NULL));  // Seed numbers

	k= 0; // k holds current card
	for (i= 1; i <= 4; i++) {  // Loop over suits
		for (j=1; j < 14; j++) { // Loop over values
			deck[k].suit=i;
			deck[k].value=j;
			k++;
		}
	}
	shuffle_deck(deck);
	for (i= 0; i < 52; i++) {
		print_card(deck[i]);
		printf (" ");
	}
	return 0;
}

void print_card(CARD my_card)
/* Prints out a single playing card */
{
	switch (my_card.value) {
	case(ACE):
		printf("A");
		break;
	case(KING):
		printf("K");
		break;
	case(QUEEN):
		printf("Q");
		break;
	case(JACK):
		printf("J");
		break;
	case(10):
		printf("T");
		break;
	default:
		printf("%d",my_card.value);
	}
	switch (my_card.suit) {
	case(SPADES):
		printf("S");
		break;
	case(HEARTS):
		printf("H");
		break;
	case(DIAMONDS):
		printf("D");
		break;
	case(CLUBS):
		printf("C");
		break;
	default:
		printf ("No such suit %d\n",my_card.suit);
		exit(-1);
	}

}

void shuffle_deck(CARD deck[])
{
	CARD tmpcard;
	int i,j,k;

	// Make 1000 "shuffles"
	for (i= 0; i < 1000; i++) {
		j= rand()%52;
		k= rand()%52;
		tmpcard= deck[j];
		deck[j]= deck[k];
		deck[k]= tmpcard;
	}
}
