Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygencardstack.cppGo 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 ©this, 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
1.6.3
|