-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathPlayer.cpp
91 lines (73 loc) · 2.08 KB
/
Player.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
#include "Player.h"
void Player::setGame(Game *game) {
_game = game;
}
void Player::giveCard(Card *card) {
_hand.push_back(card);
}
void Player::discardHand() {
}
void Player::displayHand(int row) {
cout << AdvancedConsole::Cursor(row, 0) << AdvancedConsole::Erase(AdvancedConsole::AC_ALL, AdvancedConsole::AC_LINE)
<< "Your Hand: ";
for (Card *c: _hand) {
cout << *c << " ";
}
cout << endl << endl;
}
std::ostream &operator<<(std::ostream &os, const Player &c) {
return os << c._name;
}
Team *Player::getTeam() {
return _team;
}
void Player::setTeam(Team *team) {
_team = team;
}
Player::Player() {
_isDummy = false;
}
std::vector<Card *> Player::getAvailableCards(Color::Type color) {
std::vector<Card *> available_cards;
copy_if(_hand.begin(), _hand.end(), std::back_inserter(available_cards),
[color](const Card *card) {
return card->getColor() == color;
});
if (available_cards.empty()) return _hand;
return available_cards;
}
bool Player::hasColor(Color::Type color) {
std::vector<Card *> available_cards;
copy_if(_hand.begin(), _hand.end(), std::back_inserter(available_cards),
[color](const Card *card) {
return card->getColor() == color;
});
return !available_cards.empty();
}
Card *Player::playCard() {
std::vector<Card *> available_cards = getAvailableCards(
_game->getCurrentDeal()->getCurrentTrick()->getStartingColor());
Card *card = makeDecision(available_cards);
_hand.erase(std::find_if(_hand.begin(), _hand.end(), [card](Card *p) -> bool { return card == p; }));
return card;
}
void Player::unserialize(nlohmann::json data) {
_name.assign(data["name"]);
_hand.clear();
for (const auto &c: data["hand"]) {
_hand.push_back(Card::get(c));
}
}
json Player::serializeHand() {
json hand;
for (auto c: _hand) {
hand += c->serialize();
}
return hand;
}
string Player::getName() {
return _name;
}
void Player::setName(string name) {
_name = name;
}