有人知道某处是否有免费的python国际象棋移动验证功能?
我需要什么。我有一个图表存储为字符串,并移动候选人。我需要的是看移动候选是否对图有效。
如果可能,会非常有兴趣看到示例。
字符串看起来像这样:
ememememememememememememememememememembbememwpemememememememwpemembkememememememememememememememememwbembrememememwkemememememem
我理解这看起来很愚蠢,但我发现用这种方式编码位置最容易。移动候选人对我来说只是另一个这样的位置(发生在下一步之后,我认为可以改变这种行为)
答案 0 :(得分:5)
您缺少信息,例如轮到你了,每个国王是否曾经移动过(意味着不允许铸造),每个棋子的“通过”状态。除此之外,使用一个非常复杂的电路板表示法(例如描述为here的10x12元素数组(除了你将它线性化为120-),这对你来说是一个非常有益的练习。元素数组)。
答案 1 :(得分:4)
我知道这是一个相当古老的问题,但是我的兄弟和我正在寻找同样的事情,我们遇到了这个名为Chessnut的令人敬畏的小python模块。
以下是其使用示例:
#!/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!
答案 2 :(得分:3)
只需使用其中一个Python国际象棋程序的来源,例如PyChess或Python Chess
具体来说,pychess的有效移动:https://code.google.com/p/pychess/source/browse/lib/pychess/Utils/lutils/validator.py
答案 3 :(得分:1)
侧面看一些相关答案不会有害:Chess move validation library和https://stackoverflow.com/questions/1239913/smallest-chess-playing-program对我很有帮助。
虽然我个人赞成建立自己的。
答案 4 :(得分:0)
查看ChessBoard。
不幸的是它有一些缺点:
好处是代码是GPL,所以只要你坚持使用该许可证就可以使用它。