Python заполнение матрицы значениями, которые не следует заполнять - PullRequest
0 голосов
/ 29 марта 2020

Я пытаюсь улучшить свои навыки python, создав игру, похожую на румяна, с pygame. Я начал с попытки создания простого генератора уровней, но столкнулся с проблемой, когда в матрицу карты вносится больше значений, чем должно быть.

Следующий код - моя попытка добавить все соседние элементы в списке для последующего случайного выбора элемента, который будет добавлен на карту.

def generate(self):
    print(f'generating a new map (difficulty: {self.diff})')

    next_room = (random.randint(0, self.size-1), random.randint(0, self.size-1))
    print(next_room)

    room_options = []

    room_options.append(next_room)

    # left
    if next_room[0] != 0:
        room_options.append( (next_room[0]-1, next_room[1]) )
    # right
    if next_room[0] < self.size-1:
        room_options.append( (next_room[0]+1, next_room[1]) )
    # top
    if next_room[1] != 0:
        room_options.append( (next_room[0], next_room[1]-1) )
    # botttom
    if next_room[1] < self.size-1:
        room_options.append( (next_room[0], next_room[1]+1) )
    # top left
    if next_room[0] != 0 and next_room[1] != 0:
        room_options.append( (next_room[0]-1, next_room[1]-1) )
    # top right
    if next_room[0] != 0 and next_room[1] != self.size-1:
        room_options.append( (next_room[0]-1, next_room[1]+1) )
    # bottom left
    if next_room[0] != self.size-1 and next_room[1] != 0:
        room_options.append( (next_room[0]+1, next_room[1]-1) )
    # bottom right
    if next_room[0] != self.size-1 and next_room[1] != self.size-1:
        room_options.append( (next_room[0]+1, next_room[1]+1) )

    for coords in room_options:
        print(coords)
        x = coords[0]
        y = coords[1]
        self.map[x][y] = "O"

Когда я распечатываю все координаты, я получаю значения, которые имеют смысл, например

(7, 2) (6, 2) (8, 2) (7, 1) (7, 3) (6, 1) (6, 3) (8, 1) (8, 3)

Но когда я пытаюсь изменить значения по умолчанию в этой позиции с '#' на 'O', чтобы визуализировать это с помощью numpy.matrix(self.map), я получаю что-то похожее на это

[['#' 'O' 'O' 'O' '#' '#' '#' '#' '#' '#']
 ['#' 'O' 'O' 'O' '#' '#' '#' '#' '#' '#']
 ['#' 'O' 'O' 'O' '#' '#' '#' '#' '#' '#']
 ['#' 'O' 'O' 'O' '#' '#' '#' '#' '#' '#']
 ['#' 'O' 'O' 'O' '#' '#' '#' '#' '#' '#']
 ['#' 'O' 'O' 'O' '#' '#' '#' '#' '#' '#']
 ['#' 'O' 'O' 'O' '#' '#' '#' '#' '#' '#']
 ['#' 'O' 'O' 'O' '#' '#' '#' '#' '#' '#']
 ['#' 'O' 'O' 'O' '#' '#' '#' '#' '#' '#']
 ['#' 'O' 'O' 'O' '#' '#' '#' '#' '#' '#']]

Обновление: я пытался чтобы диагностировать эту проблему, но до сих пор не выяснить, что именно не так. У меня, однако, есть немного лучшее представление о том, что происходит. каждый раз, когда он записывает что-либо в позицию, он перезаписывает весь столбец. Я просто понятия не имею, почему. Вот дополнительные выходные данные отладки, чтобы показать это.

