Lab: OOP Blackjack
In this lab, you will develop a simple game of blackjack using object oriented programming.
UML Class Diagrams:
Your project must implement the following classes:
The role of the Blackjack class is to encapsulate all of logic associated with playing the game of blackjack.
Note that all output visible in the Sample Output section is generated by BlackJack's play() method. The play() method should operate as follows:
1. Output an introduction
Starting with the player, do the following:
1. Deal the player a card.
2. Add the card's value to the player's total hand. 3. Output the value of the card just dealt and the player's current hand total (score)
3. Ask the player if he would like to hit or stand
4. If the player hits, go back to #1
After the player busts (goes over 21) or stands
1. If the player has not busted, begin computer's play
2. Deal the computer a card
3. Add the value of the card to the computer's hand total (score)
4. If a card causes the computer to bust (go over 21), output a message. Go to step #7.
5. If the computer's hand total is less than 17, it must take another card (hit). Go to step #2.
6. If the computer's hand is 17 or more, the computer stands.
7. Stop computer play
When both player and computer are done:
1. If the player has not busted (gone over 21) and the computer busted, the player wins.
2. If the player has not busted, the computer has not busted, and the player's hand total is greater than the computer, then the player wins.
3. If the player has not busted, the computer has not busted, and the player's hand total is less than the computer's then the computer wins.
4. If the player has busted, then the computer wins.
We use the card class to represent an individual card in a deck. Cards have a suit (Club, Diamond, Heart, Spade) and a rank (e.g. Two, Ten, Jack, Ace). Suit_t and Rank_t are enumerations that list the possible values. To simplify, we will assume that aces only play one role in blackjack and have a value of 11.
Note that the Card class has a getRankValue() method that will return the integer value of the card (i.e. 2-11 depending on the card's base value).
The Deck class is merely a collection of 52 cards. The private member variable "_used_indices" is used to track the cards previously dealt. Calling the resetDeck() method should re-initialize the deck of cards and clear out the list of previously dealt cards. For convenience, the Deck's constructor should automatically call resetDeck() to initialize the deck.