Advertisement
alch1337

Blackjack v.0.1

Apr 5th, 2012
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.18 KB | None | 0 0
  1. //=====header.h=====\\
  2. #include<iostream>
  3. #include<string>
  4. #include<vector>
  5. #include<cctype>
  6.  
  7. enum GAMESTATE {GAME, PL_WIN, PL_LOSE, WHATNOW, DRAW};
  8. extern GAMESTATE GSState;
  9.  
  10. extern std::string sSuits[];
  11. extern std::string sRanks[];
  12.  
  13. inline int random(int nMin, int nMax)
  14. {
  15.     return rand() % (nMax - nMin + 1) + nMin;
  16. }
  17.  
  18. class CCard
  19. {
  20. private:
  21.     std::string m_sSuit;
  22.     std::string m_sRank;
  23.     int n_nValue;
  24. public:
  25.     CCard(std::string suit, std::string rank);
  26.     CCard();
  27.     std::string getSuit();
  28.     std::string getRank();
  29.     int getValue();
  30.     void setValue(int nValue);
  31. };
  32.  
  33. class CDealer
  34. {
  35. private:
  36.     std::vector<CCard> deHand;
  37.     int n_nValue;
  38. public:
  39.     CDealer();
  40.     std::vector<CCard> getHand();
  41.     void hit();
  42.     void move();
  43.     int getHandValue();
  44. };
  45.  
  46. class CPlayer
  47. {
  48. private:
  49.     std::vector<CCard> myHand;
  50.     int n_nValue;
  51. public:
  52.     CPlayer();
  53.     std::vector<CCard> getHand();
  54.     void hit();
  55.     void check();
  56.     int getHandValue();
  57. };
  58.  
  59. inline std::string toLowerCase(std::string &str)
  60. {
  61.     const int length = str.length();
  62.     for(int i=0; i < length; ++i)
  63.     {
  64.         str[i] = std::tolower(str[i]);
  65.     }
  66.     return str;
  67. }
  68.  
  69. extern CCard giveCard();
  70.  
  71. //class CDeck
  72. //{
  73. //private:
  74. //  int n_nX;
  75. //public:
  76. //  CCard aDeck[52];
  77. //  CDeck()
  78. //  {
  79. //      n_nX = 0;
  80. //      for (int i = 0; i < 4; i++) {
  81. //          for (int j = 0; j < 13; j++) {
  82. //          aDeck[n_nX] = CCard(sSuits[i], sRanks[j]);
  83. //          n_nX++;
  84. //      }
  85. //  }
  86. //}
  87. //};
  88.  
  89. //=====Card.cpp===\\\
  90. #include"header.h"
  91.  
  92. //GAMESTATE GSState;
  93.  
  94. std::string sSuits[4] = {"clubs", "diamnonds", "spades", "hearts"};
  95. std::string sRanks[13] = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"};
  96.  
  97. CCard::CCard(std::string suit, std::string rank)
  98. {
  99.     m_sSuit = suit;
  100.     m_sRank = rank;
  101. }
  102. CCard::CCard()
  103. {
  104.     m_sSuit = "null";
  105.     m_sRank = "null";
  106. }
  107. std::string CCard::getSuit()
  108. {
  109.     return m_sSuit;
  110. }
  111. std::string CCard::getRank()
  112. {
  113.     return m_sRank;
  114. }
  115. int CCard::getValue()
  116. {
  117.     if (this->getRank() == "J" ||
  118.         this->getRank() == "K" ||
  119.         this->getRank() == "Q")
  120.     {
  121.         n_nValue = 10;
  122.     }
  123.     else if (this->getRank() == "A")
  124.     {
  125.         n_nValue = 11;
  126.     }
  127.     else
  128.     {
  129.         for (int i = 0; i < 13; i++)
  130.         {
  131.             if (this->getRank() == sRanks[i])
  132.             {
  133.                 n_nValue = i + 2;
  134.             }
  135.         }
  136.     }
  137.  
  138.     return n_nValue;
  139. }
  140.  
  141. void CCard::setValue(int nValue)
  142. {
  143.     this->n_nValue = nValue;
  144. }
  145.  
  146. CCard giveCard()
  147. {
  148.         return CCard(sSuits[random(0,3)], sRanks[random(0,12)]);
  149. }
  150.  
  151. //=====Player.cpp=====\\
  152. #include<iostream>
  153. #include<vector>
  154. #include"header.h"
  155.  
  156. //GAMESTATE GSState;
  157.  
  158. CPlayer::CPlayer()
  159. {
  160.     for (int i = 0; i < 2; i++)
  161.     {
  162.         this->hit();
  163.     }
  164. }
  165.  
  166. std::vector<CCard> CPlayer::getHand()
  167. {
  168.     return myHand;
  169. }
  170.  
  171. void CPlayer::hit()
  172. {
  173.     myHand.push_back(giveCard());
  174.    
  175.     std::cout   << "You received: \nrank: "
  176.                 << myHand[myHand.size()-1].getRank()
  177.                 << "  "
  178.                 << "suit: "
  179.                 << myHand[myHand.size()-1].getSuit()
  180.                 << "  "
  181.                 << "value: "
  182.                 << myHand[myHand.size()-1].getValue()
  183.                 << std::endl;
  184. }
  185.  
  186. void CPlayer::check()
  187. {
  188.     this->n_nValue = 0;
  189.     for (int i = 0; i < myHand.size(); i++)
  190.     {
  191.         this ->n_nValue += myHand[i].getValue();
  192.     }
  193.     if (this->n_nValue == 21)
  194.     {
  195.         GSState = PL_WIN;
  196.     }
  197.     else if (this->n_nValue > 21)
  198.     {
  199.         GSState = PL_LOSE;
  200.     }
  201. }
  202.  
  203. int CPlayer::getHandValue()
  204. {
  205.     this->check();
  206.     return n_nValue;
  207. }
  208.  
  209. //=====Dealer.cpp=====\\
  210. #include<iostream>
  211. #include<vector>
  212. #include"header.h"
  213.  
  214. GAMESTATE GSState;
  215.  
  216. CDealer::CDealer()
  217. {
  218.     for (int i = 0; i < 2; i++)
  219.     {
  220.         this->hit();
  221.     }
  222.     std::cout << "Dealer got his cards!" << std::endl;
  223. }
  224.  
  225. std::vector<CCard> CDealer::getHand()
  226. {
  227.     return deHand;
  228. }
  229.  
  230. void CDealer::hit()
  231. {
  232.     deHand.push_back(giveCard());
  233. }
  234.  
  235. void CDealer::move()
  236. {
  237.     n_nValue = 0;
  238.     for (int i = 0; i < deHand.size(); i++)
  239.     {
  240.         n_nValue += deHand[i].getValue();
  241.     }
  242.  
  243.     if (n_nValue == 21)
  244.     {
  245.         GSState = PL_LOSE;
  246.         std::cout << "Dealer wins!" << std::endl;       //test
  247.     }
  248.     else if (n_nValue <= 16)
  249.     {
  250.         std::cout << "Dealer stands!" << std::endl;     //test
  251.     }
  252.     else if (n_nValue >= 17)
  253.     {
  254.         GSState = WHATNOW;
  255.         std::cout << "wut?" << std::endl;               //test
  256.     }
  257. }
  258.  
  259. int CDealer::getHandValue()
  260. {
  261.     return n_nValue;
  262. }
  263.  
  264. //=====main.cpp=====\\
  265. #include<iostream>      //std
  266. #include<conio.h>       //only for getch
  267. #include<vector>        //vector
  268. #include<string>        //cout cardValue
  269. #include<ctime>         //random seed
  270. #include"header.h"
  271.  
  272.  
  273.  
  274. int main() {
  275.     srand (static_cast<unsigned int>(time(NULL)));
  276.     CDealer myDealer;
  277.     CPlayer myPlayer;
  278.     std::string sMove = "";
  279.     GAMESTATE GSState = GAME;
  280.  
  281.     while (toLowerCase(sMove) != "exit")
  282.     {
  283.         while (GSState == GAME)
  284.         {
  285.             if (toLowerCase(sMove) == "print") {
  286.                 std::cout << "Your cards are:" << std::endl;
  287.                 for (unsigned i = 0; i < myPlayer.getHand().size(); i++)
  288.                 {
  289.                     std::cout   << "rank: "
  290.                                 << myPlayer.getHand()[i].getRank()
  291.                                 << "  "
  292.                                 << "suit: "
  293.                                 << myPlayer.getHand()[i].getSuit()
  294.                                 << "  "
  295.                                 << "value: "
  296.                                 << myPlayer.getHand()[i].getValue()
  297.                                 << std::endl;
  298.                 }  
  299.             }
  300.             else if (toLowerCase(sMove) == "hit")
  301.             {
  302.                 myPlayer.hit();
  303.                 myPlayer.check();
  304.                 myDealer.move();
  305.             }
  306.             else if (toLowerCase(sMove) == "stand" || toLowerCase(sMove) == "")
  307.             {
  308.                 myDealer.move();
  309.                 myPlayer.check();
  310.             }
  311.             else if (toLowerCase(sMove) == "double")
  312.             {
  313.                 myPlayer.hit();
  314.                 //double nBet
  315.                 myDealer.move();
  316.                 myPlayer.check();
  317.             }
  318.             else if (toLowerCase(sMove) == "clear")
  319.             {
  320.                 system("cls");
  321.             }
  322.             else
  323.             {
  324.                 std::cout << "What was that, sir?" << std::endl;
  325.             }
  326.             std::cout << "Your total value is: " << myPlayer.getHandValue() << std::endl;
  327.            
  328.             std::cin >> sMove;
  329.         }
  330.         break;
  331.     }
  332.     if (GSState == WHATNOW)
  333.     {
  334.         if (myDealer.getHandValue() > myPlayer.getHandValue())
  335.         {
  336.             GSState = PL_LOSE;
  337.         }
  338.         else if (myDealer.getHandValue() < myPlayer.getHandValue())
  339.         {
  340.             GSState = PL_WIN;
  341.         }
  342.         else
  343.         {
  344.             GSState = DRAW;
  345.         }
  346.     }
  347.     switch (GSState)
  348.     {
  349.     case PL_LOSE:
  350.         std::cout << "You lose!" << std::endl;
  351.         break;
  352.  
  353.     case PL_WIN:
  354.         std::cout << "You win!" << std::endl;
  355.         break;
  356.  
  357.     case DRAW:
  358.         std::cout << "There is a draw!" << std::endl;
  359.         break;
  360.  
  361.     default:
  362.         break;
  363.     }
  364.  
  365.     _getch();
  366.     return 0;
  367. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement