我在下一步白棋可以通过移动b7a8来提升一个兵的位置设置了一个围栏。
在我当前使用的(并且我想要替换的)库中。当执行这种类型的操作时,它会返回一种类型的错误,因此您会询问原因,然后您会得到指示,在这种情况下这是一个错误,因为它是一种涉及升级的移动类型。
所以我要做的就是知道它是什么类型的错误,如果它是宣传的,在lcd上显示,选项皇后,车,毕晓普,骑士…所以用户选择,然后我传递带有片段字母的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()发布于 2021-04-14 20:55:00
如果移动无效,您可以检查添加"q“是否使其有效。如果是这样,那么这一定是一个兵升级移动,然后您可以询问用户他们想要将兵升级到哪个棋子。
所以:
if prueba in board.legal_moves:
if board.is_castling(prueba):
print("good job castling!")
else:
if chess.Move.from_uci(mover + "q") in board.legal_moves:
mover += input("Which piece you want to promote the pawn to? [q,r,b,n]: ")
prueba = chess.Move.from_uci(mover)
if prueba not in board.legal_moves:
print ("that is not a good move, make another valid")
mover = input("a valid move please: ")尽管如此,仍有一些问题需要处理:
while True:
mover = input("Make your move: ")
prueba = None
try:
prueba = chess.Move.from_uci(mover)
except ValueError:
pass
if prueba not in board.legal_moves:
try:
if chess.Move.from_uci(mover + "q") in board.legal_moves:
mover += input("Which piece you want to promote the pawn to? [q,r,b,n]: ")
prueba = chess.Move.from_uci(mover)
except ValueError:
pass
if prueba in board.legal_moves:
break
print ("that is not a good move, make another valid move")发布于 2021-04-14 20:06:02
你应该用你选择的那一件来测试促销行动是否合法。在此之后,您可以向用户询问他想要的部分。
https://stackoverflow.com/questions/66571405
复制相似问题