Timer implementiert und in der gui anzeigbar
parent
ccbdf1c559
commit
94bb556288
|
@ -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)!");
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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");
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue