Давайте упростим эту проблему на секунду. Фактическая ошибка, которую вы видите, заключается в том, что вы обращаетесь к proxy[A][B]
, где proxy[A]
не определено, и, следовательно, вы получаете Cannot set property B of undefined
.
Подумайте на секунду, какие возможные значения A
могут получить. A
- это y + i
в вашем коде. Вы цикл y
с 0
до proxy.length - 1
, и цикл i
с -1
до 1
.
Итак, возможный диапазон для y + i
будет -1
до proxy.length
. Это на 1 пункт больше в обоих направлениях, чем должно быть! (Вы согласитесь, что proxy[-1]
, вероятно, не определено, то же самое для proxy[proxy.length]
...)
Конечно, то же самое относится и к x + j
, но это не выдаст ошибку, потому что просто напишет например, новые свойства в proxy[something][-1]
, которые, вероятно, не предназначены, но допустимы JavaScript.
Поэтому вам придется либо изменить значение l oop, либо ограничить значения. Поскольку это генератор карт на карте фиксированного размера, я думаю, более логично ограничить результат. Итак, вы бы сделали что-то вроде этого:
if (
y + i >= 0 &&
y + i < proxy.length &&
x + j >= 0 &&
x + j < proxy[y + i].length
) {
proxy[y + i][x + j] = "o"
}
... или, альтернативно:
if ((y + i) in proxy && (x + j) in proxy[y + i]) {
proxy[y + i][x + j] = "o"
}