/*
 * cards_1.c
 * This program picks up five cards and prints them.
 */

#include <stdio.h>
#include <stdlib.h>

/* The value of a card: A, 2-10, J, Q and K: */
enum Value
{
  ACE = 1,
  TWO,
  THREE,
  FOUR,
  FIVE,
  SIX,
  SEVEN,
  EIGHT,
  NINE,
  TEN,
  JACK,
  QUEEN,
  KING
};

/* The possible suits. */
enum Suit
{
  HEARTS,
  SPADES,
  DIAMONDS,
  CLUBS,

  N_SUITS
};

#define N_CARDS 5

int main ()
{
  enum Value vals[N_CARDS];
  enum Suit  suits[N_CARDS];
  const char *suit_names[N_SUITS] = {"hearts", "spades", "diamonds", "clubs"};
  int        is_unique;
  int        i, j;

  for (i = 0; i < N_CARDS; i++)
  {
    /* Pick up the current card. */
    do
    {
      vals[i] = (enum Value)(1 + rand() % 13);
      suits[i] = (enum Suit)(rand() % N_SUITS);
      
      /* Make sure the card is unique. */
      is_unique = 1;
      for (j = 0; j < i; j++)
      {
        if (vals[i] == vals[j] && suits[i] == suits[j])
        {
          /* We already have this card: */
          is_unique = 0;
          break;
        }
      }
    } while (! is_unique);

    /* Print the card. */
    switch (vals[i])
    {
    case ACE:
      printf ("A of %s", suit_names[suits[i]]);
      break;

    case JACK:
      printf ("J of %s", suit_names[suits[i]]);
      break;

    case QUEEN:
      printf ("Q of %s", suit_names[suits[i]]);
      break;

    case KING:
      printf ("K of %s", suit_names[suits[i]]);
      break;

    default:
      printf ("%d of %s", vals[i], suit_names[suits[i]]);
    }
    printf ("\n");
  }

  return (0);
}

