Card Lab in C++
Prelab
see in lab activity too.
The prelab activity involves the classes and program below.
The main program is in play.cpp, the other files
provide a class Card and a class Deck for playing
cards.
To create an executable you'll need to put all the .cpp files into
one project.
The output will go by very quickly. To see the output one screen at a
time, pipe the output to a pager; the common paging programs
in Unix are named more and less. You pipe the output
of play to the pager using the syntax below. Press the space bar to see
a new screen-full, the return key to see one new line of output, and
the 'b' key to back up in the output. Run the program and try the keys
in the pager (you can't always back up when using more).
play | less
Prelab Problems
Joker's Wild
Add the following loop before the code that deals 5 cards to
the vector player but after the deck is printed. The loop
removes all the cards from the Deck d.
for(k=0; k < 52; k++)
{
d.GetCard();
}
What is the output? (write it below). Why is this the output?
Counting Cards
Write a function named IsFlush that takes a vector of cards as
a parameter and returns true if all the cards are the same suit (this is
called a flush in Poker.)
bool IsFlush(const tvector& hand)
// pre: hand.size() is # cards in hand
// post: return true iff all cards in hand are the same suit
To tell if all cards are the same
suit, use the following idea:
- Define a local Card variable named c
and assign it the first card in the
tvector/hand of cards. For example, if the parameter is named hand
Card c = hand[0];
- Loop over each of the other cards and see if they're the same suit as the
first card. If not, return false immediately. After the loop return
true (since all cards are the same, or the function would have returned
false earlier).
Test this code by writing code like this in main
Card c = d.GetCard(); // get one card
player.push_back(c); // add same card to player five times
player.push_back(c);
player.push_back(c);
player.push_back(c);
player.push_back(c);
You'll probably want to try some more testing, when you're sure that
IsFlush works
modify the code in main so that 10,000 five-card hands are dealt to
player. Shuffle the Deck d before dealing each hand. You won't
want to print each hand, that will take too long. Check each five-card
hand to see if it's a flush and print the number of flushes that are
dealt in 10,000 hands.
When you've tested IsFlush, write a function named
FourAces that returns true if a hand contains four aces. The
function Card::GetRank() returns the rank of a card, an ace has
rank 1 in the class Card.
Test both IsFlush and FourAces by generating 100,000
hands and testing them. Print the hands of four aces to check your
output, and accumulate a count of how many hands contain four aces as
well as how many hands are flushes.
Extra Credit
For extra credit write a function IsFullHouse that returns true
if a hand is a full house, that is it contains one pair and three of a
kind. For example, two aces and three tens is a full house as is
three nines and two sixes. This extra credit can take the place of a
missed prelab.
Bring a printed copy of play.cpp to your lab.
In Lab
You will be given problems to work on during lab.
Each lab is worth three points. A TA must check each of the points. It
is your responsibility to ensure that a TA awards each point. After a
lab is over you cannot receive credit for the first two points.
- One point for completing the prelab
activities and bringing them to lab.
- One point for participating actively during the
in lab activities.
- One point for completing the lab.
Owen L. Astrachan
Last modified: Sun Nov 21 20:01:20 EST 1999