(6, 1)[0]
[['#' '(6, 1)[0]' '#' '#' '#' '#' '#' '#' '#' '#']
 ['#' '(6, 1)[0]' '#' '#' '#' '#' '#' '#' '#' '#']
 ['#' '(6, 1)[0]' '#' '#' '#' '#' '#' '#' '#' '#']
 ['#' '(6, 1)[0]' '#' '#' '#' '#' '#' '#' '#' '#']
 ['#' '(6, 1)[0]' '#' '#' '#' '#' '#' '#' '#' '#']
 ['#' '(6, 1)[0]' '#' '#' '#' '#' '#' '#' '#' '#']
 ['#' '(6, 1)[0]' '#' '#' '#' '#' '#' '#' '#' '#']
 ['#' '(6, 1)[0]' '#' '#' '#' '#' '#' '#' '#' '#']
 ['#' '(6, 1)[0]' '#' '#' '#' '#' '#' '#' '#' '#']
 ['#' '(6, 1)[0]' '#' '#' '#' '#' '#' '#' '#' '#']]
(5, 1)[1]
[['#' '(5, 1)[1]' '#' '#' '#' '#' '#' '#' '#' '#']
 ['#' '(5, 1)[1]' '#' '#' '#' '#' '#' '#' '#' '#']
 ['#' '(5, 1)[1]' '#' '#' '#' '#' '#' '#' '#' '#']
 ['#' '(5, 1)[1]' '#' '#' '#' '#' '#' '#' '#' '#']
 ['#' '(5, 1)[1]' '#' '#' '#' '#' '#' '#' '#' '#']
 ['#' '(5, 1)[1]' '#' '#' '#' '#' '#' '#' '#' '#']
 ['#' '(5, 1)[1]' '#' '#' '#' '#' '#' '#' '#' '#']
 ['#' '(5, 1)[1]' '#' '#' '#' '#' '#' '#' '#' '#']
 ['#' '(5, 1)[1]' '#' '#' '#' '#' '#' '#' '#' '#']
 ['#' '(5, 1)[1]' '#' '#' '#' '#' '#' '#' '#' '#']]
(7, 1)[2]
[['#' '(7, 1)[2]' '#' '#' '#' '#' '#' '#' '#' '#']
 ['#' '(7, 1)[2]' '#' '#' '#' '#' '#' '#' '#' '#']
 ['#' '(7, 1)[2]' '#' '#' '#' '#' '#' '#' '#' '#']
 ['#' '(7, 1)[2]' '#' '#' '#' '#' '#' '#' '#' '#']
 ['#' '(7, 1)[2]' '#' '#' '#' '#' '#' '#' '#' '#']
 ['#' '(7, 1)[2]' '#' '#' '#' '#' '#' '#' '#' '#']
 ['#' '(7, 1)[2]' '#' '#' '#' '#' '#' '#' '#' '#']
 ['#' '(7, 1)[2]' '#' '#' '#' '#' '#' '#' '#' '#']
 ['#' '(7, 1)[2]' '#' '#' '#' '#' '#' '#' '#' '#']
 ['#' '(7, 1)[2]' '#' '#' '#' '#' '#' '#' '#' '#']]
(6, 0)[3]
[['(6, 0)[3]' '(7, 1)[2]' '#' '#' '#' '#' '#' '#' '#' '#']
 ['(6, 0)[3]' '(7, 1)[2]' '#' '#' '#' '#' '#' '#' '#' '#']
 ['(6, 0)[3]' '(7, 1)[2]' '#' '#' '#' '#' '#' '#' '#' '#']
 ['(6, 0)[3]' '(7, 1)[2]' '#' '#' '#' '#' '#' '#' '#' '#']
 ['(6, 0)[3]' '(7, 1)[2]' '#' '#' '#' '#' '#' '#' '#' '#']
 ['(6, 0)[3]' '(7, 1)[2]' '#' '#' '#' '#' '#' '#' '#' '#']
 ['(6, 0)[3]' '(7, 1)[2]' '#' '#' '#' '#' '#' '#' '#' '#']
 ['(6, 0)[3]' '(7, 1)[2]' '#' '#' '#' '#' '#' '#' '#' '#']
 ['(6, 0)[3]' '(7, 1)[2]' '#' '#' '#' '#' '#' '#' '#' '#']
 ['(6, 0)[3]' '(7, 1)[2]' '#' '#' '#' '#' '#' '#' '#' '#']]
