-
Notifications
You must be signed in to change notification settings - Fork 1
/
Card.cpp
81 lines (67 loc) · 1.17 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
#include "pch.h"
#include "Card.h"
#include "Face.h"
#include "Suit.h"
#include "Deck.h"
Card::Card(int id)
{
SetId(id);
}
Card::Card(Suit suit, Face face)
{
Set(suit, face);
}
Card::Card(Face face, Suit suit)
{
Set(suit, face);
}
void Card::SetId(int id)
{
if (id < 0 || id >= DeckSize)
throw runtime_error{ "Invalid card id." };
suit = static_cast<Suit>(id / FaceCount);
face = static_cast<Face>(id % FaceCount);
}
int Card::GetId() const
{
return static_cast<int>(suit) * FaceCount + static_cast<int>(face);
}
void Card::Set(Suit suit, Face face)
{
this->suit = suit;
this->face = face;
}
void Card::SetSuit(Suit value)
{
suit = value;
}
void Card::SetFace(Face value)
{
face = value;
}
Suit Card::GetSuit() const
{
return suit;
}
Face Card::GetFace() const
{
return face;
}
void Card::SwitchSuit(const map<Suit, Suit>& suitMap)
{
auto iter = suitMap.find(suit);
if (iter != suitMap.end())
suit = iter->second;
}
bool Card::operator==(const Card& rhs) const
{
return suit == rhs.suit && face == rhs.face;
}
bool Card::operator!=(const Card& rhs) const
{
return !operator==(rhs);
}
string Card::ToString() const
{
return ::ToString(face) + ::ToString(suit);
}