Здравствуйте.
Изучаю 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>"
}
Спасибо, прошу помощи, никак не могу понять в чём проблема.