(6, 2)[4]
[['(6, 0)[3]' '(7, 1)[2]' '(6, 2)[4]' '#' '#' '#' '#' '#' '#' '#']
 ['(6, 0)[3]' '(7, 1)[2]' '(6, 2)[4]' '#' '#' '#' '#' '#' '#' '#']
 ['(6, 0)[3]' '(7, 1)[2]' '(6, 2)[4]' '#' '#' '#' '#' '#' '#' '#']
 ['(6, 0)[3]' '(7, 1)[2]' '(6, 2)[4]' '#' '#' '#' '#' '#' '#' '#']
 ['(6, 0)[3]' '(7, 1)[2]' '(6, 2)[4]' '#' '#' '#' '#' '#' '#' '#']
 ['(6, 0)[3]' '(7, 1)[2]' '(6, 2)[4]' '#' '#' '#' '#' '#' '#' '#']
 ['(6, 0)[3]' '(7, 1)[2]' '(6, 2)[4]' '#' '#' '#' '#' '#' '#' '#']
 ['(6, 0)[3]' '(7, 1)[2]' '(6, 2)[4]' '#' '#' '#' '#' '#' '#' '#']
 ['(6, 0)[3]' '(7, 1)[2]' '(6, 2)[4]' '#' '#' '#' '#' '#' '#' '#']
 ['(6, 0)[3]' '(7, 1)[2]' '(6, 2)[4]' '#' '#' '#' '#' '#' '#' '#']]
(5, 0)[5]
[['(5, 0)[5]' '(7, 1)[2]' '(6, 2)[4]' '#' '#' '#' '#' '#' '#' '#']
 ['(5, 0)[5]' '(7, 1)[2]' '(6, 2)[4]' '#' '#' '#' '#' '#' '#' '#']
 ['(5, 0)[5]' '(7, 1)[2]' '(6, 2)[4]' '#' '#' '#' '#' '#' '#' '#']
 ['(5, 0)[5]' '(7, 1)[2]' '(6, 2)[4]' '#' '#' '#' '#' '#' '#' '#']
 ['(5, 0)[5]' '(7, 1)[2]' '(6, 2)[4]' '#' '#' '#' '#' '#' '#' '#']
 ['(5, 0)[5]' '(7, 1)[2]' '(6, 2)[4]' '#' '#' '#' '#' '#' '#' '#']
 ['(5, 0)[5]' '(7, 1)[2]' '(6, 2)[4]' '#' '#' '#' '#' '#' '#' '#']
 ['(5, 0)[5]' '(7, 1)[2]' '(6, 2)[4]' '#' '#' '#' '#' '#' '#' '#']
 ['(5, 0)[5]' '(7, 1)[2]' '(6, 2)[4]' '#' '#' '#' '#' '#' '#' '#']
 ['(5, 0)[5]' '(7, 1)[2]' '(6, 2)[4]' '#' '#' '#' '#' '#' '#' '#']]
(5, 2)[6]
[['(5, 0)[5]' '(7, 1)[2]' '(5, 2)[6]' '#' '#' '#' '#' '#' '#' '#']
 ['(5, 0)[5]' '(7, 1)[2]' '(5, 2)[6]' '#' '#' '#' '#' '#' '#' '#']
 ['(5, 0)[5]' '(7, 1)[2]' '(5, 2)[6]' '#' '#' '#' '#' '#' '#' '#']
 ['(5, 0)[5]' '(7, 1)[2]' '(5, 2)[6]' '#' '#' '#' '#' '#' '#' '#']
 ['(5, 0)[5]' '(7, 1)[2]' '(5, 2)[6]' '#' '#' '#' '#' '#' '#' '#']
 ['(5, 0)[5]' '(7, 1)[2]' '(5, 2)[6]' '#' '#' '#' '#' '#' '#' '#']
 ['(5, 0)[5]' '(7, 1)[2]' '(5, 2)[6]' '#' '#' '#' '#' '#' '#' '#']
 ['(5, 0)[5]' '(7, 1)[2]' '(5, 2)[6]' '#' '#' '#' '#' '#' '#' '#']
 ['(5, 0)[5]' '(7, 1)[2]' '(5, 2)[6]' '#' '#' '#' '#' '#' '#' '#']
 ['(5, 0)[5]' '(7, 1)[2]' '(5, 2)[6]' '#' '#' '#' '#' '#' '#' '#']]
