def generate(self, width, height): the_map = Map(width, height) for y in range(height): for x in range(width): if x in (0, width-1) or y in (0, height-1): tile = Tile.empty(x, y) else: tile = Tile.floor(x, y) the_map.set_tile(x, y, tile) # buildings for i in range(self.random.randrange(20, 50)): room_width = self.random.randrange(4, 10) room_height = self.random.randrange(4, 10) left = self.random.randrange(width - room_width) top = self.random.randrange(height - room_height) self.draw_box(the_map, left, top, room_width, room_height, Tile.wall) door_side = random.randrange(4) if door_side == 0: # top offset = 1 + random.randrange(room_width - 2) door_x = left + offset door_y = top elif door_side == 1: # bottom offset = 1 + random.randrange(room_width - 2) door_x = left + offset door_y = top + room_height elif door_side == 2: # left offset = 1 + random.randrange(room_height - 2) door_x = left door_y = top + offset elif door_side == 3: # right offset = 1 + random.randrange(room_height - 2) door_x = left + room_width door_y = top + offset the_map.set_tile(door_x, door_y, Tile.door(door_x, door_y)) # peasants objects = [] for i in range(self.random.randrange(10, 100)): p = Mob.peasant() x = self.random.randrange(width) y = self.random.randrange(height) p.xy(x, y) objects.append(p) # dogs for i in range(self.random.randrange(10, 100)): d = Mob.dog() x = self.random.randrange(width) y = self.random.randrange(height) d.xy(x, y) objects.append(d) the_map.insert_objects(objects) return the_map