def get_buffer(game, config) -> (ChessEnv, list): env = ChessEnv().reset() black = ChessPlayer(config, dummy=True) white = ChessPlayer(config, dummy=True) result = game.headers["Result"] actions = [] while not game.is_end(): game = game.variation(0) actions.append(game.move.uci()) k = 0 observation = env.observation while not env.done and k < len(actions): if env.board.turn == chess.WHITE: action = white.sl_action(observation, actions[k]) #ignore=True else: action = black.sl_action(observation, actions[k]) #ignore=True board, info = env.step(action, False) observation = board.fen() k += 1 env.done = True if not env.board.is_game_over() and result != '1/2-1/2': env.resigned = True if result == '1-0': env.winner = Winner.white black_win = -1 elif result == '0-1': env.winner = Winner.black black_win = 1 else: env.winner = Winner.draw black_win = 0 black.finish_game(black_win) white.finish_game(-black_win) data = [] for i in range(len(white.moves)): data.append(white.moves[i]) if i < len(black.moves): data.append(black.moves[i]) return env, data
def start(config: Config): PlayWithHumanConfig().update_play_config(config.play) chess_model = PlayWithHuman(config) env = ChessEnv().reset() human_is_black = random() < 0.5 chess_model.start_game(human_is_black) while not env.done: if (env.board.turn == chess.BLACK) == human_is_black: action = chess_model.move_by_human(env) if action == 'exit': env.done = True print("You move to: " + action) else: action = chess_model.move_by_ai(env) print("AI moves to: " + action) board, info = env.step(action) env.render() print("Board FEN = " + board.fen()) print("\nEnd of the game.") #spaces after this? print("Game result:") #and this? print(env.board.result())