deck.h
#ifndef _DECK_H_#define _DECK_H_#include "card.h"using namespace std;class Deck{public: unsigned int numCards; vector Cards; Deck() { numCards = 0; } Deck(int ds) { numCards = ds; Cards.resize(numCards); } Deck(const Deck & d) { Cards = d.Cards; numCards = d.numCards; } ~Deck() {}; bool Generate(unsigned int n); void Display(); void Shuffle(); Card TakeBottom(); Card TakeTop(); void AddTop(const Card & c) { ++numCards; vector::iterator e = Cards.end(); Cards.insert(e,c); } void AddBottom(const Card & c) { ++numCards; vector::iterator b = Cards.begin(); Cards.insert(b,c); } void ShiftUp() { Card C = TakeBottom(); AddTop(C); } void ShiftDown() { Card C = TakeTop(); AddBottom(C); } const Deck operator<< ( unsigned int n ) { for(unsigned int i = 0;i < n; ++i) ShiftUp(); return *this; } const Deck operator>> ( unsigned int n ) { for(unsigned int i = 0;i < n; ++i) ShiftDown(); return *this; } /*============================== equality operator, copy ==============================*/ const Deck operator= ( const Deck & a) { Cards = a.Cards; numCards = a.numCards; return *this; } /*============================== adds deck 'a' to the end of 'this' deck ==============================*/ const Deck operator+ ( const Deck & a) { vector::const_iterator b = a.Cards.begin(); vector::const_iterator e = a.Cards.end(); for(;b != e; ++b) { AddTop(*b); } return *this; } const Deck operator+= ( const Deck & a) { vector::const_iterator b = a.Cards.begin(); vector::const_iterator e = a.Cards.end(); for(;b != e; ++b) { AddTop(*b); } return *this; } const Deck operator+ ( const Card & a ) { AddTop(a); return *this; } vector operator/ ( unsigned int n ) { vector d (n); if( n % 2 ) return d; if( n > Cards.size() ) return d; unsigned int i=0,j=0,s=(unsigned int)(Cards.size() / n); for(; i < n; ++i) { for(j=0; j < s; ++j) d.AddBottom(TakeTop()); } return d; }};// Display Suit and Valuevoid DisplaySV(unsigned char sample);#endif
deck.cpp
#include "stdafx.h"#include "deck.h"using namespace std;void DisplaySV(unsigned char sample){ unsigned char sh = sample & 0xF0; unsigned char sl = sample & 0x0F; switch(sh) { case S_SPADE: cout << "S"; break; case S_DIMON: cout << "D"; break; case S_CLUBS: cout << "C"; break; case S_HEART: cout << "H"; break; default: break; } switch(sl) { case 0x01: cout << "A"; break; case 0x0B: cout << "J"; break; case 0x0C: cout << "Q"; break; case 0x0D: cout << "K"; break; default: cout << (int)sl; break; } cout << " ";}bool Deck::Generate(unsigned int n){ if( (n > 1) && (n % 2) ) return false; Cards.resize( n * 52 ); vector::iterator b = Cards.begin(); unsigned char suitn = 0x10; for(unsigned int a=0;a < (n * 4);++a) { for(unsigned char i=1;i<0x0E;++i) { b->value = (unsigned char)(suitn + i); ++b; } suitn = suitn << 1; if(!(suitn & 0xF0)) suitn = 0x10; } numCards = 52 * n; return true;}void Deck::Display(){ vector::iterator B = Cards.begin(); vector::iterator E = Cards.end(); for(;B != E; ++B) DisplaySV(B->value);}void Deck::Shuffle(){ unsigned int sz = numCards; vector D; srand((unsigned)time(NULL)); unsigned int ra = 5 + (rand() % 3); unsigned int rn; Display(); cout << endl; for(unsigned int h = 0;h < ra; ++h) { *this = *this << (1 + (rand() % (sz/4))); D = *this / 2; D[0].Display(); cout << endl; D[1].Display(); cout << endl; for(unsigned int i = 0; i < sz ;) { rn = 1 + (rand() % 3); for(unsigned int j=0;(j < rn && i < sz);++j) { unsigned int tmpD = D[0].numCards; if(tmpD > 0) { Card C = D[0].TakeBottom(); AddTop(C); ++i; } } rn = 1 + (rand() % 3); for(unsigned int k=0;(k < rn && i < sz);++k) { unsigned int tmpD = D[1].numCards; if(tmpD > 0) { Card C = D[1].TakeBottom(); AddTop(C); ++i; } } } } Display(); cout << endl;}Card Deck::TakeBottom(){ Card c; vector::iterator i = Cards.begin(); c = *i; Cards.erase(i,i + 1); --numCards; return c;}Card Deck::TakeTop(){ Card c; vector::iterator i = Cards.end() - 1; c = *i; Cards.erase(i,i + 1); --numCards; return c;}
Even poof I can use it!
Quote:
Dealer: S6 S7 Points: 13
layer: S4 D3 Points: 7
Dealer takes a card..
S6 S7 H2 Points: 15
Dealer takes a card..
S6 S7 H2 SJ Points: 25
layer wins
layer Funds: 290
Press any key to continue . . .
I broke the player name somehow, and I still have not looked into it.