diff --git a/roguebasin/engine.py b/roguebasin/engine.py index f6f0cd3..0eb13c1 100644 --- a/roguebasin/engine.py +++ b/roguebasin/engine.py @@ -33,8 +33,8 @@ class Engine: self.player = Entity('@', position=player_start_position, fg=tcod.white) self.entities: AbstractSet[Entity] = {self.player} - for _ in range(self.rng.randint(1, 15)): - position = Point(self.rng.randint(0, map_size.width), self.rng.randint(0, map_size.height)) + for _ in range(self.rng.randint(5, 15)): + position = self.map.random_walkable_position() self.entities.add(Entity('@', position=position, fg=tcod.yellow)) def handle_event(self, event: tcod.event.Event): diff --git a/roguebasin/map.py b/roguebasin/map.py index 3fc5996..693f54b 100644 --- a/roguebasin/map.py +++ b/roguebasin/map.py @@ -18,6 +18,14 @@ class Map: self.generator = RoomsAndCorridorsGenerator(size=size) self.tiles = self.generator.generate() + def random_walkable_position(self) -> Point: + # TODO: Include hallways + random_room: RectangularRoom = random.choice(self.generator.rooms) + floor = random_room.floor_bounds + random_position_in_room = Point(random.randint(floor.min_x, floor.max_x), + random.randint(floor.min_y, floor.max_y)) + return random_position_in_room + def tile_is_in_bounds(self, point: Point) -> bool: return 0 <= point.x < self.size.width and 0 <= point.y < self.size.height