1

我编写了一个带有非常好的 GUI(PyQt5)的国际象棋程序。当我输入一个动作时,它会分析它并更新棋盘的 SVG 表示 - 这要归功于精彩的 python-chess 模块。现在一切正常。但是,我想做的是让引擎在后台工作并无限分析棋盘,让我输入新的动作。这是一个简单的代码示例:

import asyncio
import chess
import chess.engine
board = chess.Board()

async def analyse():
    transport, engine = await chess.engine.popen_uci("./stockfish-10-64")
    board = chess.Board()
    info = await engine.analyse(board, chess.engine.Limit(time=2))
    print(info["score"])
    await engine.quit()
    return(info)

async def get_input():
    a = input("enter move in SAN format")
    board.push_san(a)
    print(board)
    xx = await analyse()
    print(xx)

while(True):
    asyncio.run(get_input())

在这个例子中,我不能在分析完成之前输入一个新的移动。(注:原设计中招式是在PyQt5“lineedit”小部件中输入的,不用担心异步终端输入的困难)

谢谢,

4

1 回答 1

0

您可以使用 engine.play 的 'ponder' 属性,它允许在后台进行分析。现在,您可以将 2 秒的搜索分成多个块,并能够在两者之间输入移动以获得相似的搜索质量。

于 2020-02-08T08:55:51.367 回答