home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / gamtlk11.zip / source.zip / BJCPP / HAND.CPP < prev    next >
C/C++ Source or Header  |  1999-06-04  |  4KB  |  249 lines

  1. //
  2. // File: Hand.CPP
  3. //
  4. // Handles processing of hands
  5. //
  6. #include <icanvas.hpp>
  7. #include <string.h>
  8. #include <time.h>
  9. #include <stdlib.h>
  10. #include "Blackjack.HPP"
  11. #include "Blackjack.H"
  12.  
  13. //
  14. // CARD::CARD(char CValue=0)
  15. //
  16. // Card constructor
  17. CARD::CARD(char CValue=0)
  18. {
  19.    Value=CValue;
  20. }
  21.  
  22. //
  23. // CARD::~CARD()
  24. //
  25. // Destructor for card
  26. CARD::~CARD()
  27. {
  28. }
  29.  
  30. //
  31. // char CARD::faceOf()
  32. //
  33. // Returns face value of a card
  34. //
  35. char CARD::faceOf()
  36. {
  37.    return ((Value-1) % 13)+1;
  38. }
  39.  
  40. //
  41. // CARD::suitOf()
  42. //
  43. // Returns the suit of a card
  44. //
  45. char CARD::suitOf()
  46. {
  47.    return (Value-1)/13;
  48. }
  49.  
  50. //
  51. // BJHAND::BJHAND()
  52. //
  53. // Constructor for a hand
  54. //
  55. BJHAND::BJHAND()
  56. {
  57.    Bet=0;
  58.    Value=0;
  59.    NumCards=0;
  60.    return;
  61. }
  62.  
  63. //
  64. // bool BJHAND::startHand(int Bet)
  65. //
  66. // Starts a new hand deal
  67. //
  68. bool BJHAND::startHand(int Bet=0)
  69. {
  70.    this->Bet=Bet;
  71.    NumCards=0;
  72.  
  73.    return true;
  74. }
  75.  
  76. //
  77. // bool BJHAND::addCard(CARD NewCard)
  78. //
  79. // Adds a card to the current hand
  80. //
  81. bool BJHAND::addCard(CARD NewCard)
  82. {
  83.    char  Temp;
  84.  
  85.    if(NumCards>=MAX_CARDS) return false;
  86.  
  87.    // Add sound effects here
  88.  
  89.    Card[NumCards++]=NewCard;
  90.  
  91.    if(NewCard.faceOf()==ACE) Value|=ACE_VALUE;
  92.    Value+=NewCard.faceOf();
  93.  
  94.    if(NumCards>=MAX_CARDS) return false;
  95.  
  96.    return true;
  97. }
  98.  
  99. //
  100. // BJHAND::~BJHAND()
  101. //
  102. // Destructor for BJHAND
  103. //
  104. BJHAND::~BJHAND()
  105. {
  106. }
  107.  
  108. //
  109. // BJPlayer::BJPlayer()
  110. //
  111. // Constructor for a player
  112. //
  113. BJPlayer::BJPlayer()
  114. {
  115.    Bank=0;
  116.    Wager=0;
  117.    NumHands=0, HandNum=0;
  118. }
  119.  
  120. //
  121. // BJPlayer::~BJPlayer()
  122. //
  123. // Destructor for BJPlayer
  124. //
  125. BJPlayer::~BJPlayer()
  126. {
  127. }
  128.  
  129. //
  130. // void BJPlayer::addMoney(float Money=DEF_BUYIN)
  131. //
  132. // Processed when player wishes to buy in for more money
  133. //
  134. void BJPlayer::addMoney(float Money=DEF_BUYIN)
  135. {
  136.    Bank+=Money;
  137. }
  138.  
  139. //
  140. // float BJPlayer::cashOut()
  141. //
  142. // Called when player cashes out.
  143. //
  144. float BJPlayer::cashOut()
  145. {
  146.    float Temp=Bank;
  147.    Bank=0;
  148.    return Temp;
  149. }
  150.  
  151. //
  152. // bool BJPlayer::newHand(int Bet)
  153. //
  154. // Called to initiate a new hand for the player
  155. //
  156. bool BJPlayer::newHand(int Bet)
  157. {
  158.    // Eliminate any and all previous hands
  159.    NumHands=1; HandNum=1;
  160.    Bank-=Bet;
  161.    Wager=Bet;
  162.    Hand[0].startHand(Bet);
  163.  
  164.    return true;
  165. }
  166.  
  167. //
  168. // bool BJPlayer::addCard(CARD NewCard)
  169. //
  170. // Deals another card to the player
  171. //
  172. bool BJPlayer::addCard(CARD NewCard)
  173. {
  174.    if(!NumHands) return false;
  175.  
  176.    return Hand[HandNum-1].addCard(NewCard);
  177. }
  178.  
  179. //
  180. // SHOE::SHOE(BJACK *BJFrame)
  181. //
  182. // Constructor for the shoe class
  183. //
  184. SHOE::SHOE(BJACK *BJFrame) : ShoeClass(1000), frame(BJFrame), Marker(0), TotalSize(0)
  185. {
  186. }
  187.  
  188. //
  189. // bool SHOE::shuffle(int NumDecks)
  190. //
  191. // Shuffles shoe
  192. //
  193. bool SHOE::shuffle(int NumDecks=DEF_DECKS)
  194. {
  195.    char  Count[DECKSIZE+1];
  196.    unsigned long  FillCount=DECKSIZE*NumDecks;
  197.    char  TempValue;
  198.  
  199.    // Set number to initial value
  200.    memset(Count, NumDecks, sizeof(Count));
  201.  
  202.    // Empty the existing shoe
  203.    removeAll();
  204.  
  205.    // Seed randomizer
  206.    srand(time(NULL));
  207.  
  208.    TotalSize=FillCount;
  209.    Marker=FillCount*0.15;  // Make settable later
  210.  
  211.    while(FillCount)
  212.    {
  213.       for(TempValue=0;!TempValue || TempValue>DECKSIZE;TempValue=DECKSIZE*rand()/RAND_MAX+1);
  214.  
  215.       if(Count[TempValue])
  216.       {
  217.          push(CARD(TempValue));
  218.          Count[TempValue]--;
  219.          FillCount--;
  220.       }
  221.    }
  222.    return true;
  223. }
  224.  
  225. //
  226. // CARD SHOE::drawCard()
  227. //
  228. // Draws a card from the shoe
  229. //
  230. CARD SHOE::drawCard()
  231. {
  232.    CARD  TempCard;
  233.  
  234.    pop(TempCard);
  235.  
  236.    return TempCard;
  237. }
  238.  
  239. //
  240. // bool SHOE::pastMarker()
  241. //
  242. // Tests whether shoe is emptied past the marker
  243. //
  244. bool SHOE::pastMarker()
  245. {
  246.    if(Marker<=numberOfElements()) return true;
  247.  
  248.    return false;
  249. }