Мы должны запрограммировать версию игры Conway's Life of life для школьного проекта, но мы зацикливаемся на краях. Все это прекрасно работает, но функция, которая вычисляет количество соседей, не работает на ячейках, находящихся на краях (потому что она должна оценивать значения вне массива, которые не определены). Мы пробовали несколько вариантов, но все они меняют функциональность остальной части программы.Застрял программирование «Игры жизни» Конвей в JS
Что нам следует добавить для работы на краях сетки?
var totalNeighbors = function(x, y) {
var total = 0;
if (x > 0 && cells[(x - 1)][y] == 1) {
total++;
}
if (x < (width - 1) && cells[x + 1][y] == 1) {
total++;
}
if (y > 0 && cells[x][y - 1] == 1) {
total++;
}
if (y < (height - 1) && cells[x][y + 1] == 1) {
total++;
}
if (y > 0 && x > 0 && cells[x - 1][y - 1] == 1) {
total++;
}
if (y > 0 && x < (width - 1) && cells[x + 1][y - 1] == 1) {
total++;
}
if (y < (height - 1) && x > 0 && cells[x - 1][y + 1] == 1) {
total++;
}
if (y < (height - 1) && x < (width - 1) && cells[x + 1][y + 1] == 1) {
total++;
}
return total;
};
Спасибо!
Проверьте, выполняете ли вы блок по краю. Если да, не пытайтесь получить доступ к тем, которые вы не можете. Я думаю, что все эти 'if's могут быть реорганизованы. Это упростит задачу. (Если вам нужно обращать к краю обращения к нулевому, помните, что модуль, '%', ваш друг.) –
Что вы подразумеваете под «блоком на краю»? Любое предложение о том, как реорганизовать 'if's? Мы попробовали, и оказалось, что он еще длиннее ха-ха. – Dat8StringGuy
То, что я подразумеваю под «block on the edge», является ячейкой, у которой нет ячеек на одной или нескольких сторонах (т. Е. У нее нет ячеек над ней и/или рядом с ней и/или ниже нее.) После быстрого перехода к продуктовый магазин, я могу вернуться и попробовать свои силы при реорганизации. (Это может закончиться в более длинном решении * line * wise, но это должно быть решение * cleaner *.) –