Something went wrong. Try again.
Reactos
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236//// CardLib - CardStack class//// Freeware// Copyright J Brown 2001//
#include "cardlib.h"
Card &CardStack::operator[] (size_t index){ if(index >= (size_t)nNumCards) index = nNumCards - 1; return cardlist[nNumCards - index - 1];}
const Card &CardStack::operator[] (size_t index) const{ if(index >= (size_t)nNumCards) index = nNumCards - 1; return cardlist[nNumCards - index - 1];}
// Subscripting operator for a constant sequence///*Card CardStack::operator[] (size_t index) const{ return cardlist[index];}*/
//// Subscripting operator for a non-const sequence///*CardStack::ref CardStack::operator[] (size_t index){ return ref(this, index);}*/
void CardStack::Clear(){ nNumCards = 0;}
void CardStack::NewDeck(){ nNumCards = 52;
for(int i = 0; i < 52; i++) cardlist[i].nValue = i;}
void CardStack::Shuffle(){ int src, dest; Card temp;
//shuffle 8 times.. for(int i = 0; i < 8; i++) for(dest = nNumCards - 1; dest > 0; dest--) { //want to do this: // bad: src = rand() % (dest + 1) // good: src = rand() / (RAND_MAX / (dest+1) + 1)
//positions from 0 to dest src = rand() / (RAND_MAX / (dest+1) + 1);
//swap the cards temp = cardlist[src]; cardlist[src] = cardlist[dest]; cardlist[dest] = temp; }}
void CardStack::Reverse(){ for(int i = 0; i < nNumCards / 2; i++) { Card temp = cardlist[i]; cardlist[i] = cardlist[nNumCards - i - 1]; cardlist[nNumCards - i - 1] = temp; }}
void CardStack::Push(const Card card){ if(nNumCards < MAX_CARDSTACK_SIZE) cardlist[nNumCards++] = card;}
void CardStack::Push(const CardStack &cardstack){ if(nNumCards + cardstack.nNumCards < MAX_CARDSTACK_SIZE) { int num = cardstack.NumCards();
for(int i = 0; i < num; i++) cardlist[nNumCards++] = cardstack.cardlist[i]; }}
CardStack& CardStack::operator += (Card card){ Push(card); return *this;}
CardStack& CardStack::operator += (CardStack &cs){ Push(cs); return *this;}
CardStack CardStack::operator + (Card card){ CardStack poo = *this; poo.Push(card); return poo;}
CardStack CardStack::operator + (CardStack &cs){ CardStack poo = *this; poo.Push(cs); return poo;}
Card CardStack::Pop(){ if(nNumCards > 0) return cardlist[--nNumCards]; else return 0;}
CardStack CardStack::Pop(int items){ if(items <= nNumCards && nNumCards > 0) { CardStack cs(*this, nNumCards - items);
nNumCards -= items;
return cs; } else { return CardStack(); }}
Card CardStack::Top(){ if(nNumCards > 0) return cardlist[nNumCards - 1]; else return 0;}
CardStack CardStack::Top(int items){ if(items <= nNumCards && nNumCards > 0) { return CardStack (*this, nNumCards - items); } else { return CardStack(); }
}
Card CardStack::RemoveCard(size_t index){ if(nNumCards == 0 || index >= (size_t)nNumCards) return 0;
//put index into reverse range.. index = nNumCards - index - 1;
Card temp = cardlist[index];
nNumCards--;
for(size_t i = index; i < (size_t)nNumCards; i++) { cardlist[i] = cardlist[i+1]; }
return temp;}
void CardStack::InsertCard(size_t index, Card card){ if(nNumCards == MAX_CARDSTACK_SIZE) return;
if(index > (size_t)nNumCards) return;
if((size_t)nNumCards == index) { cardlist[nNumCards] = card; nNumCards++; return; }
//put index into reverse range.. index = nNumCards - index - 1;
nNumCards++;
//make room for the card for(size_t i = nNumCards; i > index; i--) { cardlist[i] = cardlist[i - 1]; }
cardlist[index] = card;}
void CardStack::Print(){// for(int i = 0; i < nNumCards; i++)// cout << cardlist[i].HiVal() << " ";}
CardStack::CardStack(CardStack ©this, size_t fromindex){ nNumCards = copythis.nNumCards - fromindex;
for(int i = 0; i < nNumCards; i++) cardlist[i] = copythis.cardlist[fromindex + i];}