Определение диапазона движения с помощью массива

ferus

Пользователь
Регистрация
21.06.11
Сообщения
2
Реакции
0
Баллы
1
У меня есть одномерный массив, например:
0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 1, 1, 0,
0, 0, 0, 0, 0, 1, 1,
0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 1, 1,
0, 1, 0, 1, 1, 1, 0,
0, 1, 0, 1, 0, 0, 0,
Легенда: 0 = пустой этаж, 1 = стена, преграждающая путь, 2 = начальная точка, 3 = пол, до которого можно добраться из начальной точки.
Перемещение возможно по горизонтали, вертикали и диагонали, если значение равно 0.
Пример массива карт — 7x7, а примерный диапазон движения — 3, но эти параметры могут быть даже 15x9 с 6.
Я пытаюсь получить одномерный массив, который показывает возможный диапазон перемещения от выбранной точки, как показано ниже (примерный диапазон составляет 3 шага, а диагональ может проходить между стенами, если позиция равна 0, как вы можете видеть в левом нижнем углу):
0, 0, 0, 0, 0, 0, 0,
3, 1, 1, 1, 1, 1, 0,
3, 3, 3, 3, 3, 1, 1,
3, 3, 3, 2, 3, 3, 3,
1, 3, 3, 3, 3, 1, 1,
3, 1, 3, 1, 1, 1, 0,
0, 1, 3, 1, 0, 0, 0,
Это была более простая версия, потому что было бы хорошо, если бы диапазон можно было ограничить указанной формой, которая может отличаться в массиве масок одного измерения, как в этом примере (0 = вне диапазона):
0, 0, 0, 1, 0, 0, 0,
0, 0, 1, 1, 1, 0, 0,
0, 1, 1, 1, 1, 1, 0,
1, 1, 1, 1, 1, 1, 1,
0, 1, 1, 1, 1, 1, 0,
0, 0, 1, 1, 1, 0, 0,
0, 0, 0, 1, 0, 0, 0,
В этом случае результат будет таким:
0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 1, 1, 0,
0, 3, 3, 3, 3, 1, 1,
3, 3, 3, 2, 3, 3, 3,
1, 3, 3, 3, 3, 1, 1,
0, 1, 3, 1, 1, 1, 0,
0, 1, 0, 1, 0, 0, 0,

Код:
<div id="results" style="font-family: monospace; font-weight: bold; font-size: 24pt; background-color: #000000; color: #FFFFFF;">
</div>
<script>
var map=[0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,1,0,1,1,1,0,0,1,0,1,0,0,0,];
var mask=[0,0,0,1,0,0,0,0,0,1,1,1,0,0,0,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,0,0,0,1,1,1,0,0,0,0,0,1,0,0,0,];
function path_create(map,width,height,point,range,mask)
{
var matrix=[];
return matrix;
}
function path_show(matrix,width,height)
{
var v="";
for(var i=0; i<matrix.length; i++)
{
if(i!=0 && i%7==0){v=v+"<br>";}
v=v+matrix[i]+" ";
}
document.getElementById('results').innerHTML=v;
}
path_show(path_create(map,7,7,25,3,mask));
</script>
Код (разметка):
Определение диапазона движения с помощью массива
 
Сверху Снизу