-
Notifications
You must be signed in to change notification settings - Fork 0
/
Card.cpp
100 lines (73 loc) · 2.1 KB
/
Card.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include "card.h"
#include "crt.h"
Card::Card() : myRank(1), mySuit(Card::spades) {}
Card::Card(int rank, Suit s) : myRank(rank), mySuit(s) {}
apstring Card::suitString(Suit s) const {
if(s == spades)
return "Spades";
else if(s == hearts)
return "Hearts";
else if(s == diamonds)
return "Diamonds";
else
return "Clubs";
}
apstring Card::rankString(int r) const {
if (1 == r) return "Ace";
else if (2 == r) return "Two";
else if (3 == r) return "Three";
else if (4 == r) return "Four";
else if (5 == r) return "Five";
else if (6 == r) return "Six";
else if (7 == r) return "Seven";
else if (8 == r) return "Eight";
else if (9 == r) return "Nine";
else if (10 == r) return "Ten";
else if (11 == r) return "Jack";
else if (12 == r) return "Queen";
else if (13 == r) return "King";
else return "Joker";
}
apstring Card::toString() const {
if(myRank >= 1 && myRank <= 13)
{
if(mySuit == spades || mySuit == clubs)
SetTextColor(BLACK);
else
SetTextColor(RED);
return rankString(myRank) + " of " + suitString(mySuit);
}
return "zero of doughnuts";
}
bool Card::SameSuitAs(const Card& c) const {
return mySuit == c.mySuit;
}
int Card::GetRank() const {
return myRank;
}
Card::Suit Card::GetSuit() const {
return mySuit;
}
int Card::GetCardNumber(const Card& thisCard) const {
return thisCard.GetSuit() * 13 + thisCard.GetRank();
}
bool Card::IsJoker() const {
return myRank < 1 || 13 < myRank;
}
ostream& operator <<(ostream& out, const Card& c) {
out<<c.toString();
return out;
}
bool operator == (const Card& lhs, const Card& rhs) {
if (lhs.IsJoker() || rhs.IsJoker())
{
return false;
}
return lhs.GetRank() == rhs.GetRank() && lhs.SameSuitAs(rhs);
}
bool operator > (const Card& lhs, const Card& rhs) {
return(lhs.GetCardNumber(lhs) > rhs.GetCardNumber(rhs));
}
bool operator < (const Card& lhs, const Card& rhs) {
return(lhs.GetCardNumber(lhs) < rhs.GetCardNumber(rhs));
}