""" Represents a set of maps in the game. At initialization, it loads the desired maps. It provides a method to get a number of maps with the difficulty level as close as possible to the desired difficulty level. """ from game.mapReader import MapReader class MapSet: def __init__(self, mapReader: MapReader, mapNames: list): self.mapReader = mapReader self.maps = [self.mapReader.read_map(name) for name in mapNames] def get_map_by_name(self, name: str): for map in self.maps: if map.name == name: return map raise ValueError(f"Map with name '{name}' not found in the MapSet.") def get_map(self, index: int): if index < 0 or index >= len(self.maps): raise IndexError("Map index out of range.") return self.maps[index] def get_maps(self): return sorted(self.maps, key=lambda m: m.difficulty) def get_maps_by_difficulty(self, desired_difficulty: int, num_maps: int): """ Returns a list of maps with difficulty levels as close as possible to the desired difficulty level. If there are not enough maps, it returns all available maps. """ if len(self.maps) == 0: raise ValueError("No maps available in the MapSet.") sorted_maps = sorted(self.maps, key=lambda m: abs(m.difficulty - desired_difficulty)) return sorted_maps[:num_maps]