diff --git a/.idea/misc.xml b/.idea/misc.xml index c3dfb30..b573818 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/src/ch/zhaw/catan/SiedlerGame.java b/src/ch/zhaw/catan/SiedlerGame.java index b14895a..c2b612b 100644 --- a/src/ch/zhaw/catan/SiedlerGame.java +++ b/src/ch/zhaw/catan/SiedlerGame.java @@ -24,6 +24,7 @@ public class SiedlerGame { private final int winPointsForWin; private final Bank bank; private int activePlayer; + private HashMap longestRoadFaction; /** * Constructs a SiedlerGame game state object. @@ -43,6 +44,7 @@ public class SiedlerGame { allPlayers = new ArrayList<>(); createPlayer(numberOfPlayers); activePlayer = 0; + longestRoadFaction = new HashMap<>(); this.winPointsForWin = winPoints; } @@ -504,7 +506,8 @@ public class SiedlerGame { winPoints ++; } } - if(getLongestRoadFaction() == getCurrentPlayerFaction()){ + longestRoadFaction = getLongestRoadFaction(longestRoadFaction); + if(longestRoadFaction.get(getCurrentPlayerFaction()) != null){ winPoints += 2; } return winPoints; @@ -515,12 +518,12 @@ public class SiedlerGame { * This method returns the faction of the player with the longest road longer than 5. * @return null if there is no player with a road longer than 5 otherwise it returns the faction of the specific player */ - private Faction getLongestRoadFaction() { + private HashMap getLongestRoadFaction(HashMap currentLongestRoad) { List corners = board.getCorners(); List factionList = getPlayerFactions(); HashMap players = new HashMap<>(); int highest = 0; - Config.Faction longestRoad = null; + for(Config.Faction faction : factionList) { int count = 0; players.put(faction,count); @@ -535,12 +538,14 @@ public class SiedlerGame { } } for(Config.Faction faction : players.keySet()) { - if(players.get(faction) >= 5 && players.get(faction)>highest) { - highest = players.get(faction); - longestRoad = faction; + for(Config.Faction faction1 : currentLongestRoad.keySet()) { + if(players.get(faction) >= 5 && players.get(faction) > currentLongestRoad.get(faction1)) { + currentLongestRoad.remove(faction1); + currentLongestRoad.put(faction,players.get(faction)); + } } } - return longestRoad; + return currentLongestRoad; } /**