|
ex4-5.cpp - Example 4-5 Constructor/Destructor - card and deck (2) |
// File: ex4-5.cpp
#include <iostream>
#include <cstdlib> // needed for rand() function
using namespace std;
const char* value_name[13] = {"two","three","four","five","six",
"seven","eight","nine","ten","jack","queen","king","ace"};
const char* suit_name[4] = {"clubs","diamonds","hearts","spades"};
class card
{
private:
int value;
int suit;
public:
card(int=0);
int get_value(void) { return value;} // accessor function
int get_suit(void) { return suit;} // accessor function
void print(void);
};
card::card(int x)
{
x = abs(x)%52; // make sure x is between 0 and 51
value = x % 13;
suit = x / 13;
}
void card::print(void)
{
cout << (value_name[value]) << " of "
<< (suit_name[suit]) << endl;
return;
}
class deck
{
private:
card** d;
int size;
int next_card;
public:
deck(int s = 52);
~deck(void);
void shuffle(void);
void deal(int=5);
void print(void);
};
deck::deck(int s)
{
size = s;
d = new card*[size];
for (int i = 0; i < size; i++) d[i] = new card(i);
next_card = 0;
}
deck::~deck(void)
{
for (int i = 0; i < size; i++) delete d[i];
delete [] d;
cout << "The deck is gone" << endl;
}
void deck::shuffle(void)
{
int i, k;
card* temp;
cout << "I am shuffling the deck\n";
for (i = 0; i < size; i++)
{
k = rand() % size;
temp = d[i];
d[i] = d[k];
d[k] = temp;
}
return;
}
void deck::print(void)
{
for (int i = 0; i < size; i++)
d[i]->print(); // same as (*d[i]).print()
return;
}
void deck::deal(int no_of_cards)
{
cout << "\nOk, I will deal you " << no_of_cards << " cards:\n";
for (int i = 0; i < no_of_cards; i++)
d[next_card++]->print();
return;
}
int main (void)
{
deck poker;
poker.shuffle();
poker.print();
poker.deal();
poker.deal(3);
return 0;
}
CIS27: Programming in C++ Instructor: Joe Bentley