Ejemplo n.º 1
0
class CLIRunner:
    def __init__(self):
        self.board = GameBoard()
        self.ai = Expectimax()

        self.init_game()
        print_board(self.board)

        self.run_game()

        self.over = False

    def init_game(self):
        self.insert_random_tile()
        self.insert_random_tile()

    def run_game(self):
        moves = 0
        while True and moves < 2:
            move = self.ai.get_move(self.board)
            print("Player's Turn:", end="")
            self.board.move(move)
            print(dirs[move])
            print_board(self.board)
            print("Computer's Turn")
            self.insert_random_tile()
            print_board(self.board)

            if len(self.board.get_available_moves()) == 0:
                print("GAME OVER (max tile): " + str(self.board.get_max_tile()))
                break

            moves += 1
            if DELAY:
                time.sleep(DELAY)

    def insert_random_tile(self):
        if randint(0,99) < 100 * 0.9:
            value = 2
        else:
            value = 4

        cells = self.board.get_available_cells()
        pos = cells[randint(0, len(cells) - 1)] if cells else None

        if pos is None:
            return None
        else:
            self.board.insert_tile(pos, value)
            return pos
Ejemplo n.º 2
0
class Batch:
    def __init__(self):
        # MEASURES
        self.total_moves_time = 0
        self.total_moves = 0
        self.fastest_move = -1
        self.longest_move = 0
        self.time_to_reach = []

        # setup game & ai
        self.board = GameBoard()
        self.ai = Expectimax()
        self.init_game()

        # run ai on game
        self.start = timer()
        self.run_game()
        end = timer()

        # MEASURES
        self.total_time = end - self.start # total time to run
        self.avg_move_time = self.total_moves_time / self.total_moves # moves done
        self.max_tile = self.board.get_max_tile() # max tile
        self.states_visited = self.ai.states_visited # states visited

    def init_game(self):
        self.insert_random_tile()
        self.insert_random_tile()

    def run_game(self):
        cur_max_tile = 8
        while True:
            move_start = timer()
            move = self.ai.get_move(self.board)
            move_end = timer()
            
            # save move time
            move_time = move_end - move_start
            self.total_moves_time += move_time
            self.total_moves += 1
            if self.fastest_move == -1 or move_time < self.fastest_move:
                self.fastest_move = move_time
            if move_time > self.longest_move:
                self.longest_move = move_time

            # do the actual move + the response
            self.board.move(move)
            self.insert_random_tile()

            # check if we got a bigger tile
            if cur_max_tile in self.board.grid:
                reached_end = timer()
                self.time_to_reach.append((cur_max_tile, reached_end - self.start))
                cur_max_tile *= 2

            # if no more moves, game over
            if len(self.board.get_available_moves()) == 0:
                break

    def insert_random_tile(self):
        if randint(0,99) < 100 * 0.9:
            value = 2
        else:
            value = 4

        cells = self.board.get_available_cells()
        pos = cells[randint(0, len(cells) - 1)] if cells else None

        if pos is None:
            return None
        else:
            self.board.insert_tile(pos, value)
            return pos