def chase_player(self, player_tile): if self.counter != 0: if get_manhattan_distance(self.occupied_tile, player_tile) < 20: try: tile_to_move = self.memory.pop() except (PathNotFound, IndexError): tile_to_move = self.support_pathfinding(player_tile) else: adjacent_tiles = get_adjacent_reachable_tiles( self.occupied_tile, self.world) if adjacent_tiles: [tile_to_move] = random.sample(adjacent_tiles, 1) else: tile_to_move = self.occupied_tile else: if get_manhattan_distance(self.occupied_tile, player_tile) < 20: self.memory = deque(self.find_best_tile_to_move(player_tile)) if self.memory: tile_to_move = self.memory.pop() else: tile_to_move = self.support_pathfinding(player_tile) else: tile_to_move = self.support_pathfinding(player_tile) self.counter = (self.counter + 1) % 25 self.move(tile_to_move.x, tile_to_move.y) self.attack()
def support_pathfinding(self, target_tile): reachable_tiles = get_adjacent_reachable_tiles(self.occupied_tile, self.world) if reachable_tiles: return min( reachable_tiles, key=lambda tile: get_manhattan_distance(tile, target_tile)) else: return self.occupied_tile
def find_best_tile_to_move(self, target_tile): reachable_tiles = get_adjacent_reachable_tiles(self.occupied_tile, self.world) if reachable_tiles: return min( reachable_tiles, key=lambda tile: get_euclidean_distance(tile, target_tile)) else: return self.occupied_tile
def attack(self): neighbours = get_adjacent_reachable_tiles(self.occupied_tile, self.world) for neighbour in neighbours: if neighbour.occupied_by.__class__ == player.Player: neighbour.occupied_by.on_damage(self.base_attack) for neighbour in neighbours: neighbour.mark_as_poisoned = 6 self.hp = 0 break
def attack(self): neighbours = get_adjacent_reachable_tiles(self.occupied_tile, self.world) for neighbour in neighbours: if neighbour.occupied_by.__class__ == player.Player: neighbour.occupied_by.on_damage(self.base_attack) neighbour.mark_as_attacked_by_enemy = 2 effect = pygame.mixer.Sound('sound/bite.ogg') effect.set_volume(0.1) effect.play() break
def chase_player(self, player_tile): if get_manhattan_distance(self.occupied_tile, player_tile) < 35: best_tile = self.find_best_tile_to_move(player_tile) self.move(best_tile.x, best_tile.y) else: adjacent_tiles = get_adjacent_reachable_tiles( self.occupied_tile, self.world) if adjacent_tiles: [tile_to_move] = random.sample(adjacent_tiles, 1) else: tile_to_move = self.occupied_tile self.move(tile_to_move.x, tile_to_move.y) self.attack()
def chase_player(self, player_tile): [tile_to_move] = random.sample( get_adjacent_reachable_tiles(self.occupied_tile, self.world), 1) self.move(tile_to_move.x, tile_to_move.y) self.attack()