python:国际象棋移动验证

时间:2010-05-18 19:46:29

标签: python chess

有人知道某处是否有免费的python国际象棋移动验证功能?

我需要什么。我有一个图表存储为字符串,并移动候选人。我需要的是看移动候选是否对图有效。

如果可能,会非常有兴趣看到示例。


字符串看起来像这样:

  

ememememememememememememememememememembbememwpemememememememwpemembkememememememememememememememememwbembrememememwkemememememem

我理解这看起来很愚蠢,但我发现用这种方式编码位置最容易。移动候选人对我来说只是另一个这样的位置(发生在下一步之后,我认为可以改变这种行为)

5 个答案:

答案 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国际象棋程序的来源,例如PyChessPython Chess

具体来说,pychess的有效移动:https://code.google.com/p/pychess/source/browse/lib/pychess/Utils/lutils/validator.py

答案 3 :(得分:1)

侧面看一些相关答案不会有害:Chess move validation libraryhttps://stackoverflow.com/questions/1239913/smallest-chess-playing-program对我很有帮助。

虽然我个人赞成建立自己的。

答案 4 :(得分:0)

查看ChessBoard

不幸的是它有一些缺点:

  • 它似乎被抛弃了,因为一年多前在评论中报告的错误似乎没有修复
  • 代码不符合PEP-8
  • 有些方法非常难看且很大,并非所有方法都有docstrings
  • 没有单元测试,所以挖掘代码可能是一个挑战(我已经尝试了至少两次并且失败了)

好处是代码是GPL,所以只要你坚持使用该许可证就可以使用它。