home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / games / volume3 / miles / part02 / card.c next >
C/C++ Source or Header  |  1988-01-25  |  6KB  |  181 lines

  1. /* card.c */
  2. /* transportable    */
  3.  
  4. /**********************************************************************/
  5. /*                                                                    */
  6. /*           MM   MM  IIIIIII  L        L        EEEEEEE              */
  7. /*           M M M M     I     L        L        E                    */
  8. /*           M  M  M     I     L        L        EEEE                 */
  9. /*           M     M     I     L        L        E                    */
  10. /*           M     M  IIIIIII  LLLLLLL  LLLLLLL  EEEEEEE              */
  11. /*                                                                    */
  12. /*      BBBBBB    OOOOO   RRRRRR   NN    N  EEEEEEE   SSSSSS          */
  13. /*      B     B  O     O  R     R  N N   N  E        S                */
  14. /*      BBBBBB   O     O  RRRRRR   N  N  N  EEEEE     SSSSS           */
  15. /*      B     B  O     O  R    R   N   N N  E              S          */
  16. /*      BBBBBB    OOOOO   R     R  N    NN  EEEEEEE  SSSSSS           */
  17. /*                                                                    */
  18. /*                                                                    */
  19. /* Creation: Edmond Dujardin                                          */
  20. /*           (c) 1962 Parker Brothers, Inc.                           */
  21. /*                                                                    */
  22. /* Written by: Brett K. Carver                                        */
  23. /*             Hewlett-Packard, 1983.                                 */
  24. /*                                                                    */
  25. /* Copyright: (c) Brett K. Carver, Hewlett-Packard, 1986.             */
  26. /*                                                                    */
  27. /**********************************************************************/
  28.  
  29. #include "miles.h"
  30.  
  31. /**********************************/
  32. /* external procedure definitions */
  33. /**********************************/
  34.  
  35. extern rand();
  36.  
  37. /*********************************/
  38. /* external variable definitions */
  39. /*********************************/
  40.  
  41. extern int deck[20];            /* shufled deck of cards */
  42. extern int hand[2][15];         /* current status of players */
  43.  
  44. /**********************************************************************/
  45. /*                                                                    */
  46. /*              CARD DECK HANDLING UTILITIES                          */
  47. /*                                                                    */
  48. /**********************************************************************/
  49.  
  50. /*********************************************************/
  51. /* initilaizes a card_set structure with the card counts */
  52. /*********************************************************/
  53. initialize_card_set (cards)
  54. int cards[20];
  55. {
  56. cards[0]              = 101;    /* total cards */
  57. cards[extra_tank]     = 1;      /* safeties */
  58. cards[puncture_proof] = 1;
  59. cards[driving_ace]    = 1;
  60. cards[right_of_way]   = 1;
  61. cards[gasoline]       = 6;      /* remedies */
  62. cards[spare_tire]     = 6;
  63. cards[repairs]        = 6;
  64. cards[end_of_limit]   = 6;
  65. cards[roll]           = 14;
  66. cards[out_of_gas]     = 2;      /* hazards */
  67. cards[flat_tire]      = 2;
  68. cards[accident]       = 2;
  69. cards[speed_limit]    = 3;
  70. cards[stop]           = 4;
  71. cards[miles_200]      = 4;      /* distance */
  72. cards[miles_100]      = 12;
  73. cards[miles_75]       = 10;
  74. cards[miles_50]       = 10;
  75. cards[miles_25]       = 10;
  76. }
  77.  
  78. /********************************************/
  79. /* removes a card from the deck and returns */
  80. /* card if it could, 0 if it couldn't       */
  81. /********************************************/
  82. remove_card (cards,card)
  83. int cards[20];
  84. int card;
  85. {
  86. if (cards[card] > 0) {          /* any more cards */
  87.     cards[card]--;              /* decrement card count */
  88.     cards[0]--;                 /* decrement total card count */
  89.     return(card);
  90.     }
  91. else
  92.     return(0);
  93. }
  94.  
  95. /*********************************************/
  96. /* given a random number, return a card type */
  97. /*********************************************/
  98. get_card (number)
  99. int number;
  100. {
  101. number = number % 101;          /* 0 - 101 */
  102. if (number >= 28 && number <= 41)
  103.     return(roll);
  104. if (number >= 59 && number <= 70)
  105.     return(miles_100);
  106. if (number >= 71 && number <= 80)
  107.     return(miles_75);
  108. if (number >= 81 && number <= 90)
  109.     return(miles_50);
  110. if (number >= 91 && number <= 100)
  111.     return(miles_25);
  112. if (number >= 4 && number <= 9)
  113.     return(gasoline);
  114. if (number >= 10 && number <= 15)
  115.     return(spare_tire);
  116. if (number >= 16 && number <= 21)
  117.     return(repairs);
  118. if (number >= 22 && number <= 27)
  119.     return(end_of_limit);
  120. if (number >= 51 && number <= 54)
  121.     return(stop);
  122. if (number >= 55 && number <= 58)
  123.     return(miles_200);
  124. if (number >= 48 && number <= 50)
  125.     return(speed_limit);
  126. if (number >= 42 && number <= 43)
  127.     return(out_of_gas);
  128. if (number >= 44 && number <= 45)
  129.     return(flat_tire);
  130. if (number >= 46 && number <= 47)
  131.     return(accident);
  132. if (number == 0)
  133.     return(extra_tank);
  134. if (number == 1)
  135.     return(puncture_proof);
  136. if (number == 2)
  137.     return(driving_ace);
  138. if (number == 3)
  139.     return(right_of_way);
  140. while (TRUE) ;                  /* error case */
  141. }
  142.  
  143. /********************************************/
  144. /* deals a card, if no cards left, return 0 */
  145. /* 1. gets a random number                  */
  146. /* 2. gets the card                         */
  147. /* 3. removes the card from the deck        */
  148. /* 4. if successful, return card            */
  149. /********************************************/
  150. deal_card ()
  151. {
  152. int card;
  153. int more_cards;
  154. int i;
  155. more_cards = FALSE;
  156. for (i=0; i<20; i++)
  157.     if (deck[i] > 0)
  158.          more_cards = TRUE;
  159. if (more_cards)
  160.     while ((card = remove_card(&deck[0],get_card(rand()))) == 0)
  161.          ;
  162. else
  163.     card = 0;
  164. return(card);
  165. }
  166.  
  167. /*******************************************/
  168. /* checks to see if who has any cards left */
  169. /*******************************************/
  170. any_cards_left(who)
  171. int who;
  172. {
  173. int i;
  174. for (i=0; i<7; i++)
  175.     if (hand[who][i] > 0)
  176.          return(TRUE);
  177. return(FALSE);
  178. }
  179.  
  180. /*********** end of program **********/
  181.