我正在尝试编写一个简单的国际象棋引擎,以寻找产生最大物质优势的举动。但是,我遇到了一个奇怪的错误,它显示了一个不是我传入的板。
我的代码:
def best_move(board):
print(board)
moves = board.legal_moves
result = choice(list(moves))
for i in moves:
newboard = board
newboard.push(i)
oldboard = board
oldboard.push(result)
if material_count(newboard) > material_count(oldboard):
result = i
return result
但是,在运行此功能时,我收到此错误:
AssertionError: push() expects move to be pseudo-legal, but got g8h6 in rnbqkb1r/ppppnppp/8/8/3PP3/8/PPP2PPP/RNBQKBNR
错误消息中的板如下所示:
r n b q k b . r
p p p p n p p p
. . . . . . . .
. . . . . . . .
. . . P P . . .
. . . . . . . .
P P P . . P P P
R N B Q K B N R
如您所见,我的电子文件棋子完全消失了,我的骑士代替了它的战友。但是,这不是我传递给我的方法的板,如下所示:
r n b q k b n r
p p p p . p p p
. . . . . . . .
. . . . p . . .
. . . P P . . .
. . . . . . . .
P P P . . P P P
R N B Q K B N R
有任何想法吗?我不明白为什么要以这种方式更改电路板。