Заранее всем искреннее спасибо! Мучаюсь над проблемой уже второй день и всё-таки решил попросить помощи. Постарался максимально упростить для того, чтобы не выносить вам мозг.
Есть функция, которая принимает в параметрах змейку(змейка - это объект) и двигает ее следующим образом:
console.log разберём ниже
1. washCells - Стираются квадратики змейки на поле.
2. Создаётся переменная oldcells для запоминания координат змейки, так как после их изменения они нам понадобятся.
3. "
snake.cells[0][0] += 1" Так как движение вправа, то меняется координата икса, в нашем случае увеличивается на один. Координаты cells - это двумерный массив, который содержит вначале квадратики cells[0], cells[1]..., где cells[0] это голова, cells[1] второй квадратик после головы.
Cells[0][0] - это координата головы по иксу, а cells[0][1] по игрику.
4. Цикл, который изменяет расположение всех квадратиков (кроме головы(мы ее уже изменили)) так, чтобы каждому квадратику соответсвовало располежение oldcells[<номер квадратика>-1], то есть стало как у переднего квадратика в прошлом.
5. renderCells - отображает изменившиеся квадратики на поле.
function moveRight(snake) {
console.log(snake.cells);
washСells(snake, snake.cells, snake.length);
var oldcells = snake.cells;
snake.cells[0][0] += 1;
for (var i=1; i<snake.length; i++) {
snake.cells[i] = oldcells[i-1];
}
renderCells(snake, snake.cells, snake.length);
};
Проблема в том, что после вызова функции moveRight(snake) у всех квадратиков змейки становится одна координата, как у головы(snake.cells[0]==snake.cells[1]==snake.cells[3]...) и змейка длиной 3 квадратика превращается в длину одного. И ДЕЛО В ТОМ, ЧТО первый оператор функции console.log(snake.cells) уже возвращает одинаковые координаты, то есть до того, как я их вообще трогал. Я могу написать в отладчике браузера console.log(snake.cells) и все змейки ровно по местам, но после вызова функции moveRight они становятся одинаковыми. Что за бред ?