fork download
  1. #include <iostream>
  2. #include <ctime>
  3. #include <string>
  4. using namespace std;
  5.  
  6. struct Blackjack
  7. {
  8. int player, card, cardDraw, currCount, p1Count, p2Count;
  9. bool bust, p1Bust, p2Bust, autoWin, pvpDone;
  10. };
  11.  
  12. void displayPlayer(Blackjack &);
  13. void drawCard(Blackjack &);
  14. void getCard(Blackjack &);
  15. void displayCard(Blackjack &, string);
  16. void endGame(Blackjack &);
  17. void findWinner(Blackjack);
  18.  
  19. const int BUST = 22;
  20.  
  21. int main()
  22. {
  23. srand((unsigned int)time(NULL));
  24.  
  25. cout << "\n\n ===================\n";
  26. cout << " *** Blackjack ***\n";
  27. cout << " ===================\n\n";
  28.  
  29. Blackjack b = {0, 0, 0, 0, false, false, false, false};
  30.  
  31. displayPlayer(b);
  32.  
  33. return 0;
  34. }
  35.  
  36. void displayPlayer(Blackjack & b)
  37. {
  38. b.player++;
  39. b.card = 0;
  40.  
  41. cout << "\nPlayer " << b.player << "'s Turn!";
  42. cout << "\n----------------\n\n";
  43.  
  44. drawCard(b);
  45. }
  46.  
  47. void drawCard(Blackjack & b)
  48. {
  49. b.cardDraw = 1 + rand() % 13;
  50.  
  51. getCard(b);
  52. }
  53.  
  54. void getCard(Blackjack & b)
  55. {
  56. string cardName = " ";
  57.  
  58. if (b.cardDraw == 1)
  59. {
  60. char aceVal = ' ';
  61.  
  62. cout << " Ace: (L/H)? ";
  63. cin >> aceVal;
  64.  
  65. aceVal = toupper(aceVal);
  66.  
  67. cout << endl;
  68.  
  69. if (aceVal == 'L')
  70. {
  71. b.card++;
  72. cardName = "Low Ace";
  73. b.currCount += 1;
  74. displayCard(b, cardName);
  75. }
  76.  
  77. else if (aceVal == 'H')
  78. {
  79. b.card++;
  80. cardName = "High Ace";
  81. b.currCount += 11;
  82. displayCard(b, cardName);
  83. }
  84. }
  85.  
  86. else if (b.cardDraw == 2)
  87. {
  88. b.card++;
  89. cardName = "Two";
  90. b.currCount += 2;
  91. displayCard(b, cardName);
  92. }
  93.  
  94. else if (b.cardDraw == 3)
  95. {
  96. b.card++;
  97. cardName = "Three";
  98. b.currCount += 3;
  99. displayCard(b, cardName);
  100. }
  101.  
  102. else if (b.cardDraw == 4)
  103. {
  104. b.card++;
  105. cardName = "Four";
  106. b.currCount += 4;
  107. displayCard(b, cardName);
  108. }
  109.  
  110. else if (b.cardDraw == 5)
  111. {
  112. b.card++;
  113. cardName = "Five";
  114. b.currCount += 5;
  115. displayCard(b, cardName);
  116. }
  117.  
  118. else if (b.cardDraw == 6)
  119. {
  120. b.card++;
  121. cardName = "Six";
  122. b.currCount += 6;
  123. displayCard(b, cardName);
  124. }
  125.  
  126. else if (b.cardDraw == 7)
  127. {
  128. b.card++;
  129. cardName = "Seven";
  130. b.currCount += 7;
  131. displayCard(b, cardName);
  132. }
  133.  
  134. else if (b.cardDraw == 8)
  135. {
  136. b.card++;
  137. cardName = "Eight";
  138. b.currCount += 8;
  139. displayCard(b, cardName);
  140. }
  141.  
  142. else if (b.cardDraw == 9)
  143. {
  144. b.card++;
  145. cardName = "Nine";
  146. b.currCount += 9;
  147. displayCard(b, cardName);
  148. }
  149.  
  150. else if (b.cardDraw == 10)
  151. {
  152. b.card++;
  153. cardName = "Ten";
  154. b.currCount += 10;
  155. displayCard(b, cardName);
  156. }
  157.  
  158. else if (b.cardDraw == 11)
  159. {
  160. b.card++;
  161. cardName = "Jack";
  162. b.currCount += 10;
  163. displayCard(b, cardName);
  164. }
  165.  
  166. else if (b.cardDraw == 12)
  167. {
  168. b.card++;
  169. cardName = "Queen";
  170. b.currCount += 10;
  171. displayCard(b, cardName);
  172. }
  173.  
  174. else if (b.cardDraw == 13)
  175. {
  176. b.card++;
  177. cardName = "King";
  178. b.currCount += 10;
  179. displayCard(b, cardName);
  180. }
  181. }
  182.  
  183. void displayCard(Blackjack & b, string cardName)
  184. {
  185. char hit = ' ';
  186.  
  187. cout << " * Card " << b.card << ": ";
  188. cout << cardName << endl << endl;
  189.  
  190. cout << " COUNT: ";
  191. cout << b.currCount << endl << endl;
  192.  
  193. //---BUST---
  194. if (b.card >= 2 && b.currCount >= BUST)
  195. {
  196. b.bust = true;
  197. endGame(b);
  198. }
  199.  
  200. //---NO BUST---
  201. else if ((b.card >= 2 && b.card < 5) && b.currCount < BUST)
  202. {
  203. cout << " Hit (Y/N)? ";
  204. cin >> hit;
  205.  
  206. cout << endl;
  207.  
  208. if (hit == 'y' || hit == 'Y')
  209. drawCard(b);
  210.  
  211. else if (hit == 'n' || hit == 'N')
  212. {
  213. b.bust = false;
  214. endGame(b);
  215. }
  216. }
  217.  
  218. else if (b.card == 5)
  219. {
  220. b.autoWin = true;
  221. findWinner(b);
  222. }
  223.  
  224. else
  225. drawCard(b);
  226. }
  227.  
  228. void endGame(Blackjack & b)
  229. {
  230. //------BUST------
  231. if (b.bust == true)
  232. {
  233. if (b.pvpDone == false)
  234. {
  235. //PLAYER 1'S TURN IS OVER
  236. cout << "===============\n";
  237. cout << "Player 1 Busts!\n";
  238. cout << "===============\n\n";
  239.  
  240. //PLAYER 2 WILL GO NEXT
  241. b.p1Count = b.currCount;
  242. b.currCount = 0;
  243. b.pvpDone = true;
  244. b.p1Bust = true;
  245. displayPlayer(b);
  246. }
  247.  
  248. else if (b.pvpDone == true)
  249. {
  250. //*END GAME*
  251. cout << "===============\n";
  252. cout << "Player 2 Busts!\n";
  253. cout << "===============\n\n";
  254.  
  255. b.p2Count = b.currCount;
  256. b.p2Bust = true;
  257. b.autoWin = false;
  258. findWinner(b);
  259. }
  260. }
  261.  
  262. //------NO BUST------
  263. else
  264. {
  265. //PLAYER 1'S TURN IS OVER
  266. if (b.pvpDone == false)
  267. {
  268. //PLAYER 2 WILL GO NEXT
  269. b.p1Count = b.currCount;
  270. b.currCount = 0;
  271. b.pvpDone = true;
  272. b.p1Bust = false;
  273. displayPlayer(b);
  274. }
  275.  
  276. //*END GAME*
  277. else if (b.pvpDone == true)
  278. {
  279. b.p2Count = b.currCount;
  280. b.p2Bust = false;
  281. b.autoWin = false;
  282. findWinner(b);
  283. }
  284. }
  285. }
  286.  
  287. void findWinner(Blackjack b)
  288. {
  289. //A PLAYER GETS 5 CARDS
  290. if (b.autoWin)
  291. {
  292. cout << "\n==============\n";
  293. cout << "Five Cards!" << "\n\nPlayer ";
  294. cout << b.player << " Wins!";
  295. cout << "\n==============\n\n";
  296.  
  297. system("PAUSE");
  298. exit(0);
  299. }
  300.  
  301. //PLAYER 1 WINS, NO BUSTS
  302. if (((b.p1Count > b.p2Count) && (!b.p1Bust && !b.p2Bust)) && !b.autoWin)
  303. {
  304. cout << "\n==============\n";
  305. cout << "P1 Count: " << b.p1Count << "\nP2 Count: ";
  306. cout << b.p2Count << "\n\nPlayer 1 Wins!";
  307. cout << "\n==============\n\n";
  308.  
  309. system("PAUSE");
  310. exit(0);
  311. }
  312.  
  313. //PLAYER 2 WINS, NO BUSTS
  314. else if (((b.p1Count < b.p2Count) && (!b.p1Bust && !b.p2Bust)) && !b.autoWin)
  315. {
  316. cout << "\n==============\n";
  317. cout << "P1 Count: " << b.p1Count << "\nP2 Count: ";
  318. cout << b.p2Count << "\n\nPlayer 2 Wins!";
  319. cout << "\n==============\n\n";
  320.  
  321. system("PAUSE");
  322. exit(0);
  323. }
  324.  
  325. //TIE, NO BUSTS
  326. else if (((b.p1Count == b.p2Count) && (!b.p1Bust && !b.p2Bust)) && !b.autoWin)
  327. {
  328. cout << "\n============\n";
  329. cout << "P1 Count: " << b.p1Count << "\nP2 Count: ";
  330. cout << b.p2Count << "\n\nIt's a Tie!";
  331. cout << "\n============\n\n";
  332.  
  333. system("PAUSE");
  334. exit(0);
  335. }
  336.  
  337. //BOTH PLAYERS BUST
  338. else if (((b.p1Bust && b.p2Bust) && (b.p1Count != b.p2Count)) && !b.autoWin)
  339. {
  340. cout << "\n==============\n";
  341. cout << "P1 Count: " << "BUST" << "\nP2 Count: ";
  342. cout << "BUST" << "\n\nNo Winner!";
  343. cout << "\n==============\n\n";
  344.  
  345. system("PAUSE");
  346. exit(0);
  347. }
  348.  
  349. //PLAYER 1 BUSTS, PLAYER 2 WINS
  350. else if ((b.p1Bust && !b.p2Bust) && !b.autoWin)
  351. {
  352. cout << "\n==============\n";
  353. cout << "P1 Count: " << "BUST" << "\nP2 Count: ";
  354. cout << b.p2Count << "\n\nPlayer 2 Wins!";
  355. cout << "\n==============\n\n";
  356.  
  357. system("PAUSE");
  358. exit(0);
  359. }
  360.  
  361. //PLAYER 2 BUSTS, PLAYER 1 WINS
  362. else if ((!b.p1Bust && b.p2Bust) && !b.autoWin)
  363. {
  364. cout << "\n==============\n";
  365. cout << "P1 Count: " << b.p1Count << "\nP2 Count: ";
  366. cout << "BUST" << "\n\nPlayer 1 Wins!";
  367. cout << "\n==============\n\n";
  368.  
  369. system("PAUSE");
  370. exit(0);
  371. }
  372. }
Success #stdin #stdout 0s 3484KB
stdin
Standard input is empty
stdout

   ===================
    *** Blackjack ***
   ===================


Player 1's Turn!
----------------

  * Card 1: Queen

    COUNT: 10

  * Card 2: Ten

    COUNT: 20

       Hit (Y/N)?