Здравствуйте, вот пишу очередную свою проблему в проекте игры "Морской Бой".
Проблема опять в расстановке кораблей, я полностью поменял логику генерации. Код теперь выглядит следующим образом:
function randomShips(){
var map = [
['~','~','~','~','~','~','~','~','~','~'], // 0
['~','~','~','~','~','~','~','~','~','~'], // 1
['~','~','~','~','~','~','~','~','~','~'], // 2
['~','~','~','~','~','~','~','~','~','~'], // 3
['~','~','~','~','~','~','~','~','~','~'], // 4
['~','~','~','~','~','~','~','~','~','~'], // 5
['~','~','~','~','~','~','~','~','~','~'], // 6
['~','~','~','~','~','~','~','~','~','~'], // 7
['~','~','~','~','~','~','~','~','~','~'], // 8
['~','~','~','~','~','~','~','~','~','~'] // 9
//0 1 2 3 4 5 6 7 8 9
]
// Расстановка кораблей 1*1
for (var i = 0; i < 4; i++) {
var lat = getRandom(0, 9)
var lon = getRandom(0, 9)
console.log('Начальные значения lat='+lat+' lon='+lon)
var checker = false
while ( checker == false ){ // Проверка выбранной и соседних ячеек
lat = getRandom(0, 9)
lon = getRandom(0, 9)
console.log('Чет оно замкнулось')
for (var x = -1; x < 2; x++){
for (var y = -1; y < 2; y++){
if ( (lat + x != -1) && (lat + x != 11) && (lon + y != -1) && (lon + y != 11) ) { // Проверка не уйдут ли соседние клетки за пределы массива
if ( (map[lat + x][lon + y] == 's') || (map[lat + x][lon + y] == 'w') ) {
checker = false
break
}
checker = true
}
}
if (checker == false) break
}
if (checker == false) continue
}
for (var x = -1; x < 2; x++){ // Ну теперь собсна можно и проставить s и w
for (var y = -1; y < 2; y++){
if ( (x == 0) && (y == 0) ){ map[lat + x][lon + y] = 's' }
else if ( (lat + x != -1) && (lat + x != 11) && (lon + y != -1) && (lon + y != 11) ){
map[lat + x][lon + y] = 'w'
}
}
}
}
Очень часто таким макаром я начал получать ошибку следующего характера:
И если в моем
предыдущем вопросе я получал ошибку с разными значениями, то сейчас "Cannot read property '0'" и только 0.
Кстати массив опять стал произвольно расширяться, хотя я вроде как замутил адекватную проверку.
Может я опять поскользнулся на самом простом? Подскажите мне пожалуйста.