Skip to content

Commit ffe1014

Browse files
committed
Merge remote-tracking branch 'origin/Player' into serialization
Conflicts: include/GameBoard.h include/Player.h src/Player.cpp
2 parents 15df2d0 + 7a5353a commit ffe1014

File tree

2 files changed

+124
-15
lines changed

2 files changed

+124
-15
lines changed

include/Player.h

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,18 @@
1818

1919
#include "GameVisitor.h"
2020

21-
//#include "DevelopmentCard.h"
21+
const int WOOD_INDEX = 0;
22+
const int BRICK_INDEX = 1;
23+
const int ORE_INDEX = 2;
24+
const int WHEAT_INDEX = 3;
25+
const int WOOL_INDEX = 4;
2226

2327

2428
class DevelopmentCard;
2529
class Deck;
2630

27-
//#include <ext/hash_map>
28-
//#include <unordered_map>
31+
32+
2933

3034
class Player {
3135
private:
@@ -36,10 +40,12 @@ class Player {
3640
int armySize;
3741
int longestRoad;
3842
int victoryPoints;
39-
43+
// GameBoard *board;
4044
int resources[5];
4145

4246

47+
48+
4349
public:
4450

4551
Player(std::string playerName);
@@ -49,13 +55,23 @@ class Player {
4955
int getVictoryPoints();
5056
void updateVictoryPoints();
5157

58+
int getVictoryPointsWithoutCards();
59+
int getVictoryPointCards();
60+
5261
int getDevCardsInHand();
5362

5463
void buyCard(std::unique_ptr<DevelopmentCard> card);
5564
std::string getName() const;
5665

5766
void playCard(DevelopmentCard* card);
5867

68+
bool offerTrade(Player* p, int offer[], int demand[]);
69+
bool recieveOffer(Player* p, int offer[], int demand[]);
70+
bool acceptOffer(Player* p, int offer[], int demand[]);
71+
72+
bool checkResources(int resourceList[]);
73+
74+
5975
int getWood() const;
6076
int getBrick() const;
6177
int getOre() const;

src/Player.cpp

Lines changed: 104 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,13 @@ Player::Player(XMLElement* elem)
5656
}
5757
developmentCards.emplace_back(typeIt->second());
5858
}
59+
armySize = 0;
60+
longestRoad = 0;
61+
victoryPoints = 0;
5962
}
6063

6164
Player::~Player() {
62-
65+
6366
}
6467

6568
int Player::getDevCardsInHand()
@@ -73,6 +76,18 @@ void Player::updateVictoryPoints()
7376
//TODO: Calculate and Update victory points
7477
}
7578

79+
int Player::getVictoryPointsWithoutCards()
80+
{
81+
updateVictoryPoints();
82+
return victoryPoints - getVictoryPointCards();
83+
}
84+
85+
int Player::getVictoryPointCards()
86+
{
87+
//TODO:write function
88+
return 0;
89+
}
90+
7691
int Player::getVictoryPoints()
7792
{
7893
updateVictoryPoints();
@@ -99,56 +114,134 @@ void Player::playCard(DevelopmentCard *card)
99114
std::remove_if(developmentCards.begin(), developmentCards.end(), cardTester);
100115
}
101116

117+
bool Player::offerTrade(Player* p, int offer[], int demand[])
118+
{
119+
if(sizeof offer/sizeof(int) != 5 || sizeof demand/sizeof(int) != 5)
120+
return false; //Invalid Trade
121+
122+
if(!this->checkResources(offer))
123+
return false; //YOu dont have enough to offer this
124+
125+
return p->recieveOffer(this, offer, demand);
126+
}
127+
128+
bool Player::recieveOffer(Player* p, int offer[], int demand[])
129+
{
130+
if( !this->checkResources(demand) )
131+
return false;
132+
133+
bool input = true;
134+
135+
//TODO:Display Offer to User and wait for input
136+
137+
if(input)
138+
{
139+
this->acceptOffer(p, offer, demand);
140+
return true;
141+
}
142+
else
143+
return false;
144+
145+
}
146+
147+
148+
bool Player::acceptOffer(Player* p, int offer[], int demand[])
149+
{
150+
p->setWood(demand[WOOD_INDEX] - offer[WOOD_INDEX]);
151+
p->setBrick(demand[BRICK_INDEX] - offer[BRICK_INDEX]);
152+
p->setOre(demand[ORE_INDEX] - offer[ORE_INDEX]);
153+
p->setWheat(demand[WHEAT_INDEX] - offer[WHEAT_INDEX]);
154+
p->setWool(demand[WOOL_INDEX] - offer[WOOL_INDEX]);
155+
156+
this->setWood(offer[WOOD_INDEX] - demand[WOOD_INDEX]);
157+
this->setBrick(offer[BRICK_INDEX] - demand[BRICK_INDEX]);
158+
this->setOre(offer[ORE_INDEX] - demand[ORE_INDEX]);
159+
this->setWheat(offer[WHEAT_INDEX] - demand[WHEAT_INDEX]);
160+
this->setWool(offer[WOOL_INDEX] - demand[WOOL_INDEX]);
161+
162+
return true;
163+
}
164+
165+
166+
167+
168+
169+
bool Player::checkResources(int resourceList[5])
170+
{
171+
for(int i = 0; i < 5; i++)
172+
{
173+
if(resourceList[i] > resources[i] || resourceList[i] < 0)
174+
return false;
175+
}
176+
return true;
177+
}
178+
179+
102180
int Player::getWood() const
103181
{
104-
return resources[0];
182+
return resources[WOOD_INDEX];
105183
}
106184

107185
int Player::getBrick() const
108186
{
109-
return resources[1];
187+
return resources[BRICK_INDEX];
110188
}
111189

112190
int Player::getOre() const
113191
{
114-
return resources[2];
192+
return resources[ORE_INDEX];
115193
}
116194

117195
int Player::getWheat() const
118196
{
119-
return resources[3];
197+
return resources[WHEAT_INDEX];
120198
}
121199

122200
int Player::getWool() const
123201
{
124-
return resources[4];
202+
return resources[WOOL_INDEX];
125203
}
126204

127205

128206

129207
void Player::setWood(int resource)
130208
{
131-
resources[0] = resource;
209+
if(resources[WOOD_INDEX] < (0-resource))
210+
resources[WOOD_INDEX] = 0;
211+
else
212+
resources[WOOD_INDEX] += resource;
132213
}
133214

134215
void Player::setBrick(int resource)
135216
{
136-
resources[1] = resource;
217+
if(resources[BRICK_INDEX] < (0-resource))
218+
resources[BRICK_INDEX] = 0;
219+
else
220+
resources[BRICK_INDEX] += resource;
137221
}
138222

139223
void Player::setOre(int resource)
140224
{
141-
resources[2] = resource;
225+
if(resources[ORE_INDEX] < (0-resource))
226+
resources[ORE_INDEX] = 0;
227+
else
228+
resources[ORE_INDEX] += resource;
142229
}
143230

144231
void Player::setWheat(int resource)
145232
{
146-
resources[3] = resource;
233+
if(resources[WHEAT_INDEX] < (0-resource))
234+
resources[WHEAT_INDEX] = 0;
235+
else
236+
resources[WHEAT_INDEX] += resource;
147237
}
148238

149239
void Player::setWool(int resource)
150240
{
151-
resources[4] = resource;
241+
if(resources[WOOL_INDEX] < (0-resource))
242+
resources[WOOL_INDEX] = 0;
243+
else
244+
resources[WOOL_INDEX] += resource;
152245
}
153246

154247
std::string Player::getName() const

0 commit comments

Comments
 (0)