Я играю в BattleShip в javascript с двигателем iio.Улучшить скорость функции
Я пытаюсь играть против компьютера, поэтому я должен поставить случайную позицию для кораблей (надеюсь, вы знаете игру :)).
У меня есть 5 кораблей, которые должны быть размещены в сетке (10x10). Проблема в том, что функция довольно медленная, и иногда страница вообще не загружается.
Я хочу знать, если есть некоторые улечшения для скорости этих функций, я немного новичок: D
function posShips(size){
// var size -> size of the ship
var isOk = false; // flag var to check if the ship is in a right position
var isOk2 = true; // flag var, become false if the cell is already fill with another ship
var i;
var j;
var side; // horizontal or vertical
while(!isOk){
i = iio.getRandomInt(1,11);
j = iio.getRandomInt(1,11);
side = iio.getRandomInt(0,2);
if((side ? j : i)+size-1 < 11){ // Not out of the array
for (var k = 0; k < size; k++) { // Size of the ship
if(side){
if(gridHit[i][j+k].stat == "empty"){ //If is empty put the ship
gridHit[i][j+k].stat = "ship";
gridHit[i][j+k].setFillStyle("red")
}else{ // If not empty
isOk2 = false; //Position is not good, do all the thing again.
for (var a = 0; a < size; a++) { // Reset cell
gridHit[i][j+a].stat = "empty";
}
k = 10;
}
}else{
if(gridHit[i+k][j].stat == "empty"){ //If is empty put the ship
gridHit[i+k][j].stat = "ship";
gridHit[i+k][j].setFillStyle("red")
}else{ // If not empty
isOk2 = false; //Position is not good, do all the thing again.
for (var a = 0; a < size; a++) { // Reset cell
gridHit[i+a][j].stat = "empty";
}
k = 10;
}
}
};
if(isOk2)
isOk = true;
}
}
}
Может быть, вы можете прочитать эту статью: http://www.sitepoint.com/multi-threading-javascript/Я думаю, вы можете использовать этот подход для размещения 5 кораблей? – zeroke
Я бы рекомендовал не делать это снова. Возможно, пройдите через сетку и определите все допустимые позиции, затем выберите один случайным образом. – sje397
Это больше подходит для http://codereview.stackexchange.com/? –