6

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

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

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


字符串看起来是这样的:

嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯哼

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

4

6 回答 6

5

您缺少信息,例如轮到谁移动,每个国王是否曾经移动过(意味着不允许易位),每个棋子的“过路”状态。除此之外,使用不太复杂的板表示法,如此处描述的 10x12 元素数组(除非您将其线性化为 120 元素数组),编写自己的代码对您来说将是一个非常有启发性的练习

于 2010-05-18T21:30:09.250 回答
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

于 2013-12-20T16:37:30.667 回答
3

只需使用 Python Chess 程序之一的源代码,如PyChessPython Chess

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

于 2010-05-18T19:56:41.667 回答
1

看看旁边的一些相关答案不会有什么坏处:国际象棋移动验证库https://stackoverflow.com/questions/1239913/smallest-chess-playing-program对我来说很突出。

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

于 2010-05-18T20:13:03.483 回答
0

查看棋盘

不幸的是,它有一些缺点:

  • 好像放弃了,因为评论里一年多前报的bug好像没有修复
  • 该代码并不真正符合 PEP-8
  • 有些方法又丑又大,并不是所有的方法都有文档字符串
  • 没有单元测试,因此深入研究该代码可能是一个挑战(我已经尝试了至少两次但失败了)

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

于 2010-07-26T18:51:16.630 回答
0

我在这里做了一个带有移动验证的简单国际象棋实现:https ://github.com/akulakov/pychess

验证逻辑在每个棋子的“moves()”方法中,您可以通过生成完整的移动列表并检查您的移动是否存在来验证您自己的移动。

于 2021-10-08T13:20:48.853 回答