Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

cardstack.cpp

Go to the documentation of this file.
00001 //
00002 //    CardLib - CardStack class
00003 //
00004 //    Freeware
00005 //    Copyright J Brown 2001
00006 //
00007 #include <windows.h>
00008 #include <stdlib.h>
00009 
00010 #include "cardstack.h"
00011 
00012 Card &CardStack::operator[] (size_t index)
00013 {
00014     if(index >= (size_t)nNumCards) index = nNumCards - 1;
00015     return cardlist[nNumCards - index - 1];
00016 }
00017 
00018 const Card &CardStack::operator[] (size_t index) const
00019 {
00020     if(index >= (size_t)nNumCards) index = nNumCards - 1;
00021     return cardlist[nNumCards - index - 1];
00022 }
00023 
00024 //    Subscripting operator for a constant sequence
00025 //
00026 /*Card CardStack::operator[] (size_t index) const
00027 {
00028     return cardlist[index];
00029 }*/
00030 
00031 //
00032 //    Subscripting operator for a non-const sequence
00033 //
00034 /*CardStack::ref  CardStack::operator[] (size_t index)
00035 {
00036     return ref(this, index);
00037 }*/
00038 
00039 void CardStack::Clear()
00040 {
00041     nNumCards = 0;
00042 }
00043 
00044 void CardStack::NewDeck()
00045 {
00046     nNumCards = 52;
00047 
00048     for(int i = 0; i < 52; i++)
00049         cardlist[i].nValue = i;
00050 }
00051 
00052 void CardStack::Shuffle()
00053 {
00054     int src, dest;
00055     Card temp;
00056 
00057     //shuffle 8 times..
00058     for(int i = 0; i < 8; i++)
00059         for(dest = nNumCards - 1; dest > 0; dest--)
00060         {
00061             //want to do this:
00062             //  bad:   src = rand() % (dest + 1)
00063             //  good:  src = rand() / (RAND_MAX / (dest+1) + 1)
00064 
00065             //positions from 0 to dest
00066             src = rand() / (RAND_MAX / (dest+1) + 1);
00067 
00068             //swap the cards
00069             temp           = cardlist[src];
00070             cardlist[src]  = cardlist[dest];
00071             cardlist[dest] = temp;
00072         }
00073 }
00074 
00075 void CardStack::Reverse()
00076 {
00077     for(int i = 0; i < nNumCards / 2; i++)
00078     {
00079         Card temp                   = cardlist[i];
00080         cardlist[i]                 = cardlist[nNumCards - i - 1];
00081         cardlist[nNumCards - i - 1] = temp;
00082     }
00083 }
00084 
00085 void CardStack::Push(const Card card)
00086 {
00087     if(nNumCards < MAX_CARDSTACK_SIZE)
00088         cardlist[nNumCards++] = card;
00089 }
00090 
00091 void CardStack::Push(const CardStack &cardstack)
00092 {
00093     if(nNumCards + cardstack.nNumCards < MAX_CARDSTACK_SIZE)
00094     {
00095         int num = cardstack.NumCards();
00096 
00097         for(int i = 0; i < num; i++)
00098             cardlist[nNumCards++] = cardstack.cardlist[i];
00099     }
00100 }
00101 
00102 CardStack& CardStack::operator += (Card card)
00103 {
00104     Push(card);
00105     return *this;
00106 }
00107 
00108 CardStack& CardStack::operator += (CardStack &cs)
00109 {
00110     Push(cs);
00111     return *this;
00112 }
00113 
00114 CardStack CardStack::operator +  (Card card)
00115 {
00116     CardStack poo = *this;
00117     poo.Push(card);
00118     return poo;
00119 }
00120 
00121 CardStack CardStack::operator + (CardStack &cs)
00122 {
00123     CardStack poo = *this;
00124     poo.Push(cs);
00125     return poo;
00126 }
00127 
00128 
00129 Card CardStack::Pop()
00130 {
00131     if(nNumCards > 0)
00132         return cardlist[--nNumCards];
00133     else
00134         return 0;
00135 }
00136 
00137 CardStack CardStack::Pop(int items)
00138 {
00139     if(items <= nNumCards && nNumCards > 0)
00140     {
00141         CardStack cs(*this, nNumCards - items);
00142 
00143         nNumCards -= items;
00144 
00145         return cs;
00146     }
00147     else
00148     {
00149         return CardStack();
00150     }
00151 }
00152 
00153 Card CardStack::Top()
00154 {
00155     if(nNumCards > 0)
00156         return cardlist[nNumCards - 1];
00157     else
00158         return 0;
00159 }
00160 
00161 CardStack CardStack::Top(int items)
00162 {
00163     if(items <= nNumCards && nNumCards > 0)
00164     {
00165         return CardStack (*this, nNumCards - items);
00166     }
00167     else
00168     {
00169         return CardStack();
00170     }
00171 
00172 }
00173 
00174 Card CardStack::RemoveCard(size_t index)
00175 {
00176     if(nNumCards == 0 || index >= (size_t)nNumCards)
00177         return 0;
00178 
00179     //put index into reverse range..
00180     index = nNumCards - index - 1;
00181 
00182     Card temp = cardlist[index];
00183 
00184     nNumCards--;
00185 
00186     for(size_t i = index; i < (size_t)nNumCards; i++)
00187     {
00188         cardlist[i] = cardlist[i+1];
00189     }
00190 
00191     return temp;
00192 }
00193 
00194 void CardStack::InsertCard(size_t index, Card card)
00195 {
00196     if(nNumCards == MAX_CARDSTACK_SIZE)
00197         return;
00198 
00199     if(index > (size_t)nNumCards)
00200         return;
00201 
00202     if((size_t)nNumCards == index)
00203     {
00204         cardlist[nNumCards] = card;
00205         nNumCards++;
00206         return;
00207     }
00208 
00209     //put index into reverse range..
00210     index = nNumCards - index - 1;
00211 
00212     nNumCards++;
00213 
00214     //make room for the card
00215     for(size_t i = nNumCards; i > index; i--)
00216     {
00217         cardlist[i] = cardlist[i - 1];
00218     }
00219 
00220     cardlist[index] = card;
00221 }
00222 
00223 
00224 void CardStack::Print()
00225 {
00226 //    for(int i = 0; i < nNumCards; i++)
00227 //        cout << cardlist[i].HiVal() << " ";
00228 }
00229 
00230 CardStack::CardStack(CardStack &copythis, size_t fromindex)
00231 {
00232     nNumCards = copythis.nNumCards - fromindex;
00233 
00234     for(int i = 0; i < nNumCards; i++)
00235         cardlist[i] = copythis.cardlist[fromindex + i];
00236 }
00237 

Generated on Thu Feb 9 04:59:29 2012 for ReactOS by doxygen 1.6.3

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.