python: 象棋走法验证

6 投票
6 回答
9847 浏览
提问于 2025-04-15 22:52

有没有人知道哪里有免费的 Python 象棋走法验证函数?

我需要的是什么呢?我有一个以字符串形式存储的棋盘图,还有一个想要尝试的走法。我想知道这个走法在这个棋盘上是否有效。

如果可能的话,我很想看看一些例子。


这个字符串看起来是这样的:

ememememememememememememememememememembbememwpemememememememwpemembkemememememememememememememememememwbembrememememwkemememememem

我知道这听起来可能有点傻,但我觉得用这种方式来编码棋盘位置是最简单的。对我来说,想要尝试的走法就是另一个这样的棋盘位置(这个位置是在下一步之后的,我觉得可以改变这种行为)。

6 个回答

3

你可以直接使用一些Python国际象棋程序的源代码,比如PyChess或者Python Chess

特别是对于pychess的有效走法,你可以查看这个链接:https://code.google.com/p/pychess/source/browse/lib/pychess/Utils/lutils/validator.py

4

我知道这个问题有点老了,但我和我哥哥在找同样的东西时,发现了一个很棒的 Python 模块,叫做 Chessnut

下面是它的一个使用示例:

#!/usr/bin/python
from Chessnut import Game

chessgame = Game(fen="rnbq1rk1/ppppp1bp/5np1/5p2/2PP4/2NBPN2/PP3PPP/R1BQK2R b KQ - 4 6")
print chessgame  

print chessgame.get_moves()

# apply a move 
chessgame.apply_move(chessgame.get_moves()[1])

print chessgame

这是生成的输出:

rnbq1rk1/ppppp1bp/5np1/5p2/2PP4/2NBPN2/PP3PPP/R1BQK2R b KQ - 4 6
['b8a6', 'b8c6', 'd8e8', 'f8e8', 'f8f7', 'g8h8', 'g8f7', 'a7a6', 'a7a5', 'b7b6', 'b7b5', 'c7c6', 'c7c5', 'd7d6', 'd7d5', 'e7e6', 'e7e5', 'g7h8', 'g7h6', 'h7h6', 'h7h5', 'f6e8', 'f6d5', 'f6e4', 'f6g4', 'f6h5', 'g6g5', 'f5f4']
r1bq1rk1/ppppp1bp/2n2np1/5p2/2PP4/2NBPN2/PP3PPP/R1BQK2R w KQ - 5 7

太棒了! :) 感谢 cgearhart

5

你缺少一些信息,比如现在轮到谁走棋、每个国王是否曾经移动过(这意味着不能进行王车易位)、每个兵的“过路兵”状态。除此之外,自己动手写一个棋盘表示会对你很有帮助,可以使用一个不太复杂的棋盘表示方法,比如这里提到的10x12的数组(不过你需要把它变成一个120个元素的数组)。

撰写回答