0

我希望你有一个美好的一天:)

最近在做一个象棋程序。

我现在正处于制作 AI 的阶段,我正在使用 Stockfish 进行测试。

由于我需要计算机有时间在不暂停 pygame 游戏循环的情况下进行评估,因此我正在使用线程库。

我还使用 python-chess 作为我的主要库来处理游戏状态和移动,以及访问 Stockfish。

这是我的线程代码:

def engine_play():
    global player_color
    global board
    while board.result() == "*":
        if board.turn is not player_color:
            result = engine.play(board, chess.engine.Limit(time=3.0))
            board.push(result.move)
            print(result.move)
    print(board.result())

engine_thread = threading.Thread(target=engine_play)
engine_thread.setDaemon(True)
engine_thread.start()

由于某种原因,engine_play() 中的 while 循环停止执行。

它不会一直停止,它只是随机停止。

当它在while循环之后打印board.result时,值=“*”。

当条件 (board.result() == "*") 仍然满足时,这个 while 循环如何停止?

它实际上是一个线程问题吗?

此外,pygame 游戏循环只是更新图形并实现诸如拖放功能之类的东西。

没有显示错误,我只有一个线程。

4

1 回答 1

0

我不完全确定循环为什么会停止,但我确实找到了解决问题的方法。代替:

while board.result() == "*":
    if board.turn is not player_color:
        result = engine.play(board, chess.engine.Limit(time=3.0))
        board.push(result.move)
        print(result.move)
print(board.result())

我放了一个无限循环,每次都检查 board.result() 。

while True:
    if board.result() == "*":
        if board.turn is not player_color:
            result = engine.play(board, chess.engine.Limit(time=3.0))
            board.push(result.move)
            print(result.move)
print(board.result())

将 Daemon 设置为 True 似乎也很重要,否则无限循环将阻止程序停止。

于 2020-09-25T14:37:28.677 回答