// Assignment_1.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
// ---------------- SOURCE -------------------------
#include
#include
using namespace std;
enum Suit { clubs, diamonds, hearts, spades };
// class Card prototype -----------------------
class Card
{
public:
static const char DFLT_VAL;
static const Suit DFLT_SUIT;
static const string LEGAL_VALS;
private:
char value;
Suit suit;
bool errorFlag;
public:
Card(char value = DFLT_VAL, Suit suit = DFLT_SUIT);
string toString();
bool set(char value = DFLT_VAL, Suit suit = DFLT_SUIT);
char getVal();
Suit getSuit();
bool getErrorFlag();
bool equals(Card card);
private:
// helpers
static bool validVal(char val);
}; // end of class Card prototype --------------
// class Hand prototype -----------------------
class Hand
{
public:
static const char MAX_CARDS = 50;
Hand();
void resetHand();
bool takeCard(Card card);
Card playCard();
string toString();
int getNumCards();
Card inspectCard(int k);
private:
Card myCards[MAX_CARDS];
int numCards;
}; // end of class Hand prototype --------------
const char Card::DFLT_VAL = 'A';
const Suit Card::DFLT_SUIT = spades;
const string Card::LEGAL_VALS = "A23456789TJQK";
int main()
{
Card card1, card2('5'), card3('9', spades),
card4('j', clubs), card5('1', diamonds);
if (!card1.set(2, clubs))
cout 0)
{
Card playCard = myHand.playCard();
cout errorFlag = true;
} else {
this->errorFlag = false;
}
}
// stringizer
string Card::toString()
{
string retVal;
char strVal[2];
// convert char to a CString
strVal[0] = value;
strVal[1] = '\0';
if (errorFlag == true)
{
retVal = "[ illegal ]";
return retVal;
}
// convert from CString to s-c string
retVal = string(strVal);
if (suit == DFLT_SUIT)
retVal += " of Spades";
else if (suit == hearts)
retVal += " of Hearts";
else if (suit == diamonds)
retVal += " of Diamonds";
else if (suit == clubs)
retVal += " of Clubs";
return retVal;
}
// mutator
bool Card::set(char value, Suit suit)
{
// accept lowercase or uppercase
value = toupper((int)value);
// check for validity
if (validVal(value))
{
this->suit = suit;
this->value = value;
this->errorFlag = false;
return true;
}
else
{
this->errorFlag = true;
return false;
}
}
// accessors
char Card::getVal()
{
return value;
}
Suit Card::getSuit()
{
return suit;
}
bool Card::getErrorFlag()
{
return errorFlag;
}
bool Card::equals(Card card)
{
if (value == card.value suit == card.suit errorFlag == card.errorFlag)
{
return true;
}
else
{
return false;
}
}
// static helper for mutators
bool Card::validVal(char val)
{
if (string::npos == LEGAL_VALS.find(val))
return false;
// else
return true;
}
// end of Card method definitions --------------
// beginning of Hand method definitions -------------
// constructor
Hand::Hand()
{
numCards = 0;
}
// remove all cards from the hand
void Hand::resetHand()
{
numCards = 0;
}
// adds card to the next available position in the myCards array
bool Hand::takeCard(Card card)
{
if (numCards = 0)
{
numCards--;
Card card = myCards[numCards];
return card;
}
else
{
Card invalid('0');
return invalid;
}
}
// a stringizer that the client can use prior to displaying the entire hand
string Hand::toString()
{
string retVal;
int i;
retVal += "Hand = ( ";
if (numCards > 0)
{
retVal += myCards[0].toString();
}
for (i = 1; i = 0 k < numCards)
{
return myCards[k];
}
else
{
Card invalid('0');
return invalid;
}
}
// end of Hand method definitions --------------