(Card Shuffling and Dealing) Create a program to shuffle and deal a deck of cards. The
program should consist of class Card, class DeckOfCards and a driver program.
Class Card should
provide:
a) Data members face and suit of type int.
b) A constructor that receives two ints representing the face and suit and uses them to initialize
the data members.
c) Two static arrays of strings representing the faces and suits.
d) A toString function that returns the Card as a string in the form “face of suit.” You
can use the + operator to concatenate strings.
Class DeckOfCards should contain:
a) A vector of Cards named deck to store the Cards.
b) An integer currentCard representing the next card to deal.
c) A default constructor that initializes the Cards in the deck. The constructor should use
vector function push_back to add each Card to the end of the vector after the Card is
created and initialized. This should be done for each of the 52 Cards in the deck.
d) A shuffle function that shuffles the Cards in the deck. The shuffle algorithm should
iterate through the vector of Cards. For each Card, randomly select another Card in the
deck and swap the two Cards.
e) A dealCard function that returns the next Card object from the deck.
f) A moreCards function that returns a bool value indicating whether there are more Cards
to deal.
The driver program should create a DeckOfCards object, shuffle the cards, then deal the 52 cards.
This above is the exercise I'm trying to solve. I'd be very much appreciated if someone could solve it and explain it to me.
The main idea of the program is quite simple. What I don't get is how to build the constructor for the class DeckOfCards and how to generate the 52 cards of the deck with different suits and faces.
Untill now I've managed to do this:
#include <iostream>
#include <vector>
using namespace std;
/*
*
*/
/*
a) Data members face and suit of type int.
b) A constructor that receives two ints representing the face and suit and uses them to initialize
the data members.
c) Two static arrays of strings representing the faces and suits.
d) A toString function that returns the Card as a string in the form “face of suit.” You
can use the + operator to concatenate strings. */
class Card
{
public:
Card(int, int);
string toString();
private:
int suit, face;
static string faceNames[13];
static string suitNames[4];
};
string Card::faceNames[13] = {"Ace","Two","Three","Four","Five","Six","Seven","Eight","Nine","Ten","Queen","Jack","King"};
string Card::suitNames[4] = {"Diamonds","Clubs","Hearts","Spades"};
string Card::toString()
{
return faceNames[face]+" of "+suitNames[suit];
}
Card::Card(int f, int s)
:face(f),
suit(s)
{
}
/*
Class DeckOfCards should contain:
a) A vector of Cards named deck to store the Cards.
b) An integer currentCard representing the next card to deal.
c) A default constructor that initializes the Cards in the deck. The constructor should use
vector function push_back to add each Card to the end of the vector after the Card is
created and initialized. This should be done for each of the 52 Cards in the deck.
d) A shuffle function that shuffles the Cards in the deck. The shuffle algorithm should
iterate through the vector of Cards. For each Card, randomly select another Card in the
deck and swap the two Cards.
e) A dealCard function that returns the next Card object from the deck.
f) A moreCards function that returns a bool value indicating whether there are more Cards
to deal.
*/
class DeckOfCards
{
public:
DeckOfCards();
void shuffleCards();
Card dealCard();
bool moreCards();
private:
vector<Card> deck(52);
int currentCard;
};
int main(int argc, char** argv) {
return 0;
}
DeckOfCards::DeckOfCards()
{
//I'm stuck here I have no idea of what to take out of here.
//I still don't fully get the idea of class inside class and that's turning out as a problem. I try to find a way to set the suits and faces members of the class Card but I can't figure out how.
for(int i=0; i<deck.size(); i++)
{
deck[i]//....There is no function to set them. They must be set when initialized. But how??
}
}
For easier reading: http://pastebin.com/pJeXMH0f