Made by George and Pahul
Dependencies: 4DGL-uLCD-SE PinDetect mbed
Hand.h@0:8798a72d6580, 2015-03-12 (annotated)
- Committer:
- gevell1
- Date:
- Thu Mar 12 18:59:00 2015 +0000
- Revision:
- 0:8798a72d6580
Blackjack V1.0
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
gevell1 | 0:8798a72d6580 | 1 | using namespace std; |
gevell1 | 0:8798a72d6580 | 2 | class Hand |
gevell1 | 0:8798a72d6580 | 3 | { |
gevell1 | 0:8798a72d6580 | 4 | private: |
gevell1 | 0:8798a72d6580 | 5 | std::vector <std::string> card_types; // the card names in the hand |
gevell1 | 0:8798a72d6580 | 6 | std::vector <int> card_values; // the card values in the hand |
gevell1 | 0:8798a72d6580 | 7 | std::string hand_holder; // either 'Player' or 'Dealer' |
gevell1 | 0:8798a72d6580 | 8 | int aceCount; // the number of aces, useful for calculating hand value |
gevell1 | 0:8798a72d6580 | 9 | |
gevell1 | 0:8798a72d6580 | 10 | public: |
gevell1 | 0:8798a72d6580 | 11 | explicit Hand(std::string); // constructor, sets hand_holder and calls addCard twice |
gevell1 | 0:8798a72d6580 | 12 | void addCard(); // adds a randomly chosen card to the hand |
gevell1 | 0:8798a72d6580 | 13 | void printHand(); // prints the card_types vector |
gevell1 | 0:8798a72d6580 | 14 | void printFirstCard(); // prints only the first card in the hand (used for dealer) |
gevell1 | 0:8798a72d6580 | 15 | int handValue(); // calculates the hand's value |
gevell1 | 0:8798a72d6580 | 16 | int getCardValues(int i); |
gevell1 | 0:8798a72d6580 | 17 | }; |
gevell1 | 0:8798a72d6580 | 18 | |
gevell1 | 0:8798a72d6580 | 19 | Hand::Hand(string player) |
gevell1 | 0:8798a72d6580 | 20 | { |
gevell1 | 0:8798a72d6580 | 21 | hand_holder = player; |
gevell1 | 0:8798a72d6580 | 22 | aceCount = 0; |
gevell1 | 0:8798a72d6580 | 23 | card_types.clear(); |
gevell1 | 0:8798a72d6580 | 24 | card_values.clear(); |
gevell1 | 0:8798a72d6580 | 25 | for(int i = 0; i<2; i++) |
gevell1 | 0:8798a72d6580 | 26 | { |
gevell1 | 0:8798a72d6580 | 27 | addCard(); |
gevell1 | 0:8798a72d6580 | 28 | } |
gevell1 | 0:8798a72d6580 | 29 | |
gevell1 | 0:8798a72d6580 | 30 | } |
gevell1 | 0:8798a72d6580 | 31 | void Hand::addCard() |
gevell1 | 0:8798a72d6580 | 32 | { |
gevell1 | 0:8798a72d6580 | 33 | //card selection was changed |
gevell1 | 0:8798a72d6580 | 34 | int cardSelection = 1 + rand() % 13; |
gevell1 | 0:8798a72d6580 | 35 | int cardValue = 0; |
gevell1 | 0:8798a72d6580 | 36 | string cardType; |
gevell1 | 0:8798a72d6580 | 37 | |
gevell1 | 0:8798a72d6580 | 38 | switch (cardSelection) |
gevell1 | 0:8798a72d6580 | 39 | { |
gevell1 | 0:8798a72d6580 | 40 | case 1: |
gevell1 | 0:8798a72d6580 | 41 | cardType = "Ace"; |
gevell1 | 0:8798a72d6580 | 42 | cardValue = 11; |
gevell1 | 0:8798a72d6580 | 43 | aceCount = aceCount + 1; |
gevell1 | 0:8798a72d6580 | 44 | break; |
gevell1 | 0:8798a72d6580 | 45 | |
gevell1 | 0:8798a72d6580 | 46 | case 2: |
gevell1 | 0:8798a72d6580 | 47 | cardType = "King"; |
gevell1 | 0:8798a72d6580 | 48 | cardValue = 10; |
gevell1 | 0:8798a72d6580 | 49 | break; |
gevell1 | 0:8798a72d6580 | 50 | |
gevell1 | 0:8798a72d6580 | 51 | case 3: |
gevell1 | 0:8798a72d6580 | 52 | cardType = "Queen"; |
gevell1 | 0:8798a72d6580 | 53 | cardValue = 10; |
gevell1 | 0:8798a72d6580 | 54 | break; |
gevell1 | 0:8798a72d6580 | 55 | |
gevell1 | 0:8798a72d6580 | 56 | case 4: |
gevell1 | 0:8798a72d6580 | 57 | cardType = "Jack"; |
gevell1 | 0:8798a72d6580 | 58 | cardValue = 10; |
gevell1 | 0:8798a72d6580 | 59 | break; |
gevell1 | 0:8798a72d6580 | 60 | |
gevell1 | 0:8798a72d6580 | 61 | case 5: |
gevell1 | 0:8798a72d6580 | 62 | cardType = "Ten"; |
gevell1 | 0:8798a72d6580 | 63 | cardValue = 10; |
gevell1 | 0:8798a72d6580 | 64 | break; |
gevell1 | 0:8798a72d6580 | 65 | |
gevell1 | 0:8798a72d6580 | 66 | case 6: |
gevell1 | 0:8798a72d6580 | 67 | cardType = "Two"; |
gevell1 | 0:8798a72d6580 | 68 | cardValue = 2; |
gevell1 | 0:8798a72d6580 | 69 | break; |
gevell1 | 0:8798a72d6580 | 70 | |
gevell1 | 0:8798a72d6580 | 71 | case 7: |
gevell1 | 0:8798a72d6580 | 72 | cardType = "Three"; |
gevell1 | 0:8798a72d6580 | 73 | cardValue = 3; |
gevell1 | 0:8798a72d6580 | 74 | break; |
gevell1 | 0:8798a72d6580 | 75 | |
gevell1 | 0:8798a72d6580 | 76 | case 8: |
gevell1 | 0:8798a72d6580 | 77 | cardType = "Four"; |
gevell1 | 0:8798a72d6580 | 78 | cardValue = 4; |
gevell1 | 0:8798a72d6580 | 79 | break; |
gevell1 | 0:8798a72d6580 | 80 | |
gevell1 | 0:8798a72d6580 | 81 | case 9: |
gevell1 | 0:8798a72d6580 | 82 | cardType = "Five"; |
gevell1 | 0:8798a72d6580 | 83 | cardValue = 5; |
gevell1 | 0:8798a72d6580 | 84 | break; |
gevell1 | 0:8798a72d6580 | 85 | |
gevell1 | 0:8798a72d6580 | 86 | case 10: |
gevell1 | 0:8798a72d6580 | 87 | cardType = "Six"; |
gevell1 | 0:8798a72d6580 | 88 | cardValue = 6; |
gevell1 | 0:8798a72d6580 | 89 | break; |
gevell1 | 0:8798a72d6580 | 90 | |
gevell1 | 0:8798a72d6580 | 91 | case 11: |
gevell1 | 0:8798a72d6580 | 92 | cardType = "Seven"; |
gevell1 | 0:8798a72d6580 | 93 | cardValue = 7; |
gevell1 | 0:8798a72d6580 | 94 | break; |
gevell1 | 0:8798a72d6580 | 95 | |
gevell1 | 0:8798a72d6580 | 96 | case 12: |
gevell1 | 0:8798a72d6580 | 97 | cardType = "Eight"; |
gevell1 | 0:8798a72d6580 | 98 | cardValue = 8; |
gevell1 | 0:8798a72d6580 | 99 | break; |
gevell1 | 0:8798a72d6580 | 100 | |
gevell1 | 0:8798a72d6580 | 101 | case 13: |
gevell1 | 0:8798a72d6580 | 102 | cardType = "Nine"; |
gevell1 | 0:8798a72d6580 | 103 | cardValue = 9; |
gevell1 | 0:8798a72d6580 | 104 | break; |
gevell1 | 0:8798a72d6580 | 105 | } |
gevell1 | 0:8798a72d6580 | 106 | card_values.push_back(cardValue); |
gevell1 | 0:8798a72d6580 | 107 | card_types.push_back(cardType); |
gevell1 | 0:8798a72d6580 | 108 | } |
gevell1 | 0:8798a72d6580 | 109 | |
gevell1 | 0:8798a72d6580 | 110 | int Hand::handValue() |
gevell1 | 0:8798a72d6580 | 111 | { |
gevell1 | 0:8798a72d6580 | 112 | int sumOfCards = 0; |
gevell1 | 0:8798a72d6580 | 113 | |
gevell1 | 0:8798a72d6580 | 114 | for (int i = 0; i < card_values.size(); i++) |
gevell1 | 0:8798a72d6580 | 115 | { |
gevell1 | 0:8798a72d6580 | 116 | sumOfCards = card_values[i] + sumOfCards; |
gevell1 | 0:8798a72d6580 | 117 | } |
gevell1 | 0:8798a72d6580 | 118 | |
gevell1 | 0:8798a72d6580 | 119 | int numAces = aceCount; |
gevell1 | 0:8798a72d6580 | 120 | |
gevell1 | 0:8798a72d6580 | 121 | while ((sumOfCards > 21) && (numAces > 0)) |
gevell1 | 0:8798a72d6580 | 122 | { |
gevell1 | 0:8798a72d6580 | 123 | sumOfCards = sumOfCards - 10; |
gevell1 | 0:8798a72d6580 | 124 | numAces--; |
gevell1 | 0:8798a72d6580 | 125 | } |
gevell1 | 0:8798a72d6580 | 126 | |
gevell1 | 0:8798a72d6580 | 127 | return sumOfCards; |
gevell1 | 0:8798a72d6580 | 128 | } |
gevell1 | 0:8798a72d6580 | 129 | |
gevell1 | 0:8798a72d6580 | 130 | void Hand::printHand() |
gevell1 | 0:8798a72d6580 | 131 | { |
gevell1 | 0:8798a72d6580 | 132 | for (int i = 0; i < card_values.size(); i++) |
gevell1 | 0:8798a72d6580 | 133 | { |
gevell1 | 0:8798a72d6580 | 134 | cout << card_values[i] << " "; |
gevell1 | 0:8798a72d6580 | 135 | } |
gevell1 | 0:8798a72d6580 | 136 | } |
gevell1 | 0:8798a72d6580 | 137 | |
gevell1 | 0:8798a72d6580 | 138 | int Hand::getCardValues(int i) |
gevell1 | 0:8798a72d6580 | 139 | { |
gevell1 | 0:8798a72d6580 | 140 | return card_values[i]; |
gevell1 | 0:8798a72d6580 | 141 | } |
gevell1 | 0:8798a72d6580 | 142 | |
gevell1 | 0:8798a72d6580 | 143 | void Hand::printFirstCard() |
gevell1 | 0:8798a72d6580 | 144 | { |
gevell1 | 0:8798a72d6580 | 145 | cout << card_values[0]; |
gevell1 | 0:8798a72d6580 | 146 | } |