Numpy: невозможно изменить ie спецификацию c свойства объекта ie без изменения всех свойств объектов в ndarray [закрыть] - PullRequest
0 голосов
/ 13 апреля 2020

Я создаю игру, в которой генерируется случайный донгеон (n этажей, заполненных y на x объектов комнаты), и я хочу поставить лестницу (одну на следующий этаж и одну на предыдущую, но с разными координатами x; y, но не в той же комнате). Я обнаружил проблему, когда программа выполняет эту строку:

rooms[z-1, y, x].stair = 'd'

вместо изменения свойства указанного объекта ie, программа меняет свойство ie для каждого объекта.

class Room:

    walls = []
    rooms = []

    def __init__(self, stair=False, item=[], entity=[]):
        self.stair = stair
        self.item = item
        self.entity = entity

    @classmethod
    def generate_dongeon(cls, floor, width, height):
        cls.floor = floor

        rooms = np.ndarray((floor, width, height), dtype=Room)
        rooms.fill(Room())

        walls = np.ones((floor, width*2-1, height), dtype=int)


        for z in range(floor):
            walls[z] = cls.generate_floor(width, height)
            if z != 0:
                while True:
                    y, x = randint(0, width-1), randint(0, height-1)

                    if rooms[z, y, x].stair == False and rooms[z-1, y, x].stair == False:
                        rooms[z, y, x].stair = 'u'
                        rooms[z-1, y, x].stair = 'd'
                        break

        cls.walls = walls

    @classmethod
    def generate_floor(cls, width, height):
        #I deleted the content to only show the issue but this part works well

Если вы видите, что я делаю неправильно, я был бы очень признателен!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...