我用非常好的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”小部件,不要担心异步终端输入的困难)

谢谢,

最佳答案

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

关于python - 在python-chess中在后台无限分析地运行鳕鱼,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59019206/

10-11 11:04