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 int selectedRow = -1, selectedCol = -1;
|
||||||
private List<int[]> highlightedFields = new ArrayList<>();
|
private List<int[]> highlightedFields = new ArrayList<>();
|
||||||
|
|
||||||
|
private boolean gameOver = false;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public Controller(GameGui gui, ChessEngine engine) {
|
public Controller(GameGui gui, ChessEngine engine) {
|
||||||
this.gui = gui;
|
this.gui = gui;
|
||||||
this.engine = engine;
|
this.engine = engine;
|
||||||
|
this.engine.setTimeoutListener(this::handleTimeout); // Lamda-Verknüpfung
|
||||||
initListeners();
|
initListeners();
|
||||||
updateGuiBoard();
|
updateGuiBoard();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private int flipRow(int row) {
|
private int flipRow(int row) {
|
||||||
return gui.isFlipped() ? 7 - row : row;
|
return gui.isFlipped() ? 7 - row : row;
|
||||||
|
|
@ -95,6 +101,8 @@ public class Controller {
|
||||||
private void handleClick(int guiRow, int guiCol) {
|
private void handleClick(int guiRow, int guiCol) {
|
||||||
int modelRow = flipRow(guiRow);
|
int modelRow = flipRow(guiRow);
|
||||||
int modelCol = flipCol(guiCol);
|
int modelCol = flipCol(guiCol);
|
||||||
|
|
||||||
|
if (gameOver) return;
|
||||||
|
|
||||||
//Figur am Feld
|
//Figur am Feld
|
||||||
BoardDTO boardDTO = engine.getBoardAsDTO();
|
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.*;
|
import de.hs_mannheim.informatik.chess.view.*;
|
||||||
|
|
||||||
public class ChessEngine {
|
public class ChessEngine {
|
||||||
|
|
||||||
|
public interface TimeoutListener {
|
||||||
|
void onTimeout(String player);
|
||||||
|
}
|
||||||
|
|
||||||
private Board board;
|
private Board board;
|
||||||
private List<Move> moves = new ArrayList<>();
|
private List<Move> moves = new ArrayList<>();
|
||||||
private static final Logger logger = Logger.getLogger(ChessEngine.class.getName());
|
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 whiteTimer = new CountdownTimer(1,0);
|
||||||
private CountdownTimer blackTimer = new CountdownTimer(3,0);
|
private CountdownTimer blackTimer = new CountdownTimer(3,0);
|
||||||
|
|
||||||
|
private TimeoutListener timeoutListener;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -34,7 +41,12 @@ public class ChessEngine {
|
||||||
logging();
|
logging();
|
||||||
board = new Board();
|
board = new Board();
|
||||||
whiteTimer.start();
|
whiteTimer.start();
|
||||||
|
|
||||||
|
if (timeoutListener != null) {
|
||||||
|
timeoutListener.onTimeout("WHITE"); // oder "BLACK"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public void setGui(GameGui gui) {
|
public void setGui(GameGui gui) {
|
||||||
|
|
@ -206,9 +218,11 @@ public class ChessEngine {
|
||||||
|
|
||||||
public void onTimeout(String player) {
|
public void onTimeout(String player) {
|
||||||
String winner = player.equals("WHITE") ? "SCHWARZ" : "WEIß";
|
String winner = player.equals("WHITE") ? "SCHWARZ" : "WEIß";
|
||||||
gameGui.displayMessage(winner + " hat gewonnen (Zeitüberschreitung)!");
|
if (gameGui != null) {
|
||||||
whiteTimer.stop();
|
gameGui.displayMessage(winner + " hat gewonnen (Zeitüberschreitung)!");
|
||||||
blackTimer.stop();
|
} else {
|
||||||
|
System.err.println("Fehler: GameGui ist null beim Timeout von " + player);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -227,11 +241,6 @@ public class ChessEngine {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public void logging() {
|
public void logging() {
|
||||||
|
|
||||||
// Eigener Handler nur für diese Klasse
|
// Eigener Handler nur für diese Klasse
|
||||||
|
|
@ -248,9 +257,24 @@ public class ChessEngine {
|
||||||
|
|
||||||
logger.info("ChessEngine wurde initialisiert.");
|
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