From da801b75b0b5d612d89c71dac48586d777db4751 Mon Sep 17 00:00:00 2001 From: Vickvick2002 Date: Mon, 6 Jan 2025 21:53:05 +0100 Subject: [PATCH] =?UTF-8?q?Logik=20f=C3=BCr=20Zeit=20beim=20Pausieren=20ve?= =?UTF-8?q?rbessert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Hitori/src/main/highscores/highscores.txt | 5 +-- .../PR2/HitoriSpiel/Fassade/GameBoard.java | 37 ++++++++++++++++--- .../PR2/HitoriSpiel/Fassade/GameManager.java | 15 ++++++++ .../java/PR2/HitoriSpiel/GUI/BoardLoader.java | 34 ----------------- .../java/PR2/HitoriSpiel/GUI/PauseMenu.java | 7 +++- 5 files changed, 53 insertions(+), 45 deletions(-) create mode 100644 Hitori/src/main/java/PR2/HitoriSpiel/Fassade/GameManager.java diff --git a/Hitori/src/main/highscores/highscores.txt b/Hitori/src/main/highscores/highscores.txt index 424b427..b407bf0 100644 --- a/Hitori/src/main/highscores/highscores.txt +++ b/Hitori/src/main/highscores/highscores.txt @@ -1,7 +1,4 @@ Ioana,25,Hitori4x4_leicht.csv,0 -test,22,Hitori4x4_leicht.csv,0 -Test2,72,Hitori5x5_leicht.csv,0 -Test3,100,Hitori8x8_medium.csv,0 -Test4,200,Hitori15x15_medium.csv,10 IOANA VERSUCH 156,105,Hitori5x5_leicht.csv,0 IOANA VERSUCH 439,44,Hitori5x5_leicht.csv,0 + diff --git a/Hitori/src/main/java/PR2/HitoriSpiel/Fassade/GameBoard.java b/Hitori/src/main/java/PR2/HitoriSpiel/Fassade/GameBoard.java index de25f02..74cec80 100644 --- a/Hitori/src/main/java/PR2/HitoriSpiel/Fassade/GameBoard.java +++ b/Hitori/src/main/java/PR2/HitoriSpiel/Fassade/GameBoard.java @@ -15,6 +15,7 @@ public class GameBoard extends JPanel { private Timer timer; private long startTime; private JLabel timerLabel; + private long pausedTime = 0; // Zeit, die beim Pausieren bereits abgelaufen ist private JPanel gamePanel; // Das Spielfeld als JPanel private final StateManager stateManager = new StateManager(); @@ -46,20 +47,42 @@ public class GameBoard extends JPanel { } private void startTimer() { - startTime = System.currentTimeMillis(); - timer = new Timer(1000, e -> { - long elapsedTime = (System.currentTimeMillis() - startTime) / 1000; - timerLabel.setText("Zeit: " + elapsedTime + " Sekunden"); - }); - timer.start(); + if (timer == null) { // Timer nur beim ersten Start erstellen + timer = new Timer(1000, e -> { + long elapsedTime = (System.currentTimeMillis() - startTime + pausedTime) / 1000; // Zeit berechnen + timerLabel.setText("Zeit: " + elapsedTime + " Sekunden"); + }); + } + startTime = System.currentTimeMillis(); // Startzeit setzen, bevor der Timer gestartet wird + timer.start(); // Timer starten + System.out.println("Startzeit: " + startTime); + System.out.println("Pausierte Zeit: " + pausedTime); } private void stopTimer() { + if (timer != null && timer.isRunning()) { + timer.stop(); // Timer anhalten + pausedTime += System.currentTimeMillis() - startTime; // Zeit während der Pause speichern + System.out.println("Timer gestoppt. Pausierte Zeit: " + pausedTime); + } + } + + public void resumeTimer() { + startTime = System.currentTimeMillis(); // Startzeit neu setzen + startTimer(); // Timer erneut starten + System.out.println("Timer fortgesetzt. Startzeit: " + startTime + ", Pausierte Zeit: " + pausedTime); + } + + private void resetTimer() { if (timer != null) { timer.stop(); } + startTime = 0; + pausedTime = 0; + timerLabel.setText("Zeit: 0 Sekunden"); } + private JPanel createControlPanel() { JPanel controlPanel = new JPanel(); @@ -178,8 +201,10 @@ public class GameBoard extends JPanel { } private void showPauseMenu() { + stopTimer(); // Timer pausieren PauseMenu pauseMenu = new PauseMenu( (JFrame) SwingUtilities.getWindowAncestor(this), + this, // Das aktuelle GameBoard-Objekt übergeben e -> startTimer(), // Spiel fortsetzen e -> returnToMainMenu(), // Zum Hauptmenü e -> System.exit(0) // Spiel beenden diff --git a/Hitori/src/main/java/PR2/HitoriSpiel/Fassade/GameManager.java b/Hitori/src/main/java/PR2/HitoriSpiel/Fassade/GameManager.java new file mode 100644 index 0000000..7d0cc11 --- /dev/null +++ b/Hitori/src/main/java/PR2/HitoriSpiel/Fassade/GameManager.java @@ -0,0 +1,15 @@ +package PR2.HitoriSpiel.Fassade; + +public class GameManager { + private static GameBoard gameBoard; + + public static void setGameBoard(GameBoard gb) { + gameBoard = gb; + } + + public static void resumeTimer() { + if (gameBoard != null) { + gameBoard.resumeTimer(); + } + } +} \ No newline at end of file diff --git a/Hitori/src/main/java/PR2/HitoriSpiel/GUI/BoardLoader.java b/Hitori/src/main/java/PR2/HitoriSpiel/GUI/BoardLoader.java index 24bdb15..6d24734 100644 --- a/Hitori/src/main/java/PR2/HitoriSpiel/GUI/BoardLoader.java +++ b/Hitori/src/main/java/PR2/HitoriSpiel/GUI/BoardLoader.java @@ -25,40 +25,6 @@ public class BoardLoader { } } - /* public static List loadBoardsAsList() { - List boardFiles = new ArrayList<>(); - try { - var resource = BoardLoader.class.getClassLoader().getResource("persistent/Hitori_Spielfelder/"); - if (resource == null) { - throw new IOException("Das Verzeichnis 'persistent/Hitori_Spielfelder/' wurde nicht gefunden."); - } - - if (resource.getProtocol().equals("file")) { - // Zugriff auf das Dateisystem (IDE-Umgebung) - File directory = new File(resource.toURI()); - for (File file : directory.listFiles()) { - if (file.isFile() && file.getName().endsWith(".csv")) { - boardFiles.add(file.getName()); - } - } - } else if (resource.getProtocol().equals("jar")) { - // Zugriff im JAR - String path = resource.getPath().substring(5, resource.getPath().indexOf("!")); // JAR-Pfad extrahieren - try (JarFile jar = new JarFile(URLDecoder.decode(path, "UTF-8"))) { - Enumeration entries = jar.entries(); - while (entries.hasMoreElements()) { - String name = entries.nextElement().getName(); - if (name.startsWith("persistent/Hitori_Spielfelder/") && name.endsWith(".csv")) { - boardFiles.add(name.substring(name.lastIndexOf("/") + 1)); - } - } - } - } - } catch (Exception e) { - System.err.println("Fehler beim Laden der Spielfelder: " + e.getMessage()); - } - return boardFiles; - }*/ public static List loadBoardsAsList() { List boardFiles = new ArrayList<>(); try { diff --git a/Hitori/src/main/java/PR2/HitoriSpiel/GUI/PauseMenu.java b/Hitori/src/main/java/PR2/HitoriSpiel/GUI/PauseMenu.java index 71bd258..7dce088 100644 --- a/Hitori/src/main/java/PR2/HitoriSpiel/GUI/PauseMenu.java +++ b/Hitori/src/main/java/PR2/HitoriSpiel/GUI/PauseMenu.java @@ -1,15 +1,18 @@ package PR2.HitoriSpiel.GUI; import PR2.HitoriSpiel.Fassade.Setup; +import PR2.HitoriSpiel.Fassade.GameBoard; import javax.swing.*; import java.awt.*; import java.awt.event.ActionListener; public class PauseMenu extends JDialog { + private final GameBoard gameBoard; - public PauseMenu(JFrame parent, ActionListener resumeAction, ActionListener mainMenuAction, ActionListener exitAction) { + public PauseMenu(JFrame parent, GameBoard gameBoard, ActionListener resumeAction, ActionListener mainMenuAction, ActionListener exitAction) { super(parent, "Pause", true); + this.gameBoard = gameBoard; // Instanz speichern setLayout(new GridLayout(3, 1)); setSize(300, 200); setLocationRelativeTo(parent); @@ -21,6 +24,8 @@ public class PauseMenu extends JDialog { if (resumeAction != null) { resumeAction.actionPerformed(e); } + // Timer fortsetzen + gameBoard.resumeTimer(); }); // "Zum Hauptmenü"-Button