(7, 0)[7]
[['(7, 0)[7]' '(7, 1)[2]' '(5, 2)[6]' '#' '#' '#' '#' '#' '#' '#']
 ['(7, 0)[7]' '(7, 1)[2]' '(5, 2)[6]' '#' '#' '#' '#' '#' '#' '#']
 ['(7, 0)[7]' '(7, 1)[2]' '(5, 2)[6]' '#' '#' '#' '#' '#' '#' '#']
 ['(7, 0)[7]' '(7, 1)[2]' '(5, 2)[6]' '#' '#' '#' '#' '#' '#' '#']
 ['(7, 0)[7]' '(7, 1)[2]' '(5, 2)[6]' '#' '#' '#' '#' '#' '#' '#']
 ['(7, 0)[7]' '(7, 1)[2]' '(5, 2)[6]' '#' '#' '#' '#' '#' '#' '#']
 ['(7, 0)[7]' '(7, 1)[2]' '(5, 2)[6]' '#' '#' '#' '#' '#' '#' '#']
 ['(7, 0)[7]' '(7, 1)[2]' '(5, 2)[6]' '#' '#' '#' '#' '#' '#' '#']
 ['(7, 0)[7]' '(7, 1)[2]' '(5, 2)[6]' '#' '#' '#' '#' '#' '#' '#']
 ['(7, 0)[7]' '(7, 1)[2]' '(5, 2)[6]' '#' '#' '#' '#' '#' '#' '#']]
(7, 2)[8]
[['(7, 0)[7]' '(7, 1)[2]' '(7, 2)[8]' '#' '#' '#' '#' '#' '#' '#']
 ['(7, 0)[7]' '(7, 1)[2]' '(7, 2)[8]' '#' '#' '#' '#' '#' '#' '#']
 ['(7, 0)[7]' '(7, 1)[2]' '(7, 2)[8]' '#' '#' '#' '#' '#' '#' '#']
 ['(7, 0)[7]' '(7, 1)[2]' '(7, 2)[8]' '#' '#' '#' '#' '#' '#' '#']
 ['(7, 0)[7]' '(7, 1)[2]' '(7, 2)[8]' '#' '#' '#' '#' '#' '#' '#']
 ['(7, 0)[7]' '(7, 1)[2]' '(7, 2)[8]' '#' '#' '#' '#' '#' '#' '#']
 ['(7, 0)[7]' '(7, 1)[2]' '(7, 2)[8]' '#' '#' '#' '#' '#' '#' '#']
 ['(7, 0)[7]' '(7, 1)[2]' '(7, 2)[8]' '#' '#' '#' '#' '#' '#' '#']
 ['(7, 0)[7]' '(7, 1)[2]' '(7, 2)[8]' '#' '#' '#' '#' '#' '#' '#']
 ['(7, 0)[7]' '(7, 1)[2]' '(7, 2)[8]' '#' '#' '#' '#' '#' '#' '#']]

1 Ответ

0 голосов
/ 29 марта 2020

Ошибка была в конструкторе класса Level, а не в его методе generate().

Я изначально инициализировал self.map с self.map = [["#"] * size] * size, что делало каждую строку копией самой себя. Я должен был использовать self.map = [["#"] * size for _ in range(size)]

Благодаря этот вопрос я только что нашел для решения.

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