Reactos
at master 92 lines 1.7 kB view raw
1// 2// CardCount is a helper library for CardStacks. 3// 4// When you initialize a CardCount object with a 5// cardstack, it keeps track of the number of cards 6// the stack contains. 7// 8// e.g. CardCount count(cardstack); 9// 10// Then you can do: 11// 12// int num_fives = count[5] 13// 14// count.Add(cardstack2); - combine with another stack 15// 16// int num_aces = count[1] - aces low 17// int num_aces = count[14] - aces high 18// 19// count.Clear(); 20// 21 22#include "cardlib.h" 23#include "cardcount.h" 24 25CardCount::CardCount() 26{ 27 Clear(); 28} 29 30CardCount::CardCount(const CardStack &cs) 31{ 32 Init(cs); 33} 34 35void CardCount::Clear() 36{ 37 for(int i = 0; i < 13; i++) 38 count[i] = 0; 39} 40 41void CardCount::Add(const CardStack &cs) 42{ 43 for(int i = 0; i < cs.NumCards(); i++) 44 { 45 Card card = cs[i]; 46 47 int val = card.LoVal(); 48 count[val - 1]++; 49 } 50} 51 52void CardCount::Sub(const CardStack &cs) 53{ 54 for(int i = 0; i < cs.NumCards(); i++) 55 { 56 Card card = cs[i]; 57 int val = card.LoVal(); 58 59 if(count[val - 1] > 0) 60 count[val - 1]--; 61 } 62} 63 64void CardCount::Init(const CardStack &cs) 65{ 66 Clear(); 67 Add(cs); 68} 69 70int CardCount::operator [] (size_t index) const 71{ 72 if(index < 1) return 0; 73 else if(index > 14) return 0; //if out of range 74 else if(index == 14) index = 1; //if a "ace-high" 75 76 return count[index - 1]; 77} 78 79// 80// Decrement specified item by one 81// 82void CardCount::Dec(size_t index) 83{ 84 if(index < 1) return; 85 else if(index > 14) return; //if out of range 86 else if(index == 14) index = 1; //if a "ace-high" 87 88 index -= 1; 89 90 if(count[index] > 0) 91 count[index]--; 92}