Exemplo n.º 1
0
    def generate(self, max_rooms, random_percentage, screen_size):
        """
        Generates a list of rooms with a size of `max_rooms`

        Keyword arguments:
        max_rooms - an integer with the maximum number of rooms wanted
        random_percentage - the percent of rooms to keep for adding randomly to the map
        screen_size - a tuple of ints that represent the screen size
        """
        self.__rooms = []
        linear_rooms = int((max_rooms + 1) * (1 - random_percentage))
        random_rooms = max_rooms - linear_rooms
        center = Vector(screen_size[0] / 2, screen_size[1] / 2)
        for i in range(linear_rooms):
            if (i == 0):
                r = Room(
                    center,
                    random.randrange(self.__min_width, self.__max_width,
                                     self.__tile_size),
                    random.randrange(self.__min_height, self.__max_height,
                                     self.__tile_size), "start")
            elif (i == linear_rooms - 1):
                r = Room(
                    center,
                    random.randrange(self.__min_width, self.__max_width,
                                     self.__tile_size),
                    random.randrange(self.__min_height, self.__max_height,
                                     self.__tile_size), "end")
            else:
                r = Room(
                    center,
                    random.randrange(self.__min_width, self.__max_width,
                                     self.__tile_size),
                    random.randrange(self.__min_height, self.__max_height,
                                     self.__tile_size))

            heading = self.__getRandomHeading()
            self.__rooms.append(r)
            if (i > 0):
                while (self.__rooms[i - 1].headingExists(heading)):
                    heading = self.__getRandomHeading()
                self.__rooms[i - 1].addNeighbour(r, heading)
                r.addNeighbour(self.__rooms[i - 1],
                               self.__invertHeading(heading))

        for i in range(random_rooms):
            chosen_room = self.__rooms[random.randint(0,
                                                      len(self.__rooms) - 1)]
            while (len(chosen_room.getEmptyNeighbours()) == 0
                   or chosen_room.isStart() or chosen_room.isEnd()):
                chosen_room = self.__rooms[random.randint(
                    0,
                    len(self.__rooms) - 1)]
            heading = self.__getRandomHeading()
            while (chosen_room.headingExists(heading)):
                heading = self.__getRandomHeading()
            r = Room(
                center,
                random.randrange(self.__min_width, self.__max_width,
                                 self.__tile_size),
                random.randrange(self.__min_height, self.__max_height,
                                 self.__tile_size))
            chosen_room.addNeighbour(r, heading)
            r.addNeighbour(chosen_room, self.__invertHeading(heading))
            self.__rooms.append(r)

        self.__addEnemies()
        print("Map Generated")