Задать вопрос
MayorPlay
@MayorPlay
!developer

Почему неправильно работают клетки в игре «жизнь»?

Написал клеточный автомат, но столкнулся с одной проблемой. Клетки работают не так как надо, поиск живых соседей работает по правилам, которые описаны в описании этой игры, плюс, рождение и смерть клетки тоже происходят правильно. Но проблема в чем. В нормальной версии игры у нас, допустим, вертикальная линия превращается в горизонтальную и обратно каждое новое поколение, у меня происходит другой процесс, верхняя клетка из этих трех умирает и эта линия превращается в квадрат, т.к. пересчет каждого поколения у нас идет в массиве от начала до конца сверху вниз, я так вижу эту проблему. Вот код.
В чем проблема? Может, по-другому нужно проверять клетки? Но как?
  • Вопрос задан
  • 178 просмотров
Подписаться 1 Средний 5 комментариев
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Потому что клетки текущего поколения, и клетки следующего - это одни и те же клетки.

Вы их такими создали:

cells.push(xCells);
buffCells.push(xCells);

А если даже и создать правильно, всё равно они станут одним и тем же:

cells = buffCells;

UPD.

Вижу, "станут" исправили. Можно лучше (короче, проще и быстрее) - вместо копирования значений клеток поменять местами ссылки на массивы: [ cells, buffCells ] = [ buffCells, cells ];.

А вот создание массивов так и осталось кривым. Вложенные массивы должны быть разными, помещайте во второй копию вместо оригинала:

- buffCells.push(xCells);
+ buffCells.push(xCells.map(n => ({...n})));
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы