Как получить список индексов в определеннем радиусе обзора?

Есть игрок, его индекс в массиве 35, радиус обзора 2 клетки
9e87f7c1286a44508f6a9256089e90e4.png
Как получить массив индексов в радиусе обзора?
При этом надо учитывать что рядом может быть стенка и индексов за стенкой быть не может.
  • Вопрос задан
  • 377 просмотров
Решения вопроса 1
alsopub
@alsopub
Как-то так:
var
  sizex = 10,
  sizey = 10,
  cur_pos = 35,
  dist = 2,
  list = [];

var
  pos_x = (cur_pos - 1) % sizex,
  pos_y = Math.floor((cur_pos - 1)/sizex);

var
  start_x = (pos_x - dist >= 0) ? pos_x - dist : 0,
  start_y = (pos_y - dist >= 0) ? pos_y - dist : 0,
  end_x = (pos_x + dist < sizex) ? pos_x + dist : sizex - 1,
  end_y = (pos_y + dist < sizey) ? pos_y + dist : sizey - 1;

for (var y = start_y; y <= end_y; y++) {
  for (var x = start_x; x <= end_x; x++) {
    list.push(y * sizex + x + 1);
  }
}

console.log(list);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@z0rgoyok
Можно попробовать допилить заливку для учета расстояния
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы