From 93c0ee5f95239cb682bbfc36af87d8ff2d05aa21 Mon Sep 17 00:00:00 2001 From: Martin Prokoph Date: Fri, 1 Aug 2025 19:07:20 +0200 Subject: [PATCH] feat: save highscores --- .../eu/midnightdust/yaytris/HighScores.java | 24 +++++++++++++++++++ .../java/eu/midnightdust/yaytris/Tetris.java | 2 ++ .../eu/midnightdust/yaytris/game/Space.java | 4 ++++ tetris_scores.json5 | 3 +++ 4 files changed, 33 insertions(+) create mode 100644 src/main/java/eu/midnightdust/yaytris/HighScores.java create mode 100644 tetris_scores.json5 diff --git a/src/main/java/eu/midnightdust/yaytris/HighScores.java b/src/main/java/eu/midnightdust/yaytris/HighScores.java new file mode 100644 index 0000000..ae2b881 --- /dev/null +++ b/src/main/java/eu/midnightdust/yaytris/HighScores.java @@ -0,0 +1,24 @@ +package eu.midnightdust.yaytris; + +import eu.midnightdust.yaytris.util.NightJson; + +import java.util.HashMap; +import java.util.Map; + +public class HighScores { + private static final NightJson json = new NightJson(HighScores.class, "tetris_scores.json5"); + public static Map scores = new HashMap<>(); + + public static void addScore(int score) { + scores.put(String.valueOf(System.currentTimeMillis()), score); + write(); + } + + public static void load() { + json.readJson(); + } + + public static void write() { + json.writeJson(); + } +} diff --git a/src/main/java/eu/midnightdust/yaytris/Tetris.java b/src/main/java/eu/midnightdust/yaytris/Tetris.java index 81440a3..12795b2 100644 --- a/src/main/java/eu/midnightdust/yaytris/Tetris.java +++ b/src/main/java/eu/midnightdust/yaytris/Tetris.java @@ -25,6 +25,7 @@ public class Tetris { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception | Error e) { System.out.printf("%s: %s\n", "Error setting system look and feel", e); } Settings.load(); + HighScores.load(); timer = new Timer("Tetris falling pieces"); space = new Space(); ui = new TetrisUI(); @@ -51,6 +52,7 @@ public class Tetris { public static void stopGame() { SoundUtil.stopMusic("/music/theme.wav"); + HighScores.addScore(space.getScore()); if (gravityTask != null) gravityTask.cancel(); timer.purge(); if (ui.getMenuPanel() instanceof ScoreMenu) ((ScoreMenu) ui.getMenuPanel()).gameOver(); diff --git a/src/main/java/eu/midnightdust/yaytris/game/Space.java b/src/main/java/eu/midnightdust/yaytris/game/Space.java index 239a345..c60d532 100644 --- a/src/main/java/eu/midnightdust/yaytris/game/Space.java +++ b/src/main/java/eu/midnightdust/yaytris/game/Space.java @@ -65,6 +65,10 @@ public class Space { return gameMap; } + public int getScore() { + return score; + } + public void onLinesChanged(Tetromino tetromino, int... lines) { int combo = 0; Set completedLines = new TreeSet<>(); diff --git a/tetris_scores.json5 b/tetris_scores.json5 new file mode 100644 index 0000000..e43ab87 --- /dev/null +++ b/tetris_scores.json5 @@ -0,0 +1,3 @@ +{ + "scores": {"1754065988809": 105,"1754067853918": 113,"1754067067271": 49} +} \ No newline at end of file