问题标签 [python-chess]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 有没有办法让不转的人获得合法的行动?蟒蛇国际象棋
我对制作国际象棋算法很感兴趣。为此,我将使用 python-chess 库。然而,为了制作一个好的算法,我需要能够让对手的合法动作返回,即使轮到他们也不行。所以在游戏开始时它会返回
board.legal_moves() -> [A2A4, A2A1, B2B4, B2B1, 等...]
我想知道在游戏开始时我是否可以说类似的话
board.enemy_legal_moves() > [A7A5, A7A6, 等...]
或者如果有任何算法方法我可以做到。感谢您的时间!
python - “AssertionError: push() 期望移动是合法的”,显示一个不是传入的棋盘
我正在尝试编写一个简单的国际象棋引擎,以寻找产生最大物质优势的举动。但是,我遇到了一个奇怪的错误,它显示了一个不是我传入的板。
我的代码:
但是,在运行此功能时,我收到此错误:
AssertionError: push() expects move to be pseudo-legal, but got g8h6 in rnbqkb1r/ppppnppp/8/8/3PP3/8/PPP2PPP/RNBQKBNR
错误消息中的板如下所示:
如您所见,我的电子文件棋子完全消失了,我的骑士代替了它的战友。但是,这不是我传递给我的方法的板,如下所示:
有任何想法吗?我不明白为什么要以这种方式更改电路板。
python-chess - 合法用户使用 python-chess 移动
应该如何在 python-chess 上使用合法移动功能?
通过运行此代码并输入 e2e4。事实证明,此举是无效的。
当我浏览列表时,我发现......具有这种价值:
那么,是不是来自legal_moves,我从用户那里得到了合法的动作??
还是假设我必须以这种方式输入值?我不明白。
我想要的是用户通过控制台“e2e4”输入一个值并验证是否可以移动。(顺便说一句,我需要那种坐标“e2e4”,而不是“e4”或“Nf3”)。
谢谢。
python-chess - 如何推广典当?
我在下一步白棋可以通过移动 b7a8 推动棋子的地方放置一个 FEN。
在我当前使用的库中(并且我想替换)。执行此类操作时,它会返回一种错误类型,因此您会询问原因,然后您会得到指示,在这种情况下这是错误的,因为它是一种涉及提升的动作。
所以我要做的是知道它是什么类型的错误,如果是促销,在显示屏上显示,选项 Queen、Rook、Bishop、Knight ......所以用户选择然后我通过 b7a8 和字母的一块。
尝试使用“ if move.promotion != None:”时,我发现您必须首先发送您想要的内容,例如“b7a8q”,然后它会告诉您这是否是促销动作。但我需要事先知道。比如:做b7a8的时候,报错,为什么?因为是促销运动,用户重新介绍运动选择,我有b7a8q。
这可能吗?或者你能以什么方式解决这个问题?
非常感谢。
这是我用来尝试的代码:
python - 我如何通过比较两个不同的分界来获得所玩的动作?
所以我有两个分。一个在搬家之前,一个在搬家之后。我怎样才能通过将这 2 个 fens 相互比较并以 uci 或任何其他格式返回答案来获得所播放的动作。我正在使用 python-chess 库,所以也许有一种方法可以通过比较两个不同的棋盘对象来获得下棋动作?
python - 在 python-chess 库中:“white_clock,white_inc black_clock,black_inc”由库内部管理?还是我需要自己更新?
我正在使用 python-chess 库,我需要在python-chess 库中知道: “white_clock,white_inc black_clock,black_inc”是由库内部管理的?还是我需要自己更新?
我有这样的代码:
所以图书馆会自己更新它的点击,还是我每次自己都需要更改限制值?
还有如何打印剩余时间,比如:white_clock
python - 如何制作正则表达式以从 Chess Pgn 中删除所有时间戳数据?
我有一个带有来自 chess.com 比赛的 Pgn 的字符串。我需要从 Pgn 中删除所有时间数据。使用正则表达式我将如何做到这一点?
'1。e4 {[%clk 0:29:59.9]} 1... e5 {[%clk 0:29:59.1]} 2. Nf3 {[%clk 0:29:58]} 2... Nf6 {[% clk 0:29:57.2]} 3. Nc3 {[%clk 0:29:51.9]} 3... Bb4 {[%clk 0:29:51.9]} 4. a3 {[%clk 0:29:49.4 ]} 4... Ba5 {[%clk 0:29:46.3]} 5. Bc4 {[%clk 0:29:44.7]} 5... OO {[%clk 0:29:37.5]} 6. Ng5 {[%clk 0:29:37.9]} 6... d6 {[%clk 0:29:10]} 7. OO {[%clk 0:29:35.7]} 7... Be6 {[% clk 0:28:41.8]} 8. Nxe6 {[%clk 0:29:19]} 8... fxe6 {[%clk 0:28:33.2]} 9. b4 {[%clk 0:29:13.9 ]} 9... Bb6 {[%clk 0:28:21.6]} 10. a4 {[%clk 0:29:08.4]} 10... d5 {[%clk 0:27:53.9]}
我想用 {[%clk ]} 和一些时间戳删除所有时间戳。
之后的预期字符串应该是:
'1。e4 1... e5 2. Nf3 2... Nf6' 等等
python - 为什么在代表深度学习任务的棋盘时使用逻辑移位?
最近,我遇到了一个 twitch 主播,他正在开发自己的基于深度学习的国际象棋引擎。我正在浏览我在视频中看到的代码,我不太明白的一件事是,为什么他在准备输入数据(即棋盘表示)进行训练时使用逻辑移位。以下是他遵循的粗略步骤:
- 他以“pgn”格式获取了一个包含国际象棋游戏的数据集
- 对于每场比赛中的每一步,都会出现一个新的棋盘状态。这些新状态中的每一个都以下列方式序列化:
- 他创建了一个 8x8 矩阵,表示此特定移动后的 8x8 棋盘
- 该矩阵应该存储 8 位无符号整数
- 他将所有棋子放在棋盘上(即在矩阵中)
- 白块定义如下:
{"P": 1, "N": 2, "B": 3, "R": 4, "Q": 5, "K": 6}
- 黑色棋子定义为:
{"p": 9, "n": 10, "b": 11, "r": 12, "q": 13, "k": 14}
- 这意味着例如白色棋子在矩阵中存储为“1”,而黑色皇后将存储为“13”
- 在对电路板进行序列化后,他通过执行一些我不太理解的逻辑位操作,从原始的 8x8 矩阵生成最终的电路板状态。新生成的(即最终的棋盘状态)也不是 8x8 而是 5x8x8:
我想知道有人能帮我理解这些操作背后的一些逻辑吗?据我了解,他想创建 5 个不同的 8x8 板表示,每个都基于不同的逻辑移位(3、2、1 和 0 位逻辑左移)。但是,我不完全确定这个假设是否正确,并且我真的不知道在棋盘表示的上下文中运行这些操作的原因是什么。
python - 在 Python-Chess 中获取棋子的位置
我目前正在使用 Python-Chess 构建一个国际象棋游戏,并且我正在尝试使用 SVG 模块来生成棋盘的 SVG 图像。生成 svg 的参数之一是check
(此处),它是“要标记的表示检查的正方形”。但是,从文档中,我无法找到一种方法来确定玩家的国王在哪里。
我想要发生的是,每当我希望它使用当前玩家国王的当前位置board.is_check()
生成 svg 时。check=
我该如何解决这个问题?我是否必须遍历每个方格并检查那里有什么棋子,直到找到正确的国王?还是有我没有看到的功能?任何帮助表示赞赏,在此先感谢!
python - 在一行中创建一个 Sqlalchemy 表以保存国际象棋移动集
我有一个游戏表,我想将每个游戏中的动作保存在这个表中。我能想到的唯一方法(不使用泡菜)是为每个游戏设置另一个表来保存动作集。我的问题是我不确定如何在 Sqlalchemy 中做到这一点,而且我在其他地方找不到答案。我是被迫使用泡菜类型还是有更好的方法我没有看到?
使用 Python 3.8.5 和最新版本的 Sqlalchemy。
这(^^^)是我的数据库模式。