问题标签 [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.

0 投票
0 回答
168 浏览

flask - 如何在 Python、Python-chess 和 Flask 中为我自己的国际象棋网站创建类似 Lichess 的引擎到玩家通信 API?

因此,这是针对一个大型大学项目,我正在尝试创建一个网站,让玩家能够登录,使用引擎(将在队友的 PC 或服务器上本地运行)然后显示输出,让玩家播放动作并再次将动作传达给引擎,并获取引擎的输出,并在浏览器中显示它们。

这就是我的想法:The user plays a move -> the move response gets displayed locally ->Goes to the engine as an input to the wrapper function via an API -> Engine plays move -> Gets displayed at the user's endpoint and so on.

我考虑过使用 Python-chess 基本上为我的团队创建的国际象棋引擎创建一个包装函数,以便获得最佳着法,当前的 FEN 等。

接下来,我正在考虑使用 Chess.js 和 chessboard.js/chessboard3.js 来显示基本动作并让玩家玩。

但是现在,我无法考虑如何在本地存储为“.exe”文件的引擎(使用 python-chess 包装器)和 Web 浏览器之间创建通信桥梁。我无法考虑如何编写 API。我能想到的最好的办法就是使用 Flask 框架,它可以从 Firebase 数据库中获取新的动作,用户的动作将被存储和记录。同样,带有引擎的服务器 PC 会下棋,并将其存储在 Firebase 数据库中,然后再次显示在客户端。

客户端处理将由 Chess 库(如 chess.js、chessboard.js)完成,而服务器端将主要由 python、python-chess 和其他一些面向 Firebase 的通信库完成。

我真的需要一些帮助来解决这个问题,因为我真的是设计 API 的新手,而且对我来说非常模糊。这是我能想到的最接近的,但我知道对 Firebase DB 的整个获取和检索调用将花费大量时间和吞吐量。

感谢大家!

0 投票
1 回答
229 浏览

python - push_san() 缺少 1 个必需的位置参数:“san”

我正在使用 python-chess 模式输入:名为 'pre' 的列表包含: ['e2e4','e7e5']

错误:TypeError:push_san() 缺少 1 个必需的位置参数:'san'

有关解决此问题的任何想法?谢谢

0 投票
2 回答
143 浏览

python - AttributeError:“NoneType”对象没有属性“符号”python-chess

我正在对位置进行评级,但我不知道一块是否在某个方格上。当我运行我的代码时,我得到

AttributeError:“NoneType”对象没有属性“符号”

这是代码:

0 投票
1 回答
148 浏览

python - 如何在国际象棋游戏中猜测皇后的位置

我最近参加了一个编程比赛,我能够及时回答七道题中的六道题。最后一个问题是:“从用户那里取一个数字,用给定数字的幂做一个棋盘,放置尽可能多的皇后,并以某种方式排列皇后,使它们不会在水平、垂直方向上相互威胁和对角线。” 因此,例如,如果用户输入4 ,那么4x4 (16)棋盘中将有4 个皇后。好吧,对于垂直和水平部分,我能够检查它们是否在同一列中,对于对角线部分,我使用了非常糟糕的 while 循环组合,然后将国际象棋游戏中的所有保留位置添加到列表中。问题是我使用随机生成索引的模块,然后检查它们是否在保留数字中,然后再试一次,直到它不存在,所以发生的情况是这个国际象棋游戏只有少数组合,如果开始索引错误,程序会变得漂亮永远停留在while循环中。我曾想过从最后一行到第一行,但即便如此,我仍在使用随机索引。如何让程序计算皇后的位置,而不是随机输入一个数字并查看它是否有效?我的代码:(如果我的代码有其他问题,请指出): num=4 的唯一可能组合

0 投票
1 回答
94 浏览

python - 如何跟踪单个棋子的移动?

我正在使用 python-chess,我想知道在使用 python-chess 以 pgn 格式记录的单场比赛中跟踪黑国王的运动的好方法是什么。从本质上讲,它创建了每个位置的字符串。

0 投票
1 回答
55 浏览

python - 如何制作特定(可变)对象的深拷贝?

我正在尝试制作国际象棋引擎。

但是,我遇到了一个错误,其中:

这不好,尤其是那legal move部分。我追溯了错误的根源:

我知道 Python 古怪的可变性,虽然我知道我可以复制这样的列表:

type(board)返回<class 'chess.Board'>
如何制作完整的副本board
提前致谢。

0 投票
1 回答
132 浏览

python - 如何从 read_game 的最终位置获得棋盘?

这里我们成功解析了一个 PGN 游戏:

不幸的是,board()仍然是初始位置。如何获得最终位置?

0 投票
1 回答
567 浏览

python - chess.engine 在同一个脚本中多次分析一个位置时,为什么会有不同的分数?

初学者程序员在这里,尝试制作一个检测错误的应用程序,并希望了解有关 chess.engine 库的更多信息。

我假设使用分析函数是一个离散的、自包含的过程,它不依赖于引擎先前调用的缓存或内存或类似的东西。

如果是这种情况,为什么在脚本中多次调用分析时会得到多个不同的评估:

输出:

它发生在一定水平以上的各种发动机深度,但在深度较低时不会发生,例如高达 3。
它以时间而不是深度作为限制发生。
它发生在多个不同的起始位置。
它发生在多个不同的动作中。
即使我在每次通话之间都有engine.quit(),也会发生这种情况。engine = chess.engine.SimpleEngine.popen_uci(os.getcwd()+'/static/'+'stockfish')

分析函数不能有随机元素,因为当我再次运行整个脚本时,我得到完全相同的分数。只是当它在同一个脚本中多次调用同一个位置时,它每次都会给出不同的分数,好像它正在使用某种缓存或者每次它看起来更深。

那么我对它的工作原理的理解哪里出错了?

编辑:

如果我删除root_moves参数(只是为了简化事情)然后替换:

和:

我得到以下输出:

所以看起来我每次都得到不同的“seldepths”。什么是seldepth?我在文档中找不到足够的信息。

0 投票
1 回答
950 浏览

python - 使用 python-chess 从 PGN 文件中提取移动作为字符串

我正在使用模块python-chess ( https://python-chess.readthedocs.io/en/latest/index.html ) 来提取分析 400 万个国际象棋游戏 ( http://caissabase.co.uk/ )。

如何将游戏的所有动作作为字符串加载到列表中?这个想法是让我能够提取有关移动的信息。例如,皇后吃了多少次对手的棋子?因此,我会在每个移动字符串中搜索“Qx”。我试过这个:

上面的代码会产生以下错误:

然而,其余代码没有test.append(board.san(move))将所有游戏动作打印为字符串就好了。

任何帮助是极大的赞赏。

0 投票
1 回答
396 浏览

python - 从国际象棋导入国际象棋引擎:国际象棋引擎错误

我已经多次查看教程,但仍然有这个错误。在该系列的第一个视频之后,他能够显示该板。该错误在我的导入语句中突出显示了 ChessEngine。

这是我的主要资源:https ://www.youtube.com/watch?v=EnYui0e73Rs&t=2095s

这是错误: ImportError: cannot import name 'ChessEngine' from 'Chess' (unknown location)

请停下来

我的代码如下