def playback(game_history: GameHistory, player: Player, color: Color): game = LocalGame() opponent_name = game_history.get_white_player_name() if color == chess.WHITE: opponent_name = game_history.get_black_player_name() player.handle_game_start(color, game.board.copy(), opponent_name) game.start() turn = game_history.first_turn() while not game.is_over() and turn < game_history.last_turn(): opt_capture_square = game.opponent_move_results() if game.turn == color: player.handle_opponent_move_result(opt_capture_square is not None, opt_capture_square) sense_actions = game.sense_actions() move_actions = game.move_actions() sense = game_history.sense(turn) player_sense = player.choose_sense(sense_actions, move_actions, game.get_seconds_left()) if game.turn == color and sense != player_sense: print( 'Warning: Sense action did not match history on turn {}. Using the sense action from history.' .format(turn)) sense_result = game.sense(sense) if game.turn == color: player.handle_sense_result(sense_result) move = game_history.requested_move(turn) player_move = player.choose_move(move_actions, game.get_seconds_left()) if game.turn == color and move != player_move: print( 'Warning: Move action did not match history on turn {}. Using the move action from history.' .format(turn)) requested_move, taken_move, opt_enemy_capture_square = game.move(move) if game.turn == color: player.handle_move_result(requested_move, taken_move, opt_enemy_capture_square is not None, opt_enemy_capture_square) game.end_turn() turn = turn.next game.end() winner_color = game.get_winner_color() win_reason = game.get_win_reason() game_history = game.get_game_history() player.handle_game_end(winner_color, win_reason, game_history)
def test_time(self, seconds=1, turns=20, phases=3): delta = seconds / (turns * phases) game = LocalGame(seconds_per_player=seconds) turn = True time_by_color = game.seconds_left_by_color.copy() game.start() for i in range(turns): for _ in range(phases): start = game.get_seconds_left() time.sleep(delta) end = game.get_seconds_left() self.assertAlmostEqual(start - end, delta, places=2) time_by_color[turn] = game.get_seconds_left() turn = not turn game.end_turn() self.assertAlmostEqual(game.get_seconds_left(), time_by_color[turn], places=2) game.end() self.assertAlmostEqual(game.get_seconds_left(), time_by_color[turn], places=2) time.sleep(delta) self.assertAlmostEqual(game.get_seconds_left(), time_by_color[turn], places=2)