Description
The purpose of this challenge is to define several aggregated classes with overloaded operators. This challenge simulates playing cards and a modified poker game.
Requirements
- Define a class called Card as below. Complete the as_string() function and the overloaded operators as described in the comments below.
class Card { private: // suit contains values 1-4, to represent suits below // 1 - Diamonds, 2 - Hearts, 3 - Clubs, 4 - Spades int suit; // value contains values 1 - 13 // Ace - 1, 2-10, J - 11, Q - 12, K - 13 int value; public: // you will need to write: // - a default constructor (used in Step 2) // - an overloaded constructor (used in Step 1) // set values - this will be used later in Step 2 void set(int s, int v) { suit = s; value = v; } // function to return a string that describes the card string as_string() { // for example, if suit == 1 and value == 1 // this function would return "Ace of Diamonds" } // write an overloaded operator for less-than-or-equal-to // this function allows you to compare two cards. // despite an Ace having a value of 1, it is // actually greater in value than all the other cards // make sure your overload for less-than-or-equal-to takes // this into account // write an overloaded operator for << that will allow // you to cout a Card object. This overload will call the // as_string() function to display its description };
- Define a class called Deck as below. Complete the constructor and the shuffle() functions as described in the comments below.
class Deck { private: Card cards[52]; // the inplay array holds a true/false value to indicate // if the card in the same position is currently in play // a card is "in play" if it has been drawn out of the deck bool inplay[52]; public: // constructor will set suit and value for each of the // cards in the array Deck() { } void unplay() { for (int i = 0; i < 52; i++) inplay[i] = false; } // randomize/shuffle the deck of cards so that the // cards in the array are in a random order void shuffle() { for (int i = 0; i < 52; i++) { // identify a card at position i // generate a random number between 0 and 51 // int random = rand() % 52; // the rand() function needs the <cstdlib> header file // use random as an index into the card array // swap the card values for the cards at positions i // and random } unplay(); // set all cards to "not in play" } Card draw() { Card drawn; // returns a Card object. randomly pick a card out of the // deck that is not currently in play. A card is in play // if its corresponding value in the inplay array is true // Once a random card has been picked out of the deck, // set the corresponding inplay value to true return drawn; } };
- Write a class Game as below. Complete the is_flush() and deal() function as described in the comments.
class Game { private: Deck deck; public: // constructor will shuffle the deck Game() { deck.shuffle(); } // this function will determine if the 5-card hand passed // as the parameter is a flush. A flush is a hand where // all the cards have the same suit bool is_flush(Card hand[]) { } // OPTIONAL - this function will determine if the 5-card // hand passed as the paremeter is a Four-Of-A-Kind. A FOAK // has 4 cards with the same value. The 5th card can be // any value bool is_foak(Card hand[]) { } void deal(Card hand[]) { // this function will select 5 cards out of the // deck using the Deck's draw() function. Remember that // arrays passed as parameters can be set in the function // and made available to the caller's scope } };
Sample main() for Step 1
// class definitions here // Use this main() function for Step 1 int main() { Card test1(1,1); // Ace of Diamonds Card test2(1,10); // 10 of Diamonds cout << test1 << endl; // should show "Ace of Diamonds" if (test2 <= test1) { // should show "Ace of Diamonds beats 10 of diamonds" cout << test1 << " beats " << test2 << endl; } else { cout << test2 << " beats " << test1 << endl; } }
Sample main()
// class definitions here // replace the main() used in Step 1 above with this main() int main() { Game poker; Card hand[5]; poker.deal(hand); for (int i = 0; i < 5; i++) { cout << hand[i] << endl; } if (poker.is_flush(hand)) cout << "Your hand is a flush" << endl; else cout << "No flush" << endl; Deck deck1; deck1.shuffle(); Card card1, card2; card1 = deck1.draw(); card2 = deck1.draw(); if (card1 <= card2) cout << card2 << " beats or matches " << card1 << endl; else cout << card1 << " beats " << card2 << endl; return 0; }
Sample Interaction
Ace of Diamonds
9 of Diamonds
3 of Diamonds
Queen of Diamonds
8 of Diamonds
Your hand is a flush!
8 of Spades beats or matches 3 of Diamonds
9 of Hearts
King of Spades
King of Hearts
Ace of Clubs
6 of Clubs
No flush
Ace of Hearts beats 10 of Spades
LEGEND
PROGRAM OUTPUT
USER INPUT
FROM INPUT
CATALOG ID: CPP-CHAL0022
Print Requirements