Reworked everything to fix issues

TestingBranch
Justin 2025-06-24 02:02:22 +02:00
commit 9df9d5bbe9
7 changed files with 122 additions and 14 deletions

View File

@ -11,11 +11,12 @@ 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;
public class GameController {
GameGui gui;
@ -25,12 +26,25 @@ public class GameController {
private boolean gameOver = false;
private int selectedRow = -1, selectedCol = -1;
private List<int[]> highlightedFields = new ArrayList<>();
private GameMode gameMode;
public GameController(GameGui gui, ChessEngine engine, GameEndCallback callback) {
this.gameMode = null;
this.gui = gui;
this.engine = engine;
this.callback = callback;
engine.initTimers(3, 0);
engine.initTimers(gameMode.minutes, gameMode.incrementSeconds);
time();
initListeners();
updateGuiBoard();
}
public GameController(GameGui gui, ChessEngine engine, GameEndCallback callback, GameMode gameMode) {
this.gameMode = gameMode;
this.gui = gui;
this.engine = engine;
this.callback = callback;
engine.initTimers(gameMode.minutes, gameMode.incrementSeconds);
time();
initListeners();
updateGuiBoard();
@ -280,6 +294,8 @@ public class GameController {
updateGuiBoard();
gui.updateMoveList(engine.getMoveListStringsGrouped());
// ---- HIER ist die Matt/Patt/Remis-Prüfung ----
if (engine.isMated()) {
String winner = engine.getCurrentPlayer().equals("WHITE") ? "SCHWARZ" : "WEIß";
@ -305,13 +321,26 @@ public class GameController {
}
private void switchTimers() {
GameMode mode = engine.getGameMode(); // muss Engine speichern
Timer whiteTimer = engine.getWhiteTimer();
Timer blackTimer = engine.getBlackTimer();
if (engine.getCurrentPlayer().equals("WHITE")) {
engine.getBlackTimer().stop();
engine.getWhiteTimer().start();
} else {
engine.getWhiteTimer().stop();
engine.getBlackTimer().start();
// 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();
}
}

View File

@ -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() {

View File

@ -31,10 +31,21 @@ public class ChessEngine {
private int currentMoveIndex = 0;
private Timer whiteTimer;
private Timer blackTimer;
private final GameMode mode;
private Opening detectedOpening = null;
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();
}
@ -412,6 +423,17 @@ public class ChessEngine {
}
public Timer getWhiteTimer() { return whiteTimer; }
public Timer getBlackTimer() { return blackTimer; }
public GameMode getGameMode() {
// TODO Auto-generated method stub
return mode;
}
}

View File

@ -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";
};
}
}

View File

@ -56,6 +56,10 @@ public class Timer {
public int getSecondsLeft() {
return secondsLeft;
}
public void addSeconds(int seconds) {
this.secondsLeft += seconds;
}
}

View File

@ -254,8 +254,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);

View File

@ -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;
}
}