问题标签 [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和GameNode 的信息?
我分析了代码,但没有找到好的解释。
python - 尽管在 cmd 提示符下调用它,但无法从文件中调用属性
使用这个包 - https://pypi.python.org/pypi/python-chess
在 cmd 我可以执行以下操作
然后我创建了一个名为 a.py 的文件,它有以下 3 行:
我得到:
回溯(最后一次调用):文件“a.py”,第 3 行,在 board = chess.Board() AttributeError: module 'chess' has no attribute 'Board'
这突然出现(昨天,从来没有这个问题),现在在我尝试干净安装 python 3.5 的两台机器上都是一个问题。我该如何解决?
python - 使用 python-chess 为游戏添加动作
我一直在玩 python-chess,我正在加载一个 PGN 文件 (A),从中读取游戏。然后我采取行动,创建第二个更新的 PGN 文件 (B)。我阅读了 B 的最后一步,并想在 A 中进行相同的移动,并用日期对该移动进行评论。
最终的 PGN 文件显示了最初的游戏,没有从 B 移动。文档说它board()
只是生成一个副本,并没有改变实际的游戏。在游戏中添加移动的正确方法是什么?
python - python-chess - AttributeError:模块'chess'没有属性'pgn'
我正在尝试将 python 国际象棋游戏导出到 pgn 文件。文档建议-
但是该chess.pgn.Game.from_board(chessBoard)
行会引发以下错误-
AttributeError:模块“国际象棋”没有属性“pgn”
pgn
当我键入时,它也会显示在智能感知中,chess.
因此编辑器也能够看到有一个pgn
in chess
。这是在 Windows 10 上的 VS2015 中运行的 python 3.x。
可能是什么原因造成的?
python - Heroku -> Python:使用子进程启动可执行文件得到 [Permission Denied]
问题:
我在 heroku 上运行了一个 python webapp,它创建了一个与Stockfish国际象棋引擎通信的子进程。
我的本地计算机上的所有JustWorks™,但是在尝试在 Heroku 上部署项目时,我收到一条错误消息PermissionError: [Errno 13] Permission denied
下面,我包含了我尝试部署它时的 heroku 日志。
我知道其他人有 heroku 应用程序在同一个测功机中运行 stockfish 引擎,但是我没有太多运气找到资源来帮助我让它工作。任何帮助表示赞赏。谢谢!
日志:
bash
2017-06-20T22:32:48.419694+00:00 heroku[web.1]: Starting process with command `python server.py`
2017-06-20T22:32:51.933668+00:00 app[web.1]: Traceback (most recent call last):
2017-06-20T22:32:51.933687+00:00 app[web.1]: File "server.py", line 23, in <module>
2017-06-20T22:32:51.933882+00:00 app[web.1]: engine = chess.uci.popen_engine(DIR_PATH + "/stockfish_8_x64")
2017-06-20T22:32:51.933884+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/chess/uci.py", line 1405, in popen_engine
2017-06-20T22:32:51.934623+00:00 app[web.1]: PopenProcess(engine, command, **kwargs)
2017-06-20T22:32:51.934625+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/chess/uci.py", line 404, in __init__
2017-06-20T22:32:51.934874+00:00 app[web.1]: self.process = subprocess.Popen(command, **popen_args)
2017-06-20T22:32:51.934877+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/subprocess.py", line 707, in __init__
2017-06-20T22:32:51.935286+00:00 app[web.1]: restore_signals, start_new_session)
2017-06-20T22:32:51.935288+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/subprocess.py", line 1326, in _execute_child
2017-06-20T22:32:51.935988+00:00 app[web.1]: raise child_exception_type(errno_num, err_msg)
2017-06-20T22:32:51.936008+00:00 app[web.1]: PermissionError: [Errno 13] Permission denied
2017-06-20T22:32:52.051035+00:00 heroku[web.1]: State changed from starting to crashed
2017-06-20T22:32:52.035235+00:00 heroku[web.1]: Process exited with status 1
python - python-chess - 函数运行时全局变量发生变化
我对 Python 作用域在这里的工作方式感到困惑。
上面的代码产生这个输出:
全局变量保持不变,但在函数中,局部变量打印出正确的变化值。
但是,在这个 python-chess 版本中,我在下面运行:
它产生这个输出:
出乎意料(至少对我而言)board
函数运行后全局变量发生了变化。
我认为一个函数会创建一个局部变量而不是修改全局变量 - 似乎您甚至需要明确暗示您想通过使用global
关键字来更改它。它似乎在我使用的简单乘法示例中有效,也许是由于.push()
python-chess 提供的方法?
然后在运行函数时如何保留全局变量的值?
在这种情况下,我想要的输出应该是:
python - 使用 Python 3 为 GNU Chess 编写 API/包装器
我目前正在为 GNU Chess 开发 Python 3 API/包装器。我一直在做一些研究,现在我几乎被困住了。
有Chess Engine Communication Protocol,但我不确定这是否是我应该走的路。还有Internet Chess Servers,但我再次不确定这是否是我应该研究的。还有便携式游戏符号,但看起来它是为人类消费而不是计算机制作的。
那么与 GNU Chess 交互的最佳方式是什么?我应该创建一个子进程来与之交互/解析它的输出吗?这是最好的方法吗?
这是我在 GNU Chess 中进行开局的一个例子:
python - 切片和列出副本
我正处于国际象棋实施的早期阶段,我正在研究如何移动棋子。问题是,我无法弄清楚列表切片发生了什么!
这是我的变量board
:
看起来像:
因此,我开始通过执行以下操作来遍历棋子以找到棋子可接受的移动:
哪里p_moves
是:
最终发生的事情是new
每次调用函数时板似乎都没有清除,我不明白为什么,因为我将它作为一个新变量切片,并且它在内存中的 ID 与 board_state 不同,所以我我不太确定这里发生了什么。
为了澄清,在循环通过顶部之后(我什至没有考虑下半部分 - 最小的一块怎么这么痛苦?!),下一个可能的董事会状态最终看起来像:
谢谢你的帮助。
python-3.x - 从 SVG 棋盘中获取点击的棋子
我正在Python 3.6.3
使用PyQt5 5.9.1
(GUI 框架)和python-chess 0.21.1
(国际象棋库)在Windows 10
. 我想获取在 SVG 棋盘(由 提供python-chess
)上单击的棋子的值,以便我可以将该棋子移动到另一个方格。
在第一次鼠标左键单击并获取该块后,我想从用户那里获得第二次鼠标左键单击并获取用户单击的方块。然后我的国际象棋 GUI 必须将棋子从起始方格移动到目标方格。
所以,这是我到目前为止的完整工作代码。非常欢迎任何提示或实际代码添加。
python - 为什么只在公共函数中调用私有函数?
当我看到以下代码时,我在神话般的python-chess库的源代码中徘徊:
该reset_board()
函数只做一件事,调用它的私有对应物。这背后有什么原因吗?由于python不必解析名称,将代码直接放在私有函数中会更快_reset_board()
吗?