def place_room( self, start_x: int, start_y: int, room_width: int, room_height: int, margin: int, ignore_overlap: bool = False, ): """ :param start_x: :type start_x: int :param start_y: :type start_y: int :param room_width: :type room_width: int :param room_height: :type room_height: int :param margin: :type margin: int :param ignore_overlap: :type ignore_overlap: bool """ room = Room(start_x, start_y, room_width, room_height) if self.room_fits(room, margin) or ignore_overlap: region = self.new_region() room.region = region for point in room: tile = Tile.floor(point) self.dungeon.place(point, tile, region) self.rooms.append(room)
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 remove_small_walls(self, cave: List[Point]) -> List[Point]: for i in range(1, self.map_height - 1): for j in range(1, self.map_width - 1): point = Point(x=j, y=i) wall = self.game_map.is_blocked(point) if not wall: continue if self.game_map.count_one_step_neighbors(point) == 1: cave.append(point) self.game_map.place_tile(point=point, tile=Tile.floor(point=point)) return cave
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 floor(zeros): return Tile.floor(zeros)