Зона влияния города. Игра [дубликат]

215
09 мая 2022, 16:00
Этот вопрос уже существует:
Игра. Зона влияния города [закрыт]
Закрыт 1 год назад.

Римейк вопроса, который участники, возмущенные отсутствием моих вариантов решение - закрыли

Игра. Зона влияния города

Есть часть глобальной карты (двумерная матрица), в центре которой находится город. У города есть сила влияния. С каждым шагом от города, сила влияния становится меньше. Необходимо заполнить все элементы матрицы соответствующим значением силы влияния. Рисунок для иллюстрации

Например, сила влияния города 150 пунктов. Шаг уменьшения силы влияния 100 пунктов. Клетки которые прилегают к городу, будут иметь силу влияния 150 пунктов, следующие за ними 50 пунктов, а дальше 0.

Answer 1

Самым сложным в этой задаче оказалось установить вес влияния города на клетки, которые находятся не на прямой линии

const listColors = [
  "black",
  "yellow",
  "blue",
  "green",
  "red",
  "brown",
  "pink",
  "silver",
];
const value = 24000;
const step = 10000;
const area = [];
const size = 9;
for (let i = 0; i < size; i++) {
  const row = [];
  area.push(row);
  for (let h = 0; h < size; h++) {
    row.push(0);
  }
}
function setWeight(arr) {
  const center = Math.floor(arr.length / 2);
  for (let i = 0; i < arr.length; i++) {
    const row = arr[i];
    for (let h = 0; h < row.length; h++) {
      let newX = Math.abs(center - i);
      let newY = Math.abs(center - h);
      let weight = Math.max(newX, newY);
      weight = weight < 0 ? 0 : weight;
      const maxValue = weight * step;
      let power = maxValue <= value ? value - maxValue : step - (maxValue - value);
      power = value - maxValue < 0 ? 0 : power;
      const template = {
        power,
        weight
      }
      row[h] = template;
    }
  }
  createTemplate(arr);
}
function createTemplate(arr) {
  const app = document.querySelector("#app");
  for (let i = 0; i < arr.length; i++) {
    const el = arr[i];
    const row = document.createElement("div");
    row.classList.add("row");
    app.appendChild(row);
    for (let h = 0; h < el.length; h++) {
      const item = el[h];
      const cell = document.createElement("div");
      cell.classList.add("cell");
      cell.style.backgroundColor = listColors[item.weight];
      row.appendChild(cell);
    }
  }
}
setWeight(area);
.row {
  display: flex;
}
.cell {
  width: 30px;
  height: 30px;
  border: 1px solid;
}
<div id="app">
</div>

READ ALSO
Неправильный вывод чисел

Неправильный вывод чисел

с помощью js нужно найти все натуральные числа из промежутка от 1 до 200, у которых количество делителей равно N, N вводим сами

177
Перевести js в php

Перевести js в php

Всем привет! У меня есть массив с объектами (data), также есть функция, которая выводить разметку и элементами из объектов внутри массиваМне...

302
Скрипт заблокирован политикой CORS

Скрипт заблокирован политикой CORS

В расширении для Chrome я пытаюсь загрузить некоторый скрипт с помощью XMLHttpRequest, но получаю следующую ошибку:

259
Vue обработка событий

Vue обработка событий

Не пойму что не такпостараюсь как можно подробнее объяснить

289