diff --git a/core/src/cz/nic/tablexia/model/game/UserTrophy.java b/core/src/cz/nic/tablexia/model/game/UserTrophy.java index c30fc380885572c1a55f75ccc1d8c7d4239ffe3f..e09600dfc32915530eb0fb5319a23a8b55c2f15d 100644 --- a/core/src/cz/nic/tablexia/model/game/UserTrophy.java +++ b/core/src/cz/nic/tablexia/model/game/UserTrophy.java @@ -198,15 +198,32 @@ public class UserTrophy { } catch (SQLException e) { Log.err(UserTrophy.class, "Cannot select game with user_id: " + user.getId() + ", difficulty: " + trophyDef.getLimit(), e); } - Set<Integer> gamesPlayed = new HashSet<Integer>(); + + if(games.size() < GameDefinition.values().length) return false; + int[] sixConsecutiveGames = new int[GameDefinition.values().length]; for (Game game : games) { - if (GameDAO.getGameResult(game).getStarCount() == AbstractTablexiaGame.GameResult.THREE_STAR.getStarCount() - && !gamesPlayed.contains(game.getGameNumber())) { - gamesPlayed.add(game.getGameNumber()); - if (gamesPlayed.size() == GameDefinition.values().length) return true; - } else { - gamesPlayed.clear(); + boolean duplicateFound = false; + + //shifting games in array + for (int i = 0; i < sixConsecutiveGames.length - 1; i++) { + sixConsecutiveGames[i] = sixConsecutiveGames[i + 1]; + } + sixConsecutiveGames[sixConsecutiveGames.length - 1] = game.getGameNumber(); + + //if array sixConsecutiveGames has minimum number of games loaded, we can try achieve a trophy + if(games.indexOf(game) + 1 >= GameDefinition.values().length) { + for (int i = 0; i < sixConsecutiveGames.length; i++) { + for (int j = i + 1; j < sixConsecutiveGames.length; j++) { + if (sixConsecutiveGames[i] == sixConsecutiveGames[j] || + GameDAO.getGameResult(game).getStarCount() != AbstractTablexiaGame.GameResult.THREE_STAR.getStarCount()) { + duplicateFound = true; + break; + } + } + if (duplicateFound) break; + } + if (!duplicateFound) return true; } } return false;