Exemplo n.º 1
0
 def __init__(self):
     self.ticker = Ticker()
     self.states = States(self.ticker)
     self.message = Message()
     self.map = Map()
     self.you = Player()
     self.enemy = Player()
Exemplo n.º 2
0
 def __init__(self):
     self.ticker = Ticker()
     self.states = States(self.ticker)
     self.message = Message()
     self.map = Map()
     self.you = Player()
     self.enemy = Player()
     self.history = MoveHistory(length=50, history=[])
Exemplo n.º 3
0
 def __init__(self):
     self.values = Values()
     self.ticker = Ticker()
     self.states = States(self.ticker)
     self.message = Message()
     self.map = Map()
     self.map.register_cost_and_heuristic(self.astar_move_cost,
                                          self.astar_heuristic)
     self.you = Player()
     self.enemy = Player()
Exemplo n.º 4
0
class AI(object):
    def __init__(self):
        self.ticker = Ticker()
        self.states = States(self.ticker)
        self.message = Message()
        self.map = Map()
        self.you = Player()
        self.enemy = Player()

    def setup(self,info):
        self.message.parse_message(info)
        self.map = self.message.map
        self.map.load_json_map()
        self.you = self.message.you

    def reset_for_next_round(self):
        self.you = Player()
        self.enemy = Player()
        self.map.reset_map()
        self.ticker.reset()

    def update(self, info):
        self.ticker.tick()
        self.message.parse_message(info)
        self.you = self.message.you
        self.possible_moves = self.map.get_neighbours_of(self.you.pos)
        self.enemy = self.message.enemy
        self.__update_danger()
        self.map.update_content(self.message,[self.you.pos,self.enemy.pos])

    def __update_danger(self):
        if self.you.pos in self.map.super_pellets_positions:
            self.ticker.start_you_are_dangerous_ticker()
        if self.enemy.pos in self.map.super_pellets_positions:
            self.ticker.start_other_is_dangerous_ticker()

    def move(self):
        move = _get_move(self,self.map)
        self.map.prev_move.append(move)
        if move < 0:
            print("error") #TODO print all the stuff
        return move
Exemplo n.º 5
0
from util.AI import AI
from timeit import default_timer as timer


def run_bot():
    start = timer()
    while msg.is_stateupdate() or msg.is_welcome():
        map.load_json_map(msg.map)
        move = ai.get_move(msg)
        time = timer() - start
        time *= 1000
        time = round(time, 2)
        print("t: %s ms" % str(time))
        c.send_move(move)
        next_gamestate = c.fetch_data()
        start = timer()
        t.tick()
        msg.parse_message(next_gamestate)


if __name__ == '__main__':
    c = C()
    json_msg = c.fetch_data()
    msg = M(json_msg)
    map = Map(json_map=msg.map)
    t = T()
    while True:
        msg.await_first_stateupdate_message(c)
        ai = AI(map, msg.you)
        run_bot()
Exemplo n.º 6
0
class AI(object):
    def __init__(self):
        self.values = Values()
        self.ticker = Ticker()
        self.states = States(self.ticker)
        self.message = Message()
        self.map = Map()
        self.map.register_cost_and_heuristic(self.astar_move_cost,
                                             self.astar_heuristic)
        self.you = Player()
        self.enemy = Player()

    def setup(self, info):
        self.message.parse_message(info)
        self.map = self.message.map
        self.map.load_json_map()
        self.player = self.message.you

    def reset_for_next_round(self):
        self.you = Player()
        self.enemy = Player()
        self.map.reset_map()
        self.ticker.reset()

    def update(self, info):
        self.ticker.tick()
        self.message.parse_message(info)
        self.player = self.message.you
        self.possible_moves = self.map.get_neighbours_of(self.player.pos)
        self.enemy = self.message.enemy
        self.__update_danger()
        new_poses = [self.player.pos, self.enemy.pos]
        self.map.update_content(self.message, new_poses)

    def __update_danger(self):
        if self.player.pos in self.map.super_pellets_positions:
            self.ticker.start_you_are_dangerous_ticker()
        if self.enemy.pos in self.map.super_pellets_positions:
            self.ticker.start_other_is_dangerous_ticker()

    def get_move(self):  # AI LOGIC GOES HERE!
        if self.states.is_status_quo():
            print("Mmmm, shiny!")
            path = self.map.get_bf_path(self.player.pos,
                                        char_goal=self.map.icon.pellet)
            first_move_pos = path[1]
            move = self.map.get_move_from(self.player.pos, first_move_pos)
            return move
        elif self.states.you_are_dangerous():
            if self.map.get_euclidean_dist(
                    self.player.pos,
                    self.enemy.pos) <= self.values.enemy_distance_trigger:
                print("Ima getcha!")
                path = self.map.get_bf_path(self.player.pos,
                                            pos_goal=self.enemy.pos)
                first_move_pos = path[1]
                move = self.map.get_move_from(self.player.pos, first_move_pos)
                return move
            else:
                print("Pft, cba chasing that guy")
                path = self.map.get_bf_path(self.player.pos,
                                            char_goal=self.map.icon.pellet)
                first_move_pos = path[1]
                move = self.map.get_move_from(self.player.pos, first_move_pos)
            return move
        elif self.states.enemy_is_dangerous():
            if self.map.get_manhattan_dist(
                    self.player.pos,
                    self.enemy.pos) <= self.values.enemy_distance_trigger:
                print("HAPL!")
                return self.send_random_move()
            else:
                print("Ima do me")
                path = self.map.get_bf_path(self.player.pos,
                                            char_goal=self.map.icon.pellet)
                first_move_pos = path[1]
                return self.map.get_move_from(self.player.pos, first_move_pos)

        return -1  #haha, you messed up!  :P

    def send_random_move(self):
        return self.map.get_move_from(
            self.player.pos, np.random.choice(list(self.possible_moves)))

    def astar_heuristic(self, start, goal):
        return self.map.get_euclidean_dist(start, goal)

    def astar_move_cost(self, pos1, pos2):
        return 10.0
