def initialize_cave(self, width: int, height: int): game_map = GameMap(width=width, height=height) game_map.walkable[:] = True game_map.transparent[:] = True for i in range(height): for j in range(width): point = Point(x=j, y=i) if i == 0 or j == 0 or i == height - 1 or j == width - 1: game_map.place_tile(point, Tile.cave(point=point)) if random.random() < INITIAL_CHANCE: game_map.place_tile(point, Tile.cave(point=point)) self.game_map = game_map
def cave_smooth_step(self, min_count: int, max_count: int): for i in range(1, self.map_height - 1): for j in range(1, self.map_width - 1): point = Point(x=j, y=i) count1 = self.game_map.count_one_step_neighbors(center=point) count2 = self.game_map.count_two_step_neighbors(center=point) if count1 >= min_count: self.game_map.place_tile(point=point, tile=Tile.cave(point=point)) elif count2 <= max_count: self.game_map.place_tile(point=point, tile=Tile.cave(point=point)) else: self.game_map.place_tile(point=point, tile=Tile.floor(point=point))
def find_tile(self, point: Point) -> Tile: label = self.game_map.cave_map[point.x, point.y] if label == "CAVE": tile = Tile.cave(point) elif label == "FLOOR": tile = Tile.floor(point) else: tile = Tile.empty(point) return tile
def isolate_main_cave(self, caves: List[List[Point]]) -> List[Point]: if len(caves) == 1: return caves[0] cave_sort: List[List[Point]] = sorted(caves, key=len, reverse=True) largest = cave_sort[0] for cave in cave_sort[1:]: for point in cave: self.game_map.place_tile(point, tile=Tile.cave(point=point)) return largest
def cave(zeros): return Tile.cave(zeros)