I hope you're having a good day :)
Recently I have been making a chess program.
I'm now at the point of making the AI and I'm using Stockfish for testing purposes.
Since I need the computer to have time to evaluate without pausing the pygame game loop, I'm using the threading library.
I'm also using python-chess as my main library for handling the game state and making moves, as well as accessing Stockfish.
Here is my code for threading:
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()
For some reason, the while loop in engine_play() stops executing.
It doesn't stop consistently, it just stops at random.
When it prints board.result after the while loop the value = "*".
How is this while loop stopping when the condition (board.result() == "*") is still met?
Is it actually a threading problem?
Also, the pygame game loop just updates the graphics and implements things like drag 'n drop functionality.
There are no errors displayed and I only have this one thread.
I'm not entirely sure why the loop stops, but I did figure out a way to fix my problem. Instead of:
I put an infinite loop and checked for board.result() every time.
It also seems pretty important to set Daemon to True, otherwise the infinite loop will prevent the program from stopping.