Beispiel #1
0
    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