Ejemplo n.º 1
0
def play(bot1_path, bot2_path, seconds_per_player):
    white_bot_name, white_player_cls = load_player(bot1_path)
    black_bot_name, black_player_cls = load_player(bot2_path)

    game = LocalGame(seconds_per_player)

    try:
        winner_color, win_reason, history = play_local_game(white_player_cls(), black_player_cls(), game=game)

        winner = 'Draw' if winner_color is None else chess.COLOR_NAMES[winner_color]
    except:
        traceback.print_exc()
        game.end()

        winner = 'ERROR'
        history = game.get_game_history()

    print('Game Over!')
    print('Winner: {}!'.format(winner))

    timestamp = datetime.datetime.now().strftime('%Y_%m_%d-%H_%M_%S')

    replay_path = '{}-{}-{}-{}.json'.format(white_bot_name, black_bot_name, winner, timestamp)
    print('Saving replay to {}...'.format(replay_path))
    history.save(replay_path)

    return winner
Ejemplo n.º 2
0
def main():
    white_bot_name, black_bot_name = 'TroutBot', 'StrangeFish'

    game = LocalGame()

    try:
        winner_color, win_reason, history = play_local_game(
            TroutBot(),
            StrangeFish(*multiprocessing_strategies.create_strategy()),
            game=game)

        winner = 'Draw' if winner_color is None else chess.COLOR_NAMES[
            winner_color]
    except:
        traceback.print_exc()
        game.end()

        winner = 'ERROR'
        history = game.get_game_history()

    print('Game Over!')
    print('Winner: {}!'.format(winner))

    timestamp = datetime.now().strftime('%Y_%m_%d-%H_%M_%S')

    replay_path = '{}-{}-{}-{}.json'.format(white_bot_name, black_bot_name,
                                            winner, timestamp)
    print('Saving replay to {}...'.format(replay_path))
    history.save(replay_path)
Ejemplo n.º 3
0
 def test_no_history_until_game_over(self):
     g = LocalGame()
     g.sense(E2)
     self.assertEqual(g.get_game_history(), None)
     g.move(Move(E2, E4))
     self.assertEqual(g.get_game_history(), None)
     g.sense(A8)
     g.move(Move(E7, E5))
     self.assertEqual(g.get_game_history(), None)
     g.sense(E2)
     g.move(Move(F1, B5))
     g.sense(A8)
     g.move(Move(D7, D5))
     g.sense(E8)
     g.move(Move(B5, E8))
     self.assertTrue(g.is_over())
     self.assertNotEqual(g.get_game_history(), None)
Ejemplo n.º 4
0
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)
Ejemplo n.º 5
0
def main():
    parser = argparse.ArgumentParser(
        formatter_class=argparse.ArgumentDefaultsHelpFormatter)
    parser.add_argument('white_bot_path', help='path to white bot source file')
    parser.add_argument('black_bot_path', help='path to black bot source file')
    parser.add_argument(
        '--seconds_per_player',
        default=900,
        type=float,
        help='number of seconds each player has to play the entire game.')
    args = parser.parse_args()

    white_bot_name, white_player_cls = load_player(args.white_bot_path)
    black_bot_name, black_player_cls = load_player(args.black_bot_path)

    game = LocalGame(args.seconds_per_player)

    try:
        winner_color, win_reason, history = play_local_game(white_player_cls(),
                                                            black_player_cls(),
                                                            game=game)

        winner = 'Draw' if winner_color is None else chess.COLOR_NAMES[
            winner_color]
    except:
        traceback.print_exc()
        game.end()

        winner = 'ERROR'
        history = game.get_game_history()

    print('Game Over!')
    print('Winner: {}!'.format(winner))

    timestamp = datetime.datetime.now().strftime('%Y_%m_%d-%H_%M_%S')

    replay_path = '{}-{}-{}-{}.json'.format(white_bot_name, black_bot_name,
                                            winner, timestamp)
    print('Saving replay to {}...'.format(replay_path))
    history.save(replay_path)