Example #1
0
    def run(self):
        """The main loop.
        :return: The winner.
        """

        white_player_exceeded = self.setup_player(sys.modules[self.white_player].Player, WHITE_PLAYER)
        black_player_exceeded = self.setup_player(sys.modules[self.black_player].Player, BLACK_PLAYER)
        winner = self.handle_time_expired(white_player_exceeded, black_player_exceeded)
        if winner:
            return winner

        board_state = amazons_board.amazonsBoard()
        curr_player_idx = 0

        remaining_run_times = self.remaining_times[:]
        k_count = 0

        # Running the actual game loop. The game ends if someone is left out of moves,
        # or exceeds his time.
        while True:
            if self.printPref == 'y':
                board_state.printBoard()

            player = self.players[curr_player_idx]
            remaining_run_time = remaining_run_times[curr_player_idx]
            try:
                possible_moves = board_state.legalMoves()
                if not possible_moves:
                    winner = self.make_winner_result(0 if curr_player_idx == 1 else 1)
                    break
                move, run_time = utils.run_with_limited_time(
                    player.get_move, (copy.deepcopy(board_state), possible_moves), {}, remaining_run_time*1.5)
                remaining_run_times[curr_player_idx] -= run_time
                if remaining_run_times[curr_player_idx] < 0:
                    raise utils.ExceededTimeError
            except (utils.ExceededTimeError, MemoryError):
                print('Player {} exceeded resources.'.format(player))
                winner = self.make_winner_result(0 if curr_player_idx == 1 else 1)
                break

            board_state.doMove(move)
            if self.printPref == 'y':
                print('Player ' + repr(player) + ' performed the move: ' + repr(move))
            curr_player_idx = (curr_player_idx + 1) % 2

            if curr_player_idx == 0:
                # White and black played.
                k_count = (k_count + 1) % self.k
                if k_count == 0:
                    # K rounds completed. Resetting timers.
                    remaining_run_times = self.remaining_times[:]

        self.end_game(winner)
        return winner
Example #2
0
    count = 0
    idx = range(10)
    for y in idx:
        for x in idx:
            diff = black_dist_map[x][y] - white_dist_map[x][y]
            count += (diff > 0) - (diff < 0)
    return count


@timed
def test(state):
    count = 0
    max_depth = 9
    for i in range(0, len(state.legalMoves())):
        count = cell_owners(state, max_depth)
    print(count)


state = amazons_board.amazonsBoard()
'''for i in range(0, 10):
    state.board[2][i] = 'a'
state.board[3][1] = 'a'
state.board[4][1] = 'a'
state.board[4][0] = 'a'
state.board[3][8] = 'a'
state.board[4][8] = 'a'
state.board[4][9] = 'a'
state.printBoard()'''
test(state)