From 0427a40b475c633cee0a9ddded8a59d8e36f5d94 Mon Sep 17 00:00:00 2001 From: thomasmuller Date: Mon, 23 Jun 2025 23:01:27 +0200 Subject: [PATCH 1/3] =?UTF-8?q?3=20Zeitmodi=20Klassich=203=20minuten=20f?= =?UTF-8?q?=C3=BCr=20jeden=20spieler,=205=20minuten=20(Rapid)=20und=201=20?= =?UTF-8?q?minute=20f=C3=BCr=20jeden=20spieler,=20nach=20jedem=20Zug=20bek?= =?UTF-8?q?ommt=20man=2010=20sekunden=20gutgeschrieben(Bullet)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chess/controller/GameController.java | 37 ++++++++++++++----- .../chess/controller/MainController.java | 8 +++- .../informatik/chess/model/ChessEngine.java | 22 ++++++++++- .../informatik/chess/model/GameMode.java | 26 +++++++++++++ .../informatik/chess/model/Timer.java | 4 ++ .../informatik/chess/view/GameGui.java | 4 +- .../chess/view/GameModeSelector.java | 23 ++++++++++++ 7 files changed, 109 insertions(+), 15 deletions(-) create mode 100644 schach/src/main/java/de/hs_mannheim/informatik/chess/model/GameMode.java create mode 100644 schach/src/main/java/de/hs_mannheim/informatik/chess/view/GameModeSelector.java diff --git a/schach/src/main/java/de/hs_mannheim/informatik/chess/controller/GameController.java b/schach/src/main/java/de/hs_mannheim/informatik/chess/controller/GameController.java index f3b0f7b..1de0831 100644 --- a/schach/src/main/java/de/hs_mannheim/informatik/chess/controller/GameController.java +++ b/schach/src/main/java/de/hs_mannheim/informatik/chess/controller/GameController.java @@ -11,8 +11,10 @@ import javax.swing.BorderFactory; import com.github.bhlangonijr.chesslib.game.Game; import de.hs_mannheim.informatik.chess.model.ChessEngine; +import de.hs_mannheim.informatik.chess.model.GameMode; import de.hs_mannheim.informatik.chess.model.MoveDTO; import de.hs_mannheim.informatik.chess.model.PieceDTO; +import de.hs_mannheim.informatik.chess.model.Timer; import de.hs_mannheim.informatik.chess.model.BoardDTO; import de.hs_mannheim.informatik.chess.view.GameGui; import de.hs_mannheim.informatik.chess.view.MainGui; @@ -25,12 +27,14 @@ public class GameController { private boolean gameOver = false; private int selectedRow = -1, selectedCol = -1; private List highlightedFields = new ArrayList<>(); + private GameMode gameMode; - public GameController(GameGui gui, ChessEngine engine, GameEndCallback callback) { + public GameController(GameGui gui, ChessEngine engine, GameEndCallback callback, GameMode gameMode) { + this.gameMode = gameMode; this.gui = gui; this.engine = engine; this.callback = callback; - engine.initTimers(3, 0); + engine.initTimers(gameMode.minutes, gameMode.incrementSeconds); time(); initListeners(); updateGuiBoard(); @@ -204,6 +208,8 @@ public class GameController { updateGuiBoard(); gui.updateMoveList(engine.getMoveListStringsGrouped()); + + // ---- HIER ist die Matt/Patt/Remis-Prüfung ---- if (engine.isMated()) { @@ -229,13 +235,26 @@ public class GameController { } private void switchTimers() { - if (engine.getCurrentPlayer().equals("WHITE")) { - engine.getBlackTimer().stop(); - engine.getWhiteTimer().start(); - } else { - engine.getWhiteTimer().stop(); - engine.getBlackTimer().start(); - } + GameMode mode = engine.getGameMode(); // muss Engine speichern + Timer whiteTimer = engine.getWhiteTimer(); + Timer blackTimer = engine.getBlackTimer(); + + if (engine.getCurrentPlayer().equals("WHITE")) { + // Der letzte Spieler war Schwarz – ihm ggf. Inkrement geben + if (mode.incrementSeconds > 0) { + blackTimer.addSeconds(mode.incrementSeconds); + } + blackTimer.stop(); + whiteTimer.start(); + } else { + // Der letzte Spieler war Weiß – ihm ggf. Inkrement geben + if (mode.incrementSeconds > 0) { + whiteTimer.addSeconds(mode.incrementSeconds); + } + whiteTimer.stop(); + blackTimer.start(); + } + } diff --git a/schach/src/main/java/de/hs_mannheim/informatik/chess/controller/MainController.java b/schach/src/main/java/de/hs_mannheim/informatik/chess/controller/MainController.java index 5607a08..9fb174d 100644 --- a/schach/src/main/java/de/hs_mannheim/informatik/chess/controller/MainController.java +++ b/schach/src/main/java/de/hs_mannheim/informatik/chess/controller/MainController.java @@ -5,6 +5,7 @@ import de.hs_mannheim.informatik.chess.view.PgnGui; import de.hs_mannheim.informatik.chess.view.PgnSelectionGui; import de.hs_mannheim.informatik.chess.view.CreativeGui; import de.hs_mannheim.informatik.chess.view.GameGui; +import de.hs_mannheim.informatik.chess.view.GameModeSelector; import java.io.IOException; import java.util.List; @@ -15,6 +16,7 @@ import javax.swing.JOptionPane; import com.github.bhlangonijr.chesslib.game.Game; import de.hs_mannheim.informatik.chess.model.ChessEngine; +import de.hs_mannheim.informatik.chess.model.GameMode; public class MainController { private MainGui mainGui; @@ -28,9 +30,11 @@ public class MainController { } private void startNormalMode() { + + GameMode mode = GameModeSelector.selectGameMode(); mainGui.close(); GameGui gameGui = new GameGui(); - ChessEngine engine = new ChessEngine(); + ChessEngine engine = new ChessEngine(mode); GameEndCallback callback = new GameEndCallback() { public void onNewGameRequested() { startNormalMode(); @@ -39,7 +43,7 @@ public class MainController { new MainController(); } }; - new GameController(gameGui, engine, callback); + new GameController(gameGui, engine, callback,mode); } private void startCreativeMode() { diff --git a/schach/src/main/java/de/hs_mannheim/informatik/chess/model/ChessEngine.java b/schach/src/main/java/de/hs_mannheim/informatik/chess/model/ChessEngine.java index 1fcc873..b408027 100644 --- a/schach/src/main/java/de/hs_mannheim/informatik/chess/model/ChessEngine.java +++ b/schach/src/main/java/de/hs_mannheim/informatik/chess/model/ChessEngine.java @@ -30,9 +30,19 @@ public class ChessEngine { private int currentMoveIndex = 0; private Timer whiteTimer; private Timer blackTimer; + private final GameMode mode; - public ChessEngine() { - logging(); + public ChessEngine() { + this.mode = null; + logging(); + board = new Board(); + }; + + public ChessEngine(GameMode mode) { + this.mode = mode; + whiteTimer = new Timer(mode.minutes, mode.seconds); + blackTimer = new Timer(mode.minutes, mode.seconds); + logging(); board = new Board(); } @@ -371,5 +381,13 @@ public class ChessEngine { public Timer getWhiteTimer() { return whiteTimer; } public Timer getBlackTimer() { return blackTimer; } + + public GameMode getGameMode() { + // TODO Auto-generated method stub + return mode; + } } + + + diff --git a/schach/src/main/java/de/hs_mannheim/informatik/chess/model/GameMode.java b/schach/src/main/java/de/hs_mannheim/informatik/chess/model/GameMode.java new file mode 100644 index 0000000..5857b11 --- /dev/null +++ b/schach/src/main/java/de/hs_mannheim/informatik/chess/model/GameMode.java @@ -0,0 +1,26 @@ +package de.hs_mannheim.informatik.chess.model; + +public enum GameMode { + CLASSIC(3, 0, 0), + RAPID(5, 0, 0), + BULLET(1, 0, 10); // 1 Minute + 10 Sek Inkrement + + public final int minutes; + public final int seconds; + public final int incrementSeconds; + + GameMode(int minutes, int seconds, int incrementSeconds) { + this.minutes = minutes; + this.seconds = seconds; + this.incrementSeconds = incrementSeconds; + } + + @Override + public String toString() { + return switch (this) { + case CLASSIC -> "3 Minuten (klassisch)"; + case RAPID -> "5 Minuten (rapid)"; + case BULLET -> "1 Minute + 10 Sek Inkrement"; + }; + } +} diff --git a/schach/src/main/java/de/hs_mannheim/informatik/chess/model/Timer.java b/schach/src/main/java/de/hs_mannheim/informatik/chess/model/Timer.java index 19441d6..6a26896 100644 --- a/schach/src/main/java/de/hs_mannheim/informatik/chess/model/Timer.java +++ b/schach/src/main/java/de/hs_mannheim/informatik/chess/model/Timer.java @@ -56,6 +56,10 @@ public class Timer { public int getSecondsLeft() { return secondsLeft; } + + public void addSeconds(int seconds) { + this.secondsLeft += seconds; + } } diff --git a/schach/src/main/java/de/hs_mannheim/informatik/chess/view/GameGui.java b/schach/src/main/java/de/hs_mannheim/informatik/chess/view/GameGui.java index 6574fde..c7e06b6 100644 --- a/schach/src/main/java/de/hs_mannheim/informatik/chess/view/GameGui.java +++ b/schach/src/main/java/de/hs_mannheim/informatik/chess/view/GameGui.java @@ -199,8 +199,8 @@ public class GameGui { JPanel panel = new JPanel(new GridLayout(2, 1)); panel.setBackground(new Color(0x0d1b2a)); - whiteTimerLabel = new JLabel("Weiß: 03:00", SwingConstants.CENTER); - blackTimerLabel = new JLabel("Schwarz: 03:00", SwingConstants.CENTER); + whiteTimerLabel = new JLabel("Weiß: --:--", SwingConstants.CENTER); + blackTimerLabel = new JLabel("Schwarz: --:--", SwingConstants.CENTER); whiteTimerLabel.setFont(new Font("SansSerif", Font.BOLD, 24)); whiteTimerLabel.setForeground(Color.WHITE); diff --git a/schach/src/main/java/de/hs_mannheim/informatik/chess/view/GameModeSelector.java b/schach/src/main/java/de/hs_mannheim/informatik/chess/view/GameModeSelector.java new file mode 100644 index 0000000..3d71c5b --- /dev/null +++ b/schach/src/main/java/de/hs_mannheim/informatik/chess/view/GameModeSelector.java @@ -0,0 +1,23 @@ +package de.hs_mannheim.informatik.chess.view; + +import javax.swing.*; + +import de.hs_mannheim.informatik.chess.model.GameMode; + +public class GameModeSelector { + + public static GameMode selectGameMode() { + GameMode[] options = GameMode.values(); + GameMode selected = (GameMode) JOptionPane.showInputDialog( + null, + "Wähle den Spielmodus:", + "Spielmodus auswählen", + JOptionPane.QUESTION_MESSAGE, + null, + options, + GameMode.CLASSIC + ); + + return selected != null ? selected : GameMode.CLASSIC; + } +} \ No newline at end of file From 350a5b43eac12f017ac4d70ed6233586f982cc72 Mon Sep 17 00:00:00 2001 From: Justin Date: Tue, 24 Jun 2025 00:02:58 +0200 Subject: [PATCH 2/3] Modi commit --- .../java/de/hs_mannheim/informatik/chess/model/GameMode.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/schach/src/main/java/de/hs_mannheim/informatik/chess/model/GameMode.java b/schach/src/main/java/de/hs_mannheim/informatik/chess/model/GameMode.java index 5857b11..c1e0ee4 100644 --- a/schach/src/main/java/de/hs_mannheim/informatik/chess/model/GameMode.java +++ b/schach/src/main/java/de/hs_mannheim/informatik/chess/model/GameMode.java @@ -18,7 +18,7 @@ public enum GameMode { @Override public String toString() { return switch (this) { - case CLASSIC -> "3 Minuten (klassisch)"; + case CLASSIC -> "3 Minuten (klassisch)";A case RAPID -> "5 Minuten (rapid)"; case BULLET -> "1 Minute + 10 Sek Inkrement"; }; From 55cb25220e2ce0e286200bb9be64ac6b012d8e24 Mon Sep 17 00:00:00 2001 From: Justin Date: Tue, 24 Jun 2025 00:05:42 +0200 Subject: [PATCH 3/3] fixed issue --- .../java/de/hs_mannheim/informatik/chess/model/GameMode.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/schach/src/main/java/de/hs_mannheim/informatik/chess/model/GameMode.java b/schach/src/main/java/de/hs_mannheim/informatik/chess/model/GameMode.java index c1e0ee4..5857b11 100644 --- a/schach/src/main/java/de/hs_mannheim/informatik/chess/model/GameMode.java +++ b/schach/src/main/java/de/hs_mannheim/informatik/chess/model/GameMode.java @@ -18,7 +18,7 @@ public enum GameMode { @Override public String toString() { return switch (this) { - case CLASSIC -> "3 Minuten (klassisch)";A + case CLASSIC -> "3 Minuten (klassisch)"; case RAPID -> "5 Minuten (rapid)"; case BULLET -> "1 Minute + 10 Sek Inkrement"; };