xref: /reactos/sdk/lib/3rdparty/cardlib/card.h (revision 34593d93)
1 //
2 //	CardLib - Card class
3 //
4 //	Freeware
5 //	Copyright J Brown 2001
6 //
7 
8 #ifndef _CARD_INCLUDED
9 #define _CARD_INCLUDED
10 
11 enum eSuit  { Clubs = 0, Diamonds = 1, Hearts = 2, Spades = 3 };
12 enum eValue { Ace = 1, Two = 2, Three = 3, Four = 4, Five = 5, Six = 6, Seven = 7,
13               Eight = 8, Nine = 9, Ten = 10, Jack = 11, Queen = 12, King = 13 };
14 
MAKE_CARD(int Value,int Suit)15 inline int MAKE_CARD(int Value, int Suit)
16 {
17 	if(Value < 1)	Value = 1;
18 	if(Value == 14) Value = 1;
19 	if(Value >  13) Value = 13;
20 
21 	if(Suit < 0)	Suit = 0;
22 	if(Suit > 3)	Suit = 3;
23 
24 	return ((Value - 1) * 4 + Suit);
25 }
26 
27 class Card
28 {
29 	friend class CardStack;
30 
31 public:
32 
Card()33 	Card()
34 	{
35 		nValue = 0;		//ace of spades by default
36 		fFaceUp = true;
37 	}
38 
Card(int value,int suit)39 	Card(int value, int suit)	//specify a face value [1-13] and suit [0-3]
40 	{
41 		nValue = MAKE_CARD(value, suit);
42 		fFaceUp = true;
43 	}
44 
Card(int index)45 	Card(int index)				//specify a 0-51 index
46 	{
47 		if(index < 0)  index = 0;
48 		if(index > 51) index = 51;
49 
50 		nValue = index;
51 		fFaceUp = true;
52 	}
53 
Suit()54 	int Suit() const
55 	{
56 		return (nValue % 4);
57 	}
58 
LoVal()59 	int LoVal() const
60 	{
61 		return (nValue / 4) + 1;
62 	}
63 
HiVal()64 	int HiVal() const
65 	{
66 		return ((nValue < 4) ? 14 : (nValue / 4) + 1);
67 	}
68 
Idx()69 	int Idx() const //unique value (0-51 etc)
70 	{
71 		return nValue;
72 	}
73 
FaceUp()74 	bool FaceUp() const
75 	{
76 		return fFaceUp;
77 	}
78 
FaceDown()79 	bool FaceDown() const
80 	{
81 		return !fFaceUp;
82 	}
83 
SetFaceUp(bool fTrue)84 	void SetFaceUp(bool fTrue)
85 	{
86 		fFaceUp = fTrue;
87 	}
88 
IsBlack()89 	bool IsBlack() const
90 	{
91 		return Suit() == 0 || Suit() == 3;
92 	}
93 
IsRed()94 	bool IsRed() const
95 	{
96 		return !IsBlack();
97 	}
98 
99 private:
100 
101 	int  nValue;
102 	bool fFaceUp;
103 };
104 
105 #endif /* _CARD_INCLUDED */
106