Exemplo n.º 7
0
class AI(object):
    def __init__(self):
        self.ticker = Ticker()
        self.states = States(self.ticker)
        self.message = Message()
        self.map = Map()
        self.you = Player()
        self.enemy = Player()
        self.history = MoveHistory(length=50, history=[])

    def setup(self, info):
        self.message.parse_message(info)
        self.map = self.message.map
        self.map.load_json_map()
        self.you = self.message.you

    def reset_for_next_round(self):
        self.you = Player()
        self.enemy = Player()
        self.map.reset_map()
        self.ticker.reset()

    def update(self, info):
        self.ticker.tick()
        self.message.parse_message(info)
        self.you = self.message.you
        self.possible_moves = self.map.get_neighbours_of(self.you.pos)
        self.enemy = self.message.enemy
        self.__update_danger()
        self.map.update_content(self.message, [self.you.pos, self.enemy.pos])

    def __update_danger(self):
        if self.you.pos in self.map.super_pellets_positions:
            self.ticker.start_you_are_dangerous_ticker()
        if self.enemy.pos in self.map.super_pellets_positions:
            self.ticker.start_other_is_dangerous_ticker()

    def move(self):
        move = self.__get_the_move(self.map)
        return move

    def __get_the_move(self, map):
        avail_pellet_moves = []
        avail_new_moves = []
        avail_old_moves = []

        for possible_move in self.possible_moves:

            # Just do this move if it's a super pellet
            if possible_move in map.super_pellets_positions:
                return map.get_move_between(self.you.pos, possible_move)

            # Record possible pellet move
            elif possible_move in map.pellet_positions:
                avail_pellet_moves.append(possible_move)

            # Track old moves
            if self.history.contains(possible_move):
                avail_old_moves.append(possible_move)
            else:
                avail_new_moves.append(possible_move)

        if len(avail_pellet_moves) > 0: move = r.choice(avail_pellet_moves)
        else:
            move = r.choice(avail_new_moves) if len(
                avail_new_moves) > 0 else r.choice(avail_old_moves)

        # Chase super pellets
        for supahpelletz in map.super_pellets_positions:
            moves_to_supapellet = map.get_breadth_first_path(
                self.you.pos, supahpelletz)
            if (len(moves_to_supapellet) < 10):
                move = moves_to_supapellet[0]
                print("Chasing a super pellet!")
                break

        # Chase enemy if dangerous
        if (self.you.is_dangerous and not self.enemy.is_dangerous):
            move = map.get_breadth_first_path(self.you.pos, self.enemy.pos)[0]
            print("I'm dangerous!")

        self.history.add(move)

        return map.get_move_between(self.you.pos, move)
Exemplo n.º 8
0
 def __base_parse_map(self, json_map):
     content, height, pelletsleft, width = json_map['content'], json_map[
         'height'], json_map['pelletsleft'], json_map['width']
     self.map = Map(height=height, width=width, pellets_left=pelletsleft)
     self.map.content = content
Exemplo n.º 9
0
 def __init__(self):
     self.type = ''
     self.map = Map()
     self.you = Player()
     self.enemy = Player()