diff --git a/src/main/java/se/urmo/game/state/GameStateManager.java b/src/main/java/se/urmo/game/state/GameStateManager.java index a211570..242cf0f 100644 --- a/src/main/java/se/urmo/game/state/GameStateManager.java +++ b/src/main/java/se/urmo/game/state/GameStateManager.java @@ -18,7 +18,7 @@ public class GameStateManager { GameOverState gameOverState = new GameOverState(this, new HighScoreManager()); states.put(GameStateType.PLAYING, new PlayingState(game, this, gameOverState)); states.put(GameStateType.GAME_OVER, gameOverState); - setState(GameStateType.GAME_OVER); + setState(GameStateType.PLAYING); } public void setState(GameStateType type) { diff --git a/src/main/java/se/urmo/game/state/HighScoreManager.java b/src/main/java/se/urmo/game/state/HighScoreManager.java index 8ca3a1d..d74ff84 100644 --- a/src/main/java/se/urmo/game/state/HighScoreManager.java +++ b/src/main/java/se/urmo/game/state/HighScoreManager.java @@ -1,7 +1,42 @@ package se.urmo.game.state; -public class HighScoreManager { - public void submit(int finalScore) { +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardOpenOption; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +public class HighScoreManager { + private final Path file = Path.of("highscores.dat"); + private final int maxEntries = 10; + private final List scores = new ArrayList<>(); + + public HighScoreManager() { load(); } + + public void submit(int score) { + scores.add(score); + scores.sort(Comparator.reverseOrder()); + if (scores.size() > maxEntries) scores.remove(scores.size() - 1); + save(); + } + + public List top() { return List.copyOf(scores); } + + private void load() { + try { + if (!Files.exists(file)) return; + for (String line : Files.readAllLines(file)) { + scores.add(Integer.parseInt(line.trim())); + } + scores.sort(Comparator.reverseOrder()); + } catch (Exception ignored) {} + } + + private void save() { + try { + var lines = scores.stream().map(String::valueOf).toList(); + Files.write(file, lines, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING); + } catch (Exception ignored) {} } }