From aa6ae111db338205678cc1e5b2121ef079df13c9 Mon Sep 17 00:00:00 2001 From: Kris Lamoureux Date: Wed, 15 Mar 2023 18:07:44 -0400 Subject: [PATCH] Validate moves and erase errors from terminal --- chesscli.py | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/chesscli.py b/chesscli.py index 2b642ec..6cc8e2d 100644 --- a/chesscli.py +++ b/chesscli.py @@ -1,14 +1,36 @@ import chess import chess.engine +import urllib.parse + +# Check if input is a valid SAN move +def is_valid_san(board, raw_move): + try: + board.parse_san(raw_move) + return True + except ValueError: + return False board = chess.Board() engine = chess.engine.SimpleEngine.popen_uci("bin/stockfish") +engine.configure({"Skill Level": 1}) count = 1 +error = False while not board.is_game_over(): if board.turn == chess.WHITE: - move = input(str(count) + " ") - board.push_san(move) + raw_move = input(str(count) + " ") + valid_move = is_valid_san(board, raw_move) + if error: + for _ in range(4): + print("\033[F\033[K", end="") + print(str(count) + " " + raw_move) + error = False + if not valid_move: + print("Sorry, but '" + raw_move + "' is not a valid move") + print("See board: https://lichess.org/analysis/" + urllib.parse.quote(board.fen())) + error = True + else: + board.push_san(raw_move) else: result = engine.play(board, chess.engine.Limit(time=2.0)) print(str(count) + "...", board.san(result.move))