@@ -39,11 +39,11 @@ Player::Player(XMLElement* elem)
3939 r = 0 ;
4040 }
4141 name = elem->FirstChildElement (" name" )->FirstChild ()->Value ();
42- setWood (fromString<int >(elem->FirstChildElement (" wood" )->FirstChild ()->Value ()));
43- setBrick (fromString<int >(elem->FirstChildElement (" brick" )->FirstChild ()->Value ()));
44- setOre (fromString<int >(elem->FirstChildElement (" ore" )->FirstChild ()->Value ()));
45- setWheat (fromString<int >(elem->FirstChildElement (" wheat" )->FirstChild ()->Value ()));
46- setWool (fromString<int >(elem->FirstChildElement (" wool" )->FirstChild ()->Value ()));
42+ addWood (fromString<int >(elem->FirstChildElement (" wood" )->FirstChild ()->Value ()));
43+ addBrick (fromString<int >(elem->FirstChildElement (" brick" )->FirstChild ()->Value ()));
44+ addOre (fromString<int >(elem->FirstChildElement (" ore" )->FirstChild ()->Value ()));
45+ addWheat (fromString<int >(elem->FirstChildElement (" wheat" )->FirstChild ()->Value ()));
46+ addWool (fromString<int >(elem->FirstChildElement (" wool" )->FirstChild ()->Value ()));
4747 XMLElement* cardsElement = elem->FirstChildElement (" cards" );
4848 for (auto cardElem = cardsElement->FirstChildElement (" card" ); cardElem; cardElem = cardElem->NextSiblingElement (" card" )) {
4949 static const map<std::string, std::function<std::unique_ptr<DevelopmentCard>(void )>> typeToCard = {
@@ -73,6 +73,27 @@ int Player::getDevCardsInHand()
7373 return developmentCards.size ();
7474}
7575
76+ /* *
77+ * Returns true if the player has enough resources to buy a road, false otherwise
78+ */
79+ bool Player::canBuyRoad (){
80+ return getWood () > 0 && getBrick () > 0 ;
81+ }
82+
83+ /* *
84+ * Subtracts the cost of a road from a player's resources if they have enough
85+ * returns true if the resources were subtracted, false otherwise
86+ */
87+ bool Player::buyRoad (){
88+ if (canBuyRoad ()){
89+ addWood (-1 );
90+ addBrick (-1 );
91+ return true ;
92+ }
93+ // insufficient funds
94+ return false ;
95+ }
96+
7697
7798void Player::updateVictoryPoints ()
7899{
@@ -150,17 +171,17 @@ bool Player::recieveOffer(Player* p, int offer[], int demand[])
150171
151172bool Player::acceptOffer (Player* p, int offer[], int demand[])
152173{
153- p->setWood (demand[WOOD_INDEX] - offer[WOOD_INDEX]);
154- p->setBrick (demand[BRICK_INDEX] - offer[BRICK_INDEX]);
155- p->setOre (demand[ORE_INDEX] - offer[ORE_INDEX]);
156- p->setWheat (demand[WHEAT_INDEX] - offer[WHEAT_INDEX]);
157- p->setWool (demand[WOOL_INDEX] - offer[WOOL_INDEX]);
158-
159- this ->setWood (offer[WOOD_INDEX] - demand[WOOD_INDEX]);
160- this ->setBrick (offer[BRICK_INDEX] - demand[BRICK_INDEX]);
161- this ->setOre (offer[ORE_INDEX] - demand[ORE_INDEX]);
162- this ->setWheat (offer[WHEAT_INDEX] - demand[WHEAT_INDEX]);
163- this ->setWool (offer[WOOL_INDEX] - demand[WOOL_INDEX]);
174+ p->addWood (demand[WOOD_INDEX] - offer[WOOD_INDEX]);
175+ p->addBrick (demand[BRICK_INDEX] - offer[BRICK_INDEX]);
176+ p->addOre (demand[ORE_INDEX] - offer[ORE_INDEX]);
177+ p->addWheat (demand[WHEAT_INDEX] - offer[WHEAT_INDEX]);
178+ p->addWool (demand[WOOL_INDEX] - offer[WOOL_INDEX]);
179+
180+ this ->addWood (offer[WOOD_INDEX] - demand[WOOD_INDEX]);
181+ this ->addBrick (offer[BRICK_INDEX] - demand[BRICK_INDEX]);
182+ this ->addOre (offer[ORE_INDEX] - demand[ORE_INDEX]);
183+ this ->addWheat (offer[WHEAT_INDEX] - demand[WHEAT_INDEX]);
184+ this ->addWool (offer[WOOL_INDEX] - demand[WOOL_INDEX]);
164185
165186 return true ;
166187}
@@ -207,39 +228,39 @@ int Player::getWool() const
207228
208229
209230
210- void Player::setWood (int resource)
231+ void Player::addWood (int resource)
211232{
212233 if (resources[WOOD_INDEX] < (0 -resource))
213234 resources[WOOD_INDEX] = 0 ;
214235 else
215236 resources[WOOD_INDEX] += resource;
216237}
217238
218- void Player::setBrick (int resource)
239+ void Player::addBrick (int resource)
219240{
220241 if (resources[BRICK_INDEX] < (0 -resource))
221242 resources[BRICK_INDEX] = 0 ;
222243 else
223244 resources[BRICK_INDEX] += resource;
224245}
225246
226- void Player::setOre (int resource)
247+ void Player::addOre (int resource)
227248{
228249 if (resources[ORE_INDEX] < (0 -resource))
229250 resources[ORE_INDEX] = 0 ;
230251 else
231252 resources[ORE_INDEX] += resource;
232253}
233254
234- void Player::setWheat (int resource)
255+ void Player::addWheat (int resource)
235256{
236257 if (resources[WHEAT_INDEX] < (0 -resource))
237258 resources[WHEAT_INDEX] = 0 ;
238259 else
239260 resources[WHEAT_INDEX] += resource;
240261}
241262
242- void Player::setWool (int resource)
263+ void Player::addWool (int resource)
243264{
244265 if (resources[WOOL_INDEX] < (0 -resource))
245266 resources[WOOL_INDEX] = 0 ;
0 commit comments