проблема с рекурсией, не могу понять почему скрипт не выходит из неё.
Здравствуйте.
Изучаю javascript, пишу небольшие скрипты, чтобы освоить основы и привыкнуть к синтаксису. Сейчас описываю модель движения корабля в двухмерном пространстве, задача состоит в том, чтобы подсветить клетки на которые корабль может перейти. Смысл в том, чтобы корабль не мог повернуться на месте, то-есть он всегда идёт вперёд и может начать поворачивать. Сейчас задача только в том чтобы подсветить нужные ячейки в таблице. Логика такова: у коробля етсь параметры: speed, turnSpeed, turnSpeedRate. когда корабль пересекает количество клеток равное turnSpeedRate, у него появляется возможность сместиться вправо или влево. Подствечиваются дополнительные ячейки по бокам. Всего он может пересеч количество ячеек, равное speed. Рекурсия находится в функцие moveFieldTurn. http://phpsandbox.freevar.com/1/ - вот тут находится html файл, в который втсроен скрипт, и сам скрипт: http://phpsandbox.freevar.com/1/script.js window.onload = tableDraw; document.loopSize = 10; ship=0; function initAll() { document.onload = tableDraw; } function tableDraw() { document.fieldH = 30; document.fieldV = 30; var field = document.getElementById("field"); for (var i=0;i<document.fieldV;i++){ field.innerHTML = field.innerHTML + rowDraw(i); } uPosini(); } function rowDraw(j) { var rows = "<tr>"; for (var i=0;i<document.fieldH;i++){ rows = rows + "<td id='v"+j+"h"+i+"' class='none'></td>"; } rows = rows + "</td>"; return rows; } function uPosini () { cordH = Math.floor(Math.random() * document.fieldH); cordV = Math.floor(Math.random() * document.fieldV); var position = "v" + cordV + "h" + cordH; document.getElementById(position).className = "ship"; shipIni(cordH, cordV); } function shipIni() { ship = getElementsByClassName("ship"); speed = 13; turnSpeed = 1; turnSpeedRate = 3; alignAngle = 1; moveFieldIni(); } function getElementsByClassName(classname, node) { if(!node) node = document.getElementsByTagName("body")[0]; var a = []; var re = new RegExp('\\b' + classname + '\\b'); var els = node.getElementsByTagName("*"); for(var i=0,j=els.length; i<j; i++) if(re.test(els[i].className))a.push(els[i]); return a; } function moveFieldIni () { shipDate(); document.body.innerHTML += "<p>cords=" + cordV +"__"+ cordH+ "</p>" var turn=0; for (i=0;i!=speed;i++){ var position = "v"+cordV+"h"+(cordH+i+1); if (document.getElementById(position)) { document.getElementById(position).className = "moveable"; turn++; /*document.body.innerHTML += "<p>position befor turn=" + position + "</p>"*/ if (turn==turnSpeedRate) { moveFieldTurn(i); var turn=0; } /*document.body.innerHTML += "<p>position after turn=" + position + "</p>"*/ } } } function moveFieldTurn(turn){ var rotate=0; for (var j=0;j!=(speed-turn);j++) { var positionInTurn = "v"+(cordV+1)+"h"+(cordH+turn+j+1); if (document.getElementById(positionInTurn)){ document.getElementById(positionInTurn).className = "moveable"; if (rotate==turnSpeedRate) { moveFieldTurn(i); var rotate=0; } rotate++; } } } function shipDate() { document.body.innerHTML += "<p>speed=" + speed + "</p>" document.body.innerHTML += "<p>turnSpeed=" + turnSpeed + "</p>" document.body.innerHTML += "<p>turnSpeedRate=" + turnSpeedRate + "</p>" document.body.innerHTML += "<p>cordV=" + ship.cordV + "</p>" document.body.innerHTML += "<p>cordH=" + ship.cordH + "</p>" } Спасибо, прошу помощи, никак не могу понять в чём проблема. |
отлаживать пробовал?
|
Цитата:
|
справа на первой вкладке. Но тут, думаю, лучше логирование подойдет. Что-то типа того что ты делал с помощью innerHTML, только используя console.log. Результаты будут попадать на вкладку Консоль
|
а как это логирование делать?
|
я ж говорю. То, что ты делал с помощью innerHTML удобнее делать с помощью console.log
|
Часовой пояс GMT +3, время: 06:14. |