diff --git a/core/src/cz/nic/tablexia/game/GameDefinition.java b/core/src/cz/nic/tablexia/game/GameDefinition.java index 538559521b2b2f63ff2e9b9583f252d365367858..855035ec0925594171a970b73121fd4855ac56c3 100644 --- a/core/src/cz/nic/tablexia/game/GameDefinition.java +++ b/core/src/cz/nic/tablexia/game/GameDefinition.java @@ -52,10 +52,15 @@ public enum GameDefinition implements ApplicationEvent, IMenuItem { public abstract float getGameScoreResult(Game game); public abstract List<GameScore> getGameScoreList(GameDifficulty difficulty, AbstractTablexiaGame.GameResult result); - //Override this method if you want to use different values to sort graphs in statistics screen + //Override this method if you want to use different values to sort graphs in statistics screen (eg. CrimeScene) public float getStatisticsScore(Game game) { return getGameScoreResult(game); } + + //Override this method if you want to show different formatted score in graph detail dialogs in statistics screen (eg. Pursuit or CrimeScene) + public String getFormattedScoreForStatistics(Game game) { + return Integer.toString(Math.round(getGameScoreResult(game))); + } } private int gameNumber; diff --git a/core/src/cz/nic/tablexia/game/games/crime_scene/CrimeSceneGame.java b/core/src/cz/nic/tablexia/game/games/crime_scene/CrimeSceneGame.java index e874ab7dba590cbeb10ec528e0cf8c618705c3b3..645ebf2e305da0c47b44082e416ef9229a68af53 100644 --- a/core/src/cz/nic/tablexia/game/games/crime_scene/CrimeSceneGame.java +++ b/core/src/cz/nic/tablexia/game/games/crime_scene/CrimeSceneGame.java @@ -109,6 +109,8 @@ public class CrimeSceneGame extends AbstractTablexiaGame<CrimeSceneGameState> { private int wrongRounds = 0; public static class GameResultResolver extends GameDefinition.GameResultResolver { + private static final String FORMATTED_TEXT_FOR_STATISTICS_FORMAT = "%d / %d"; + @Override public AbstractTablexiaGame.GameResult getGameCupsResult(Game game) { return ResultStars.getStarCountForDifficultyAndErrors(GameDifficulty.getGameDifficultyForDifficultyNumber(game.getGameDifficulty()), @@ -122,9 +124,14 @@ public class CrimeSceneGame extends AbstractTablexiaGame<CrimeSceneGameState> { @Override public float getStatisticsScore(Game game) { - //TODO - Replace THREE_STAR.getScoreForDifficulty with actual max points for difficulty - return getGameScoreResult(game) / ResultStars.THREE_STAR.getScoreForDifficulty(GameDifficulty.HARD); - } + //Score to sort graph values in statistics is calculated as "actualScore / maxScore". So 2 cups on hard difficulty wont show up higher than 3 cups on medium difficulty. + return getGameScoreResult(game) / (float)(getMaxScoreForDifficulty(GameDifficulty.getGameDifficultyForDifficultyNumber(game.getGameDifficulty()))); + } + + @Override + public String getFormattedScoreForStatistics(Game game) { + return String.format(FORMATTED_TEXT_FOR_STATISTICS_FORMAT, Math.round(getGameScoreResult(game)), getMaxScoreForDifficulty(GameDifficulty.getGameDifficultyForDifficultyNumber(game.getGameDifficulty()))); + } @Override public List<GameScore> getGameScoreList(GameDifficulty difficulty, GameResult result) { @@ -554,14 +561,18 @@ public class CrimeSceneGame extends AbstractTablexiaGame<CrimeSceneGameState> { actionsStripWidget.getSelectedActions().size() + objectsLayer.getChildren().size == getData().getSolution().size(); } - private int getMaxScore() { + private static int getMaxScoreForDifficulty(GameDifficulty gameDifficulty) { int maxScore = 0; for(int i = 0; i < MAX_ROUNDS; i++) { - maxScore += CrimeSceneDifficulty.getCrimeSceneDifficultyForGameDifficulty(getGameDifficulty()).getNumberOfObjects() + i; + maxScore += CrimeSceneDifficulty.getCrimeSceneDifficultyForGameDifficulty(gameDifficulty).getNumberOfObjects() + i; } return maxScore; } + private int getMaxScore() { + return getMaxScoreForDifficulty(getGameDifficulty()); + } + private void playAllSounds() { preparePlaySoundScreen(true); playSoundScreen.playSounds(); diff --git a/core/src/cz/nic/tablexia/game/games/pursuit/PursuitGame.java b/core/src/cz/nic/tablexia/game/games/pursuit/PursuitGame.java index 5b7ffafaedc30c954d476146a071c78c7074d3a7..904632d63915a953009d8f0bd66eacee7da5ccb0 100644 --- a/core/src/cz/nic/tablexia/game/games/pursuit/PursuitGame.java +++ b/core/src/cz/nic/tablexia/game/games/pursuit/PursuitGame.java @@ -83,6 +83,22 @@ public class PursuitGame extends AbstractTablexiaGame<int[][]> { gameScores.add(new GameScore(SCORE_KEY_MOVE_COUNT, Integer.toString(30))); return gameScores; } + + @Override + public String getFormattedScoreForStatistics(Game game) { + float time = getGameScoreResult(game); + + int minutes = (int) ((time / 1000) / 60); + int seconds = (int) ((time / 1000) % 60); + + if(minutes == 0) { + return seconds + "s"; + } else if (seconds == 0){ + return minutes + "m "; + } else { + return minutes + "m " + seconds + "s"; + } + } } private enum ResultMapping { diff --git a/core/src/cz/nic/tablexia/screen/statistics/StatisticsScreen.java b/core/src/cz/nic/tablexia/screen/statistics/StatisticsScreen.java index 24643a2b4b87ee6ac6b6a4a2056c2c178dc6f38b..a733bc78579f14b8602f72442c26cb2effbf31d5 100644 --- a/core/src/cz/nic/tablexia/screen/statistics/StatisticsScreen.java +++ b/core/src/cz/nic/tablexia/screen/statistics/StatisticsScreen.java @@ -453,7 +453,7 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> { dateText, String.format("%s %s", ApplicationTextManager.getInstance().getText(GameDefinition.getGameDefinitionForGameNumber(game.getGameNumber()).getStatisticsAverageScoreDialogText()), - getCorrectedScore(selectedGameDefinition, averageScore))); + getCorrectedScore(selectedGameDefinition, game))); } @Override @@ -588,30 +588,8 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> { return false; } - /**In some games is time used as score (less means better). - In order to calculate graph points, it is converted to 1/time. - This function makes the opposite to show real time. - Other scores are converted to text representing minutes and seconds */ private String getCorrectedScore(GameDefinition gameDefinition, Game game) { - return getCorrectedScore(gameDefinition, gameDefinition.getGameResultResolver().getGameScoreResult(game)); - } - - private String getCorrectedScore(GameDefinition gameDefinition, float score) { - if(gameDefinition == GameDefinition.PURSUIT) return millisecondsToTimeText(score); - return String.valueOf(Math.round(score)); - } - - private String millisecondsToTimeText(float time) { - int minutes = (int) (time/1000) / 60; - int seconds = (int) ((time/1000) % 60); - - if(minutes == 0) { - return seconds + "s"; - } else if (seconds == 0){ - return minutes + "m "; - } else { - return minutes + "m " + seconds + "s"; - } + return gameDefinition.getGameResultResolver().getFormattedScoreForStatistics(game); } /**returning absolute value of clicked position on X axis on screen*/