Timer implementiert und in der gui anzeigbar

Timer
thomasmuller 2025-06-23 16:43:03 +02:00
parent ccbdf1c559
commit 94bb556288
2 changed files with 53 additions and 12 deletions

View File

@ -20,12 +20,18 @@ public class Controller {
private int selectedRow = -1, selectedCol = -1;
private List<int[]> highlightedFields = new ArrayList<>();
private boolean gameOver = false;
public Controller(GameGui gui, ChessEngine engine) {
this.gui = gui;
this.engine = engine;
this.engine.setTimeoutListener(this::handleTimeout); // Lamda-Verknüpfung
initListeners();
updateGuiBoard();
}
private int flipRow(int row) {
return gui.isFlipped() ? 7 - row : row;
@ -95,6 +101,8 @@ public class Controller {
private void handleClick(int guiRow, int guiCol) {
int modelRow = flipRow(guiRow);
int modelCol = flipCol(guiCol);
if (gameOver) return;
//Figur am Feld
BoardDTO boardDTO = engine.getBoardAsDTO();
@ -183,7 +191,16 @@ public class Controller {
}
//Time is Up Methode um zu steuern was Passiert wenn einer der Spieler die Zeit überschritten hat
//Time is Up Methode um zu steuern was Passiert wenn einer der Spieler die Zeit überschritten hat
private void handleTimeout(String player) {
if (gameOver) return;
gameOver = true;
String winner = player.equals("WHITE") ? "SCHWARZ" : "WEIß";
gui.displayMessage(winner + " hat gewonnen (Zeitüberschreitung)!");
}
}

View File

@ -17,6 +17,11 @@ import de.hs_mannheim.informatik.chess.controller.CountdownTimer;
import de.hs_mannheim.informatik.chess.view.*;
public class ChessEngine {
public interface TimeoutListener {
void onTimeout(String player);
}
private Board board;
private List<Move> moves = new ArrayList<>();
private static final Logger logger = Logger.getLogger(ChessEngine.class.getName());
@ -25,6 +30,8 @@ public class ChessEngine {
private CountdownTimer whiteTimer = new CountdownTimer(1,0);
private CountdownTimer blackTimer = new CountdownTimer(3,0);
private TimeoutListener timeoutListener;
@ -34,7 +41,12 @@ public class ChessEngine {
logging();
board = new Board();
whiteTimer.start();
if (timeoutListener != null) {
timeoutListener.onTimeout("WHITE"); // oder "BLACK"
}
}
public void setGui(GameGui gui) {
@ -206,9 +218,11 @@ public class ChessEngine {
public void onTimeout(String player) {
String winner = player.equals("WHITE") ? "SCHWARZ" : "WEIß";
gameGui.displayMessage(winner + " hat gewonnen (Zeitüberschreitung)!");
whiteTimer.stop();
blackTimer.stop();
if (gameGui != null) {
gameGui.displayMessage(winner + " hat gewonnen (Zeitüberschreitung)!");
} else {
System.err.println("Fehler: GameGui ist null beim Timeout von " + player);
}
}
@ -227,11 +241,6 @@ public class ChessEngine {
}
public void logging() {
// Eigener Handler nur für diese Klasse
@ -248,9 +257,24 @@ public class ChessEngine {
logger.info("ChessEngine wurde initialisiert.");
}
public void setTimeoutListener(TimeoutListener listener) {
this.timeoutListener = listener;
whiteTimer.setOnTimeout(() -> {
if (timeoutListener != null) timeoutListener.onTimeout("WHITE");
});
blackTimer.setOnTimeout(() -> {
if (timeoutListener != null) timeoutListener.onTimeout("BLACK");
});
}
}