Last changes for quicksave
parent
aebfb7e38b
commit
59233efcca
|
@ -7,6 +7,7 @@ import java.util.ArrayList;
|
|||
import java.util.List;
|
||||
|
||||
import javax.swing.BorderFactory;
|
||||
import javax.swing.JOptionPane;
|
||||
|
||||
import com.github.bhlangonijr.chesslib.game.Game;
|
||||
|
||||
|
@ -26,6 +27,7 @@ public class GameController {
|
|||
private boolean gameOver = false;
|
||||
private int selectedRow = -1, selectedCol = -1;
|
||||
private List<int[]> highlightedFields = new ArrayList<>();
|
||||
private boolean gameWasResignedOrDrawn = false;
|
||||
private GameMode gameMode;
|
||||
|
||||
public GameController(GameGui gui, ChessEngine engine, GameEndCallback callback, GameMode gameMode) {
|
||||
|
@ -33,7 +35,7 @@ public class GameController {
|
|||
this.gameMode = gameMode;
|
||||
if (gameMode != null) {
|
||||
engine.initTimers(gameMode.minutes, gameMode.incrementSeconds);
|
||||
time();
|
||||
setupAndStartTimers();
|
||||
}
|
||||
addWindowCloseListener();
|
||||
}
|
||||
|
@ -49,13 +51,31 @@ public class GameController {
|
|||
initListeners();
|
||||
updateGuiBoard();
|
||||
}
|
||||
private void time() {
|
||||
engine.getWhiteTimer().setOnTick(secs -> gui.updateWhiteTimerLabel(secs));
|
||||
engine.getBlackTimer().setOnTick(secs -> gui.updateBlackTimerLabel(secs));
|
||||
engine.getWhiteTimer().setOnTimeout(() -> onTimeout("WHITE"));
|
||||
engine.getBlackTimer().setOnTimeout(() -> onTimeout("BLACK"));
|
||||
engine.getWhiteTimer().start();
|
||||
|
||||
private void setupAndStartTimers() {
|
||||
if (engine.getWhiteTimer() != null) {
|
||||
engine.getWhiteTimer().setOnTick(secs -> gui.updateWhiteTimerLabel(secs));
|
||||
engine.getWhiteTimer().setOnTimeout(() -> onTimeout("WHITE"));
|
||||
engine.getWhiteTimer().stop(); // <-- WICHTIG!
|
||||
}
|
||||
if (engine.getBlackTimer() != null) {
|
||||
engine.getBlackTimer().setOnTick(secs -> gui.updateBlackTimerLabel(secs));
|
||||
engine.getBlackTimer().setOnTimeout(() -> onTimeout("BLACK"));
|
||||
engine.getBlackTimer().stop(); // <-- WICHTIG!
|
||||
}
|
||||
// Timer-Labels initial setzen
|
||||
if (engine.getWhiteTimer() != null) gui.updateWhiteTimerLabel(engine.getWhiteTimer().getSecondsLeft());
|
||||
if (engine.getBlackTimer() != null) gui.updateBlackTimerLabel(engine.getBlackTimer().getSecondsLeft());
|
||||
|
||||
// Aktuellen Spieler-Timer starten:
|
||||
if (engine.getCurrentPlayer().equals("WHITE")) {
|
||||
engine.getWhiteTimer().start();
|
||||
} else {
|
||||
engine.getBlackTimer().start();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private int flipRow(int row) {
|
||||
return gui.isFlipped() ? 7 - row : row;
|
||||
}
|
||||
|
@ -153,16 +173,16 @@ public class GameController {
|
|||
|
||||
// --- AUFGEBEN-BUTTON ---
|
||||
gui.getResignButton().addActionListener(e -> {
|
||||
engine.clearQuicksave();
|
||||
if (gameOver) return;
|
||||
int answer = javax.swing.JOptionPane.showConfirmDialog(
|
||||
int answer = JOptionPane.showConfirmDialog(
|
||||
null,
|
||||
"Willst du wirklich aufgeben?",
|
||||
"Aufgeben",
|
||||
javax.swing.JOptionPane.YES_NO_OPTION
|
||||
JOptionPane.YES_NO_OPTION
|
||||
);
|
||||
if (answer == javax.swing.JOptionPane.YES_OPTION) {
|
||||
if (answer == JOptionPane.YES_OPTION) {
|
||||
gameOver = true;
|
||||
gameWasResignedOrDrawn = true; // <<<<<<
|
||||
String winner = engine.getCurrentPlayer().equals("WHITE") ? "SCHWARZ" : "WEIß";
|
||||
gui.displayMessage(winner + " gewinnt durch Aufgabe!");
|
||||
if (engine.getWhiteTimer() != null) engine.getWhiteTimer().stop();
|
||||
|
@ -172,16 +192,16 @@ public class GameController {
|
|||
});
|
||||
|
||||
gui.getDrawButton().addActionListener(e -> {
|
||||
engine.clearQuicksave();
|
||||
if (gameOver) return;
|
||||
int answer = javax.swing.JOptionPane.showConfirmDialog(
|
||||
int answer = JOptionPane.showConfirmDialog(
|
||||
null,
|
||||
"Remis anbieten? (Das Spiel endet sofort unentschieden)",
|
||||
"Remis",
|
||||
javax.swing.JOptionPane.YES_NO_OPTION
|
||||
JOptionPane.YES_NO_OPTION
|
||||
);
|
||||
if (answer == javax.swing.JOptionPane.YES_OPTION) {
|
||||
if (answer == JOptionPane.YES_OPTION) {
|
||||
gameOver = true;
|
||||
gameWasResignedOrDrawn = true; // <<<<<<
|
||||
gui.displayMessage("Remis! (durch Einigung)");
|
||||
if (engine.getWhiteTimer() != null) engine.getWhiteTimer().stop();
|
||||
if (engine.getBlackTimer() != null) engine.getBlackTimer().stop();
|
||||
|
@ -189,6 +209,7 @@ public class GameController {
|
|||
}
|
||||
});
|
||||
|
||||
|
||||
gui.getUndoButton().addActionListener(e -> {
|
||||
// Wer ist am Zug? (Das ist der, der gefragt wird)
|
||||
String currentPlayer = engine.getCurrentPlayer(); // "WHITE" oder "BLACK"
|
||||
|
@ -377,22 +398,29 @@ public class GameController {
|
|||
}
|
||||
|
||||
private void askForRestart() {
|
||||
int answer = javax.swing.JOptionPane.showConfirmDialog(
|
||||
int answer = JOptionPane.showConfirmDialog(
|
||||
null,
|
||||
"Neue Partie starten?",
|
||||
"Spiel beendet",
|
||||
javax.swing.JOptionPane.YES_NO_OPTION
|
||||
JOptionPane.YES_NO_OPTION
|
||||
);
|
||||
javax.swing.SwingUtilities.getWindowAncestor(gui.getField(0, 0)).dispose();
|
||||
if (answer == javax.swing.JOptionPane.YES_OPTION) {
|
||||
engine.clearQuicksave(); // Quicksave löschen!
|
||||
if (answer == JOptionPane.YES_OPTION) {
|
||||
engine.clearQuicksave();
|
||||
MainController.engineRAM = null;
|
||||
callback.onNewGameRequested();
|
||||
} else {
|
||||
engine.quicksave(); // Im RAM speichern!
|
||||
MainController.engineRAM = engine; // Referenz für das nächste Mal
|
||||
// HIER: QuickSave **NUR** falls das Spiel NICHT durch Aufgabe/Remis/Patt beendet wurde!
|
||||
if (!gameWasResignedOrDrawn) {
|
||||
engine.quicksave();
|
||||
MainController.engineRAM = engine;
|
||||
} else {
|
||||
engine.clearQuicksave();
|
||||
MainController.engineRAM = null;
|
||||
}
|
||||
callback.onReturnToMenu();
|
||||
}
|
||||
gameWasResignedOrDrawn = false; // Reset für nächstes Spiel
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -32,27 +32,36 @@ public class MainController {
|
|||
|
||||
private void startNormalMode() {
|
||||
// Prüfe, ob es im RAM ein Quicksave gibt:
|
||||
if (engineRAM != null && engineRAM.quickload()) {
|
||||
int choice = JOptionPane.showConfirmDialog(
|
||||
null,
|
||||
"Letzte Partie fortsetzen?",
|
||||
"Quicksave gefunden",
|
||||
JOptionPane.YES_NO_OPTION
|
||||
);
|
||||
if (choice == JOptionPane.YES_OPTION) {
|
||||
GameGui gameGui = new GameGui();
|
||||
GameEndCallback callback = new GameEndCallback() {
|
||||
public void onNewGameRequested() { startNormalMode(); }
|
||||
public void onReturnToMenu() { new MainController(); }
|
||||
};
|
||||
new GameController(gameGui, engineRAM, callback);
|
||||
mainGui.close();
|
||||
return; // Fertig!
|
||||
} else {
|
||||
engineRAM.clearQuicksave();
|
||||
engineRAM = null;
|
||||
}
|
||||
}
|
||||
if (engineRAM != null && engineRAM.quickload()) {
|
||||
int choice = JOptionPane.showConfirmDialog(
|
||||
null,
|
||||
"Letzte Partie fortsetzen?",
|
||||
"Quicksave gefunden",
|
||||
JOptionPane.YES_NO_OPTION
|
||||
);
|
||||
if (choice == JOptionPane.YES_OPTION) {
|
||||
GameGui gameGui = new GameGui();
|
||||
GameEndCallback callback = new GameEndCallback() {
|
||||
public void onNewGameRequested() { startNormalMode(); }
|
||||
public void onReturnToMenu() { new MainController(); }
|
||||
};
|
||||
new GameController(gameGui, engineRAM, callback); // KEIN initTimers, KEIN neuer Engine!
|
||||
// --- Timerlabels aktualisieren
|
||||
gameGui.updateWhiteTimerLabel(engineRAM.getWhiteTimer().getSecondsLeft());
|
||||
gameGui.updateBlackTimerLabel(engineRAM.getBlackTimer().getSecondsLeft());
|
||||
// --- Timer des aktuellen Spielers starten
|
||||
if (engineRAM.getCurrentPlayer().equals("WHITE")) {
|
||||
engineRAM.getWhiteTimer().start();
|
||||
} else {
|
||||
engineRAM.getBlackTimer().start();
|
||||
}
|
||||
mainGui.close();
|
||||
return; // Fertig!
|
||||
} else {
|
||||
engineRAM.clearQuicksave();
|
||||
engineRAM = null;
|
||||
}
|
||||
}
|
||||
|
||||
// Neues Spiel normal starten:
|
||||
GameMode mode = GameModeSelector.selectGameMode();
|
||||
|
|
|
@ -323,8 +323,23 @@ public class ChessEngine {
|
|||
}
|
||||
|
||||
public void initTimers(int min, int sec) {
|
||||
whiteTimer = new Timer(min, sec);
|
||||
blackTimer = new Timer(min, sec);
|
||||
if (whiteTimer == null) {
|
||||
whiteTimer = new Timer(min, sec);
|
||||
} else if (quicksaveWhiteTimeLeft != -1) {
|
||||
whiteTimer = new Timer(min, sec);
|
||||
whiteTimer.setSecondsLeft(quicksaveWhiteTimeLeft);
|
||||
} else {
|
||||
whiteTimer = new Timer(min, sec);
|
||||
}
|
||||
|
||||
if (blackTimer == null) {
|
||||
blackTimer = new Timer(min, sec);
|
||||
} else if (quicksaveBlackTimeLeft != -1) {
|
||||
blackTimer = new Timer(min, sec);
|
||||
blackTimer.setSecondsLeft(quicksaveBlackTimeLeft);
|
||||
} else {
|
||||
blackTimer = new Timer(min, sec);
|
||||
}
|
||||
}
|
||||
|
||||
public void saveAsPgn(Game game, String path, String dateiname) {
|
||||
|
|
Loading…
Reference in New Issue