我在下一步白棋可以通过移动 b7a8 推动棋子的地方放置一个 FEN。
在我当前使用的库中(并且我想替换)。执行此类操作时,它会返回一种错误类型,因此您会询问原因,然后您会得到指示,在这种情况下这是错误的,因为它是一种涉及提升的动作。
所以我要做的是知道它是什么类型的错误,如果是促销,在显示屏上显示,选项 Queen、Rook、Bishop、Knight ......所以用户选择然后我通过 b7a8 和字母的一块。
尝试使用“ if move.promotion != None:”时,我发现您必须首先发送您想要的内容,例如“b7a8q”,然后它会告诉您这是否是促销动作。但我需要事先知道。比如:做b7a8的时候,报错,为什么?因为是促销运动,用户重新介绍运动选择,我有b7a8q。
这可能吗?或者你能以什么方式解决这个问题?
非常感谢。
这是我用来尝试的代码:
import asyncio
import chess
import chess.engine
engine = chess.engine.SimpleEngine.popen_uci("stockfish.exe")
board = chess.Board()
board.set_fen("rn1qkbnr/pPpb1ppp/4p3/8/3p4/8/PP1PPPPP/RNBQKBNR w KQkq - 1 5") #Position to try to promote "b7a8"
while not board.is_game_over():
print(board)
mover = input("Make your move")
prueba = chess.Move.from_uci(mover)
if prueba in board.legal_moves:
if board.is_castling(prueba):
print("good you castling")
else:
print ("that is not a good move, make another valid")
mover = input("a valid move please: ")
if prueba.promotion != None:
print ("This is a promotion (or was)")
board.push_xboard(mover)
print(board)
result = engine.play(board, chess.engine.Limit(time=0.1))
board.push(result.move)
print(board)
engine.quit()