Exemplo n.º 1
0
 def next_to_home(self, current_pos: Position, base: Position):
     if base == Position(
             current_pos.x, current_pos.y + 1) or base == Position(
                 current_pos.x, current_pos.y - 1) or base == Position(
                     current_pos.x + 1, current_pos.y) or base == Position(
                         current_pos.x - 1, current_pos.y):
         return True
     return []
Exemplo n.º 2
0
 def cart_is_next_to_miner(self, curret_pos: Position):
     for miner in miner_positions:
         if miner == Position(
                 curret_pos.x, curret_pos.y + 1) or miner == Position(
                     curret_pos.x, curret_pos.y - 1) or miner == Position(
                         curret_pos.x + 1,
                         curret_pos.y) or miner == Position(
                             curret_pos.x - 1, curret_pos.y):
             return miner
     return []
Exemplo n.º 3
0
 def is_next_to_enemy_outlaw(self, game_message: GameMessage, my_crew: Crew,
                             my_outlaw: Unit):
     for crew in game_message.crews:
         if crew.id != my_crew.id:
             for enemy in crew.units:
                 if enemy.type == UnitType.OUTLAW:
                     if Position(my_outlaw.position.x + 1, my_outlaw.position.y) == enemy.position \
                             or Position(my_outlaw.position.x - 1, my_outlaw.position.y) == enemy.position \
                             or Position(my_outlaw.position.x, my_outlaw.position.y + 1) == enemy.position \
                             or Position(my_outlaw.position.x, my_outlaw.position.y - 1) == enemy.position:
                         return enemy.position
     return False
Exemplo n.º 4
0
 def is_next_to_mine(self, game_message: GameMessage, pos: Position):
     directions = [[0, 1], [1, 0], [-1, 0], [0, -1]]
     for x, y in directions:
         if game_message.map.tiles[pos.x + x][pos.y + y] == "MINE":
             if pos not in miner_positions:
                 miner_positions.append(pos)
             return Position(pos.x + x, pos.y + y)
     return []
Exemplo n.º 5
0
 def get_mine_list_sorted(self, game_message: GameMessage, base: Position):
     global mine_list
     temp = []
     if game_message.tick == 0:
         for i, row in enumerate(game_message.map.tiles):
             for j, column in enumerate(row):
                 if column == "MINE":
                     temp.append(Position(i, j))
     # sort by distance from base
     mine_list = self.sorted_list_based_on_distance(base, temp)
     return mine_list
Exemplo n.º 6
0
    def get_free_tile_around_mine(self, game_message: GameMessage,
                                  base: Position):  # hide from people
        global available_spaces
        temp = []
        directions = [[0, 1], [1, 0], [-1, 0], [0, -1]]
        for pos in mine_list:
            for x, y in directions:
                if game_message.map.tiles[pos.x + x][pos.y + y] == "EMPTY":
                    temp.append(Position(pos.x + x, pos.y + y))

        temp = self.sorted_list_based_on_distance(base, temp)
        available_spaces = self.list_filter_remove_people_tiles(
            temp, game_message)
Exemplo n.º 7
0
 def find_empty_positions(self, pos: Position, game_message: GameMessage,
                          base: Position, my_crew: Crew, unit: Unit):
     directions = [[0, 1], [1, 0], [-1, 0], [0, -1]]
     y_length = len(game_message.map.tiles)
     x_length = len(game_message.map.tiles[0])
     list_of_options = []
     for x, y in directions:
         if game_message.map.tiles[(pos.x + x) %
                                   x_length][(pos.y + y) %
                                             y_length] == "EMPTY":
             list_of_options.append(Position(pos.x + x, pos.y + y))
     if not list_of_options:
         return False
     temp = self.sorted_list_based_on_distance(base, list_of_options)
     el_list = self.list_filter_remove_people_tiles(temp, game_message)
     if not el_list:
         return None
     for error in my_crew.errors:
         if unit.id in error and unit.type == UnitType.CART and 'No path to' in error:
             return el_list[random.randint(0, len(el_list) - 1)]
     return el_list[0]
Exemplo n.º 8
0
 def get_random_position(self, map_size: int) -> Position:
     return Position(random.randint(0, map_size - 1),
                     random.randint(0, map_size - 1))