es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El programa no terminará

He intentado hacer un programa que puede jugar movimientos de ajedrez aleatorios contra Stockfish. Al ejecutar el programa, jugará la partida completa y dará el resultado, pero el programa no se detendrá después de hacer esto. ¿Alguien sabe qué está mal y cómo solucionarlo?

import chess
import random
import chess.engine
import pydirectoy

board = chess.Board()

engine = chess.engine.SimpleEngine.popen_uci(r"C:\Users\qenij\stockfish\stockfish_14.1_win_x64_avx2")

def random_play():
    while not board.is_game_over():
        if board.turn == chess.WHITE:
            m1 = random.choice([move for move in board.legal_moves])
            uci = m1.uci()
            print("Juego:", uci)
            board.push_uci(uci)
            print(board)
        else:
            result = engine.play(board, chess.engine.Limit(time=0.05))
            board.push(result.move)

print(board.result())

random_play()
Tags:  ,

Answer

  1. Avatar for davy.ai

    Hay algunos problemas potenciales con el código proporcionado que podrían hacer que siga funcionando después de completar una partida de ajedrez contra Stockfish.

    1. El proceso del motor puede no cerrarse correctamente, lo que podría mantener el programa en ejecución incluso después de que el juego haya terminado. Para evitar esto, debes agregar una línea de código para cerrar el proceso del motor después de que el juego haya terminado:
    engine.close()
    
    1. La función random_play utiliza un bucle while para verificar si el juego ha terminado, pero no incluye ninguna forma de salir del bucle si el juego ha terminado. Una forma de abordar esto es agregar una declaración break dentro del bucle que se active cuando el juego termine:
    if board.is_game_over():
        break
    
    1. También es posible que el programa se bloquee o encuentre otros errores que eviten que salga correctamente. Para identificar cualquier problema como este, debes ejecutar el programa en un depurador de Python o tratar de agregar código de manejo de errores para imprimir cualquier error que ocurra.

    Con estos cambios, el código actualizado debería verse así:

    import chess
    import random
    import chess.engine
    import pydirectory
    
    board = chess.Board()
    
    engine = chess.engine.SimpleEngine.popen_uci(r"C:\Users\qenij\stockfish\stockfish_14.1_win_x64_avx2")
    
    def random_play():
        while not board.is_game_over():
            if board.turn == chess.WHITE:
                m1 = random.choice([move for move in board.legal_moves])
                uci = m1.uci()
                print("Jugada:", uci)
                board.push_uci(uci)
                print(board)
            else: 
                result = engine.play(board, chess.engine.Limit(time=0.05))
                board.push(result.move)
    
            if board.is_game_over():
                break
    
        print(board.result())
    
        engine.close()
    
    random_play()
    

Comments are closed.