0

我发现检查移动是否捕获一块的最佳方法是计算移动前后的所有块并验证是否不同,但在我看来效率很低且不优雅。

4

2 回答 2

1

您还需要检查en passant,但我认为这就是您需要担心的全部。

以下代码应该可以工作;如果未捕获任何内容,则返回 0,否则使用来自 python 国际象棋的代码(例如 chess.PAWN、chess.ROOK 等):

def CapturedPiece(board, move):
    if board.is_capture(move):
        if board.is_en_passant(move):
            return chess.PAWN
        else:
            return board.piece_at(move.to_square).piece_type
    return 0

我在模块中找不到已经执行此操作的函数,但这并不意味着它不存在或不会在某些时候添加。

于 2021-08-26T04:29:21.827 回答
0

我找到了比计数更好的方法(即使仍然不是最好的也是迄今为止最好的方法)。

验证目标方格中是否有棋子或移动是否是棋子 验证源文件和目标文件(x 坐标)是否不同。

quiet = board.piece_type_at(move.to_square)==None
if ( board.piece_type_at(move.from_square)==chess.PAWN ) \
   and ( chess.square_file(move.from_square)!=chess.square_file(move.to_square) ):
    quiet=False
于 2020-05-17T13:47:19.100 回答