feat: undo/redo added

This commit is contained in:
shahdlala66
2026-03-29 20:58:33 +02:00
committed by Janis
parent bbe53905c3
commit 1f3a653bcd
4 changed files with 266 additions and 115 deletions
@@ -20,7 +20,7 @@ class TerminalUI(engine: GameEngine) extends Observer:
print(Renderer.render(e.board))
e.capturedPiece.foreach: cap =>
println(s"Captured: $cap on ${e.toSquare}")
println(s"${e.turn.label}'s turn. Enter move (or 'quit'/'q' to exit):")
printPrompt(e.turn)
case e: CheckDetectedEvent =>
println(s"${e.turn.label} is in check!")
@@ -36,13 +36,13 @@ class TerminalUI(engine: GameEngine) extends Observer:
print(Renderer.render(e.board))
case e: InvalidMoveEvent =>
println(s"Invalid move: ${e.reason}")
println(s"⚠️ ${e.reason}")
case e: BoardResetEvent =>
println("Board has been reset to initial position.")
println()
print(Renderer.render(e.board))
println(s"${e.turn.label}'s turn. Enter move (or 'quit'/'q' to exit):")
printPrompt(e.turn)
/** Start the terminal UI game loop. */
def start(): Unit =
@@ -52,7 +52,7 @@ class TerminalUI(engine: GameEngine) extends Observer:
// Show initial board
println()
print(Renderer.render(engine.board))
println(s"${engine.turn.label}'s turn. Enter move (or 'quit'/'q' to exit):")
printPrompt(engine.turn)
// Game loop
while running do
@@ -62,11 +62,16 @@ class TerminalUI(engine: GameEngine) extends Observer:
running = false
println("Game over. Goodbye!")
case "" =>
println("Please enter a valid move.")
printPrompt(engine.turn)
case _ =>
engine.processUserInput(input)
// Unsubscribe when done
engine.unsubscribe(this)
private def printPrompt(turn: de.nowchess.api.board.Color): Unit =
val undoHint = if engine.canUndo then " [undo]" else ""
val redoHint = if engine.canRedo then " [redo]" else ""
print(s"${turn.label}'s turn. Enter move (or 'quit'/'q' to exit)$undoHint$redoHint: ")
end TerminalUI