@@ -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
6164Player::~Player () {
62-
65+
6366}
6467
6568int 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+
7691int 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+
102180int Player::getWood () const
103181{
104- return resources[0 ];
182+ return resources[WOOD_INDEX ];
105183}
106184
107185int Player::getBrick () const
108186{
109- return resources[1 ];
187+ return resources[BRICK_INDEX ];
110188}
111189
112190int Player::getOre () const
113191{
114- return resources[2 ];
192+ return resources[ORE_INDEX ];
115193}
116194
117195int Player::getWheat () const
118196{
119- return resources[3 ];
197+ return resources[WHEAT_INDEX ];
120198}
121199
122200int Player::getWool () const
123201{
124- return resources[4 ];
202+ return resources[WOOL_INDEX ];
125203}
126204
127205
128206
129207void 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
134215void 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
139223void 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
144231void 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
149239void 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
154247std::string Player::getName () const
0 commit comments