@@ -149,6 +149,9 @@ void printPlayerInfo(const Player& player) {
149149 */
150150bool GameController::nextTurn (ScreenCoordinate) {
151151 model.endTurn ();
152+ if (model.getDice ().getFirst () + model.getDice ().getSecond () == 7 )
153+ pushState (ROBBER);
154+
152155 printPlayerInfo (model.getCurrentPlayer ());
153156 return true ;
154157}
@@ -163,6 +166,8 @@ bool GameController::nextTurn(ScreenCoordinate) {
163166bool GameController::handleBoardEvent (ScreenCoordinate screenCoord) {
164167 printPlayerInfo (model.getCurrentPlayer ());
165168 auto coord = screenToCoord (screenCoord);
169+ std::vector<Settlement*> neighbors;
170+ int resourceToSteal;
166171
167172 switch (getState ()){
168173 case BUILDROAD:
@@ -178,6 +183,19 @@ bool GameController::handleBoardEvent(ScreenCoordinate screenCoord) {
178183 break ;
179184 case ROBBER:
180185 // model.moveRobber(coord);
186+ robPlayers ();
187+
188+ if (!hasClickHistory ())
189+ storeClick (coord);
190+
191+ model.moveRobber (coord);
192+ neighbors = model.GetNeighboringSettlements (coord);
193+ if (!neighbors.empty ()) {
194+ resourceToSteal = neighbors[0 ]->getOwner ().getRandomResource ();
195+ neighbors[0 ]->getOwner ().addResource (resourceToSteal, -1 );
196+ model.getCurrentPlayer ().addResource (resourceToSteal, 1 );
197+ }
198+
181199 popState ();
182200 break ;
183201 case BUILDROAD_DEVCARD:
@@ -194,6 +212,26 @@ bool GameController::handleBoardEvent(ScreenCoordinate screenCoord) {
194212 case KNIGHT_DEVCARD:
195213 storeClick (coord);
196214 view.setControlStateText (" Select a player around that tile to steal from (Select yourself if you don't want to rob anyone)" );
215+ // model.getCurrentPlayer().playKnight(coord, opponent);
216+ /* *if(!hasClickHistory())
217+ storeClick(coord);
218+
219+ model.moveRobber(coord);
220+ neighbors = model.GetNeighboringSettlements(coord);
221+ if (!neighbors.empty()) {
222+ resourceToSteal = neighbors[0]->getOwner().getRandomResource();
223+ neighbors[0]->getOwner().addResource(resourceToSteal, -1);
224+ model.getCurrentPlayer().addResource(resourceToSteal, 1);
225+ }
226+
227+ //TODO Decrement knight count
228+
229+
230+
231+ popState();**/
232+ break ;
233+ case YEAROFPLENTY_DEVCARD:
234+ model.getCurrentPlayer ().playYearOfPlenty (model.getResourceTile (coord).getType ());
197235 popState ();
198236 break ;
199237 case VICTORYPOINT_DEVCARD:
@@ -216,6 +254,26 @@ bool GameController::handleBoardEvent(ScreenCoordinate screenCoord) {
216254 return true ;
217255}
218256
257+ void GameController :: robPlayers() {
258+ for (int i = 0 ; i < model.getNoOfPlayers (); i++) {
259+ int resources[5 ];
260+ model.getPlayer (i).checkResources (resources);
261+ // int rSum = resources[0] + resources[1] + resources[2] + resources[3] + resources[4];
262+ int rSum = model.getPlayer (i).getWood () +
263+ model.getPlayer (i).getOre () +
264+ model.getPlayer (i).getBrick () +
265+ model.getPlayer (i).getWheat () +
266+ model.getPlayer (i).getWool ();
267+
268+ if (rSum > 7 ) {
269+ for (int j = 0 ; j < rSum/2 ; j++) {
270+ model.getPlayer (i).addResource (model.getPlayer (i).getRandomResource (), -1 );
271+
272+ }
273+ }
274+ }
275+ }
276+
219277/* *
220278 * Handles the event when the cancel button in the top right corner of the screen is pressed. This will
221279 * reset the control state back to the base state.
0 commit comments