mirror of
https://github.com/reactos/reactos.git
synced 2024-12-29 10:35:28 +00:00
105 lines
1.5 KiB
C++
105 lines
1.5 KiB
C++
//
|
|
// CardLib - Card class
|
|
//
|
|
// Freeware
|
|
// Copyright J Brown 2001
|
|
//
|
|
|
|
#ifndef _CARD_INCLUDED
|
|
#define _CARD_INCLUDED
|
|
|
|
enum eSuit { Clubs = 0, Diamonds = 1, Hearts = 2, Spades = 3 };
|
|
enum eValue { Ace = 1, Two = 2, Three = 3, Four = 4, Five = 5, Six = 6, Seven = 7,
|
|
Eight = 8, Nine = 9, Ten = 10, Jack = 11, Queen = 12, King = 13 };
|
|
|
|
inline int MAKE_CARD(int Value, int Suit)
|
|
{
|
|
if(Value < 1) Value = 1;
|
|
if(Value == 14) Value = 1;
|
|
if(Value > 13) Value = 13;
|
|
|
|
if(Suit < 0) Suit = 0;
|
|
if(Suit > 3) Suit = 3;
|
|
|
|
return ((Value - 1) * 4 + Suit);
|
|
}
|
|
|
|
class Card
|
|
{
|
|
friend class CardStack;
|
|
|
|
public:
|
|
|
|
Card()
|
|
{
|
|
nValue = 0; //ace of spades by default
|
|
fFaceUp = true;
|
|
}
|
|
|
|
Card(int value, int suit) //specify a face value [1-13] and suit [0-3]
|
|
{
|
|
nValue = MAKE_CARD(value, suit);
|
|
fFaceUp = true;
|
|
}
|
|
|
|
Card(int index) //specify a 0-51 index
|
|
{
|
|
if(index < 0) index = 0;
|
|
if(index > 51) index = 51;
|
|
|
|
nValue = index;
|
|
fFaceUp = true;
|
|
}
|
|
|
|
int Suit() const
|
|
{
|
|
return (nValue % 4);
|
|
}
|
|
|
|
int LoVal() const
|
|
{
|
|
return (nValue / 4) + 1;
|
|
}
|
|
|
|
int HiVal() const
|
|
{
|
|
return ((nValue < 4) ? 14 : (nValue / 4) + 1);
|
|
}
|
|
|
|
int Idx() const //unique value (0-51 etc)
|
|
{
|
|
return nValue;
|
|
}
|
|
|
|
bool FaceUp() const
|
|
{
|
|
return fFaceUp;
|
|
}
|
|
|
|
bool FaceDown() const
|
|
{
|
|
return !fFaceUp;
|
|
}
|
|
|
|
void SetFaceUp(bool fTrue)
|
|
{
|
|
fFaceUp = fTrue;
|
|
}
|
|
|
|
bool IsBlack() const
|
|
{
|
|
return Suit() == 0 || Suit() == 3;
|
|
}
|
|
|
|
bool IsRed() const
|
|
{
|
|
return !IsBlack();
|
|
}
|
|
|
|
private:
|
|
|
|
int nValue;
|
|
bool fFaceUp;
|
|
};
|
|
|
|
#endif /* _CARD_INCLUDED */
|