//----------------------------------------------------------------------
// IMPLEMENTATION FILE (dealer.cpp)
// This module exports CardValType, SuitType, and CardDeckType
// to randomly deal playing cards.
// Machine dependency: long ints must be at least 32 bits (4 bytes).
//----------------------------------------------------------------------
#include "newdeal.h"
// Private members of class:
// RandGen cardGen
// int cardsRemaining
// CardType card[52]
//
// CLASSINV: card[0..cardsRemaining-1] contain the undealt portion
// of the deck
CardDeckType::CardDeckType( /* in */ long initSeed ) : cardGen(initSeed)
//..................................................................
// Constructor
// PRE: initSeed >= 1
// POST: initSeed has been passed to cardGen constructor
// && The deck has been shuffled
//..................................................................
{
ShuffleDeck();
}
void CardDeckType::ShuffleDeck()
//..................................................................
// POST: cardsRemaining == 52
// && For all i, (0<=i<=51), card[i] = is a unique card from the
// deck
//..................................................................
{
int i = 0;
for (int s = clubs; s <= spades; s++)
for (int r = two; r <= ace; r++)
{
card[i]._suit = SuitType (s);
card[i++]._rank = CardValType (r);
}
cardsRemaining = 52;
}
CardType CardDeckType::DealACard()
//..................................................................
// PRE: cardsRemaining >= 1
// POST: Some card[r] has been chosen at random from
// card[0..cardsRemaining-1]
// && FCTVAL == card[r]
// && card[r] has been "removed" by swapping it
// with card[cardsRemaining-1]
// && cardsRemaining == cardsRemaining - 1
//..................................................................
{
int randNo;
CardType temp;
randNo = int( cardGen.NextRand()*float(cardsRemaining) );
temp = card[randNo];
card[randNo] = card[cardsRemaining-1];
card[cardsRemaining-1] = temp;
cardsRemaining--;
return (temp);
}
int CardDeckType::CardsInDeck() const
//..................................................................
// POST: FCTVAL == cardsRemaining
//..................................................................
{
return cardsRemaining;
}