Advertisement
alch1337

Blackjack RC

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