pa2.pdf

Homework #2: Simple 5-Card Poker Game In this assignment, you will develop a simple poker game, complete with basic AI, using the object

oriented programming principles discussed in class.

UML Class Diagram Your assignment must contain and use the following classes:

Card

-_suit : string -_value : int -_name : string

+getSuit() : string +setSuit(suit : string) : void +getName() : string +setName(name : string) : void +getValue() : int +setValue(value : int) : void +getValueName() : string

Deck

-_cards[52] : Card -_played_cards : int

<<constructor>> +Deck() -buildDeck() : void +shuffleDeck() : void +getNextCard() : Card

Hand

-_cards[5] : Card

<<constructor>> +Hand() +setCard(int position, Card card) : void +getCard(int position) : Card +hasPair() : bool +hasTwoPair() : bool +hasThreeOfAKind() : bool +hasStraight() : bool +hasFlush() : bool +hasFullHouse() : bool +hasFourOfAKind() : bool

PokerGame

+playGame() : void

Card Class We use the card class to represent an individual card in a deck. At minimum, the card class should

contain the functions and variables listed in the supplied UML diagram. This includes:

int _suit

This variable indicates the card's suit: Club, Diamond, Heart, or Spade.

int value

value represents the value of the given card. Numerical cards (e.g. 2 of clubs) have a value equal to their

number. Provide the values for the following face cards: Jack: 11, Queen: 12, King: 13, Ace: 14.

getSuit

Returns the card's suit as a string.

setSuit

Sets the card's suit.

getName

Returns the card's name.

setName

Set's the card's name.

getValue

Returns the card's value as an integer (e.g. 2-14).

setValue

Set's the card's value.

getValueName

Returns the card's value as a string (e.g. "two", "three", … "King", "Ace").

Deck Class The deck class will be used to represent a standard 52 card poker deck. At minimum, the deck class

should contain the functions and variables listed in the supplied UML diagram. This includes:

Card _cards[52]

This is an array of 52 unique cards.

int _played_cards

This variable is used to track previously dealt cards.

Constructor

The Deck's constructor should initialize and shuffle a fresh deck of 52 unique cards.

buildDeck

Calling this function will initialize _cards to contain all normal 52 cards.

shuffleDeck

Calling this function will randomly rearrange the cards in the deck.

getNextCard

This function will select the next card from the deck.

Hand Class You will need two instances of the Hand Class in your game: one for the player, and one for the

computer. Each Hand will contain the respective player's current hand of cards. The hand class must

have several helper methods that can be used to determine the strength of the hand. If you are

unfamiliar with poker hands, Wikipedia has a related article that may be of interest.

PokerGame Class The PokerGame class will be used to encapsulate all of the logic associated with playing the game of

poker. The play method's operation will be discussed in the next section.

Flow of Play Your poker game's play() method should operate as follows:

1. Deal the player five cards and display the results on the screen

2. Ask the player which cards he or she would like to exchange

3. Remove the desired cards from the player's hand

4. Deal the player N new cards (N = exchange amount)

5. Display the new hand on the screen

6. Deal the computer five cards and display the results on the screen

7. The computer determines how many cards to exchange based on the following logic:

a. zero cards if the computer has a four of a kind, full house, straight, or flush

b. one card if the computer has two pair

c. two cards if the computer has three of a kind

d. three cards if the computer has a pair

e. five cards if the computer has none of the above

8. Remove the appropriate number of cards in the computer's hand

9. Deal the computer the appropriate number of replacement cards

10. Display the new hand on the screen

11. Determine the winner of the game based on the following rankings:

a. Four of a kind

b. Full house

c. Flush

d. Straight

e. Three of a kind

f. Two Pair

g. Pair

12. Indicate the winner on the screen

Sample Output *** Simple 5-Card Poker *** The cards have been shuffled and you are dealt: 1. Five of Hearts 2. Five of Spades 3. Jack of Hearts 4. Two of Clubs 5. Ace of Diamonds Indicate the cards that you would like to exchange (-1 to end): 4 3 6 Invalid selection. Indicate the cards that you would like to exchange (-1 to end): -1 Your new hand is: 1. Five of Hearts 2. Five of Spades 3. Two of Clubs 4. King of Hearts 5. Ace of Diamonds The computer is dealt the following cards: 1. Ace of Spades 2. Three of Spades 3. Five of Diamonds 4. Ace of Hearts 5. Six of Clubs The computer exchanges cards 2, 3, and 5. The new hand is: 1. Ace of Spades 2. Seven of Clubs 3. Seven of Diamonds 4. Ace of Hearts 5. Queen of Diamonds You have one pair. The computer has two pair. The computer wins.

Header Comment, and Formatting 1. Be sure to modify the file header comment at the top of your script to indicate your name,

student ID, completion time, and the names of any individuals that you collaborated with on the

assignment.

2. Remember to follow the basic coding style guide. For a list of basic rules, see my website or

examine my example files from previous assignments and labs.

Reflection Essay In addition to the programming tasks listed above, your submission must include an essay that reflects

on your experiences with this homework. This essay must be at least 350 words long. Note that the

focus of this paper should be on your reflection, not on structure (e.g. introductory paragraph,

conclusion, etc.). The essay is graded on content (i.e. it shows deep though) rather than syntax (e.g.

spelling) and structure. Below are some prompts that can be used to get you thinking. Feel free to use

these or to make up your own.

 Describe a particular struggle that you overcame when working on this programming

assignment.

 Conversely, describe an issue with your assignment that you were unable to resolve.

 Provide advice to a future student on how he or she might succeed on this assignment.

 Describe the most fun aspect of the assignment.

 Describe the most challenging aspect of the assignment.

 Describe the most difficult aspect of the assignment to understand.

 Provide any suggestions for improving the assignment in the future.

Deliverables You must upload your assignment through Canvas no later than midnight on Friday, September 30,

2016. Remember that your submission must either contain a CodeBlocks or Visual Studio project file!

Grading Criteria Your assignment will be judged by the following criteria:

Error Free Compile (weight: 5%)

 [0] Your program contains compiler errors.

 [1] Your program compiles without issue.

Error Free Runtime (weight: 10%)

 [0] Your program throws a runtime exception.

 [1] Your program does not encounter any runtime exceptions.

Style (weight: 5%)

 [0] Your code contains more than 7 distinct stylistic errors

 [1] Your code contains between 2 and 7 distinct stylistic errors

 [2] Your code contains 1 or 0 stylistic errors

User Interface (weight: 15%)

 [0] Your program does not match the user interface guidelines as specified in the sample output

 [1] Your program almost matches the specified user interface guidelines

 [2] Your program completely matches the specified user interface guidelines

Required Classes (weight: 20%)

 [0] Your program does not use nor does it contain the required classes

 [1] Your program contains, but does not fully use the required classes

 [2] Your program contains and uses the required classes

Game Play (weight: 45%; see list below)

 [0] Your program is missing more than 4 of the listed game play components

 [1] Your program is missing more than 3 of the listed game play components

 [2] Your program is missing more than 2 of the listed game play components

 [3] Your program is missing more than 1 of the listed game play components

 [4] Your program contains all of the necessary game play components

Required Game Play Components

 The program randomly deals cards to both the player and the computer

 The program prompts the user for cards to exchange

 The program correctly identifies and handles invalid input during the card exchange

phase

 The program deals the requested number of cards to the player after the exchange

phase

 The computer selects the number of cards to redraw based on the algorithm outlined in

the "flow of play" section

 The program correctly determines the winner of a given game