home *** CD-ROM | disk | FTP | other *** search
/ Archive Magazine 1997 / ARCHIVE_97.iso / discs / mag_discs / volume_03 / issue02 / c2 < prev    next >
Text File  |  1989-10-25  |  3KB  |  150 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4.     typedef int Card;
  5.  
  6.  
  7.     typedef int Suit;
  8.     typedef int Rank;
  9.  
  10.  
  11.     #define CLUBS 1
  12.     #define DIAMONDS 2
  13.     #define SPADES 3
  14.     #define HEARTS 4
  15.     #define FIRST_SUIT 1
  16.     #define LAST_SUIT 4
  17.  
  18.  
  19.     Card make_card( Suit suit, Rank rank )
  20.         {
  21.         return (suit << 4) + rank;
  22.         }
  23.  
  24.  
  25.     Suit card_suit( Card c )
  26.         {
  27.         return c >> 4;
  28.         }
  29.  
  30.  
  31.      Rank card_rank( Card c )
  32.         {
  33.         return c & 0xf;
  34.         }
  35.  
  36.      Card pack[52];
  37.  
  38.  
  39.     void initialise_pack_old(void)
  40.         {
  41.         Suit s;
  42.         Rank r;
  43.         int i = 0;
  44.         for (s = FIRST_SUIT; s <= LAST_SUIT; s = s + 1)
  45.             for (r = 1; r < 14; r = r + 1)
  46.                 {
  47.                 pack[ i ] = make_card( s, r );
  48.                 i = i + 1;
  49.                 }
  50.         }
  51.  
  52.     void initialise_pack(void)
  53.         {
  54.         Suit s;
  55.         Rank r;
  56.         int i = 0;
  57.         for (s = FIRST_SUIT; s <= LAST_SUIT; s++)
  58.             for (r = 1; r < 14; r++)
  59.                 pack[ i++ ] = make_card( s, r );
  60.         }
  61.  
  62.  
  63.     void shuffle_pack(void)
  64.         {
  65.         int i;
  66.         for (i = 51; i != 0; i--)
  67.             {
  68.             int j = rand() % (i + 1);
  69.             if (i != j)
  70.                 {
  71.                 Card c = pack[i];
  72.                 pack[i] = pack[j];
  73.                 pack[j] = c;
  74.                 }
  75.             }
  76.         }
  77.  
  78.  
  79.     Card players[4][13];
  80.  
  81.     void deal_cards(void)
  82.         {
  83.         int i = 0, player, card;
  84.         for (player = 0; player < 4; player++)
  85.             for (card = 0; card < 13; card++)
  86.                 players[player][card] = pack[i++];
  87.         }
  88.  
  89.  
  90.     char *ranks = "?A23456789TJQK";
  91.  
  92.         
  93.     char *suits[] = 
  94.         {
  95.         "(no suit)",
  96.         "clubs",
  97.         "diamonds",
  98.         "spades",
  99.         "hearts"
  100.         };
  101.  
  102.  
  103.     void print_card( Card c )
  104.         {
  105.         printf
  106.             ( 
  107.             "%c of %s", 
  108.             ranks[ card_rank( c ) ], 
  109.             suits[ card_suit( c ) ]
  110.             );
  111.         }
  112.  
  113.     void print_pack(void)
  114.         {
  115.         int i;
  116.         for (i = 0; i < 52; i++) 
  117.             {
  118.             print_card( pack[i] );
  119.             printf( "\n" );
  120.             }
  121.         }
  122.  
  123.     void print_hands(void)
  124.         {
  125.         int player, i;
  126.         for (player = 0; player < 4; player++)
  127.             {
  128.             printf( "Hand for player %d\n", player );
  129.             for (i = 0; i < 13; i++)
  130.                 {
  131.                 printf( "   " );
  132.                 print_card( players[player][i] );
  133.                 printf( "\n" );
  134.                 }
  135.             }
  136.         }
  137.  
  138.  
  139.     int main( int argc, char *argv[] )
  140.         {
  141.         initialise_pack();
  142.         shuffle_pack();
  143.         printf( "Shuffled pack:\n" );
  144.         print_pack();
  145.         deal_cards();
  146.         printf( "Dealt hands:\n" );
  147.         print_hands();
  148.         }
  149.  
  150.