Какой самый простой способ изменить несколько значений в заданных местах в 2D-векторе?

Итак, у меня есть двумерный вектор символов, который я называю сеткой. Давайте просто скажем, что это 70 x 30. Когда сетка создана, она автоматически заполняет каждую позицию ‘x’

У меня есть функция, которая отображает сетку. Поэтому я вызываю эту функцию, и на консоли отображается сетка из х 70х30.

У меня есть другая функция, которую я хочу вызвать, чтобы по существу заменить символ в определенных координатах x, y сетки другим символом. Точки не совсем случайны / разбросаны. Я в основном начинаю с точки на краю сетки и рисую зигзагообразные линии к другому краю. Все точки предопределены. Есть много точек для сюжета, поэтому ручная работа кажется неэффективной.

Вот как я думал сделать это:

  • Создайте двойное число для цикла, ширины и высоты, называя их i и j
  • Если i = (a || b || c || d …) && j = (e || f || g ..)

И по сути сделать этот утомительный процесс для каждого возможного сценария ..
Конечно, есть гораздо более легкий и простой способ, лол. Любые предложения будут с благодарностью. Спасибо!

0

Решение

Если точки могут быть предварительно определены с помощью карты (как в случае редактора уровней или другого мудрого фиксированного шаблона), то создайте словарь из x / y, координирующий то, чем становится плитка. Переберите словарь и сделайте каждую замену.

Если точки не определены заранее, а следуют шаблону, например линиям или каплям, напишите метод, который рисует линию / каплю / что угодно, и вызывайте ее снова и снова. Метод решает, какие плитки заменить, и заменяет их.

Кстати, есть хитрость при выполнении 2D-проверки и обработки, подобной этой, которая называется наличием «дельты», например, xdelta = -1, ydelta = 0 — запад, а xdelta = 1, ydelta = 1 — северо-восток. Имея дельту, вы можете запускать функцию два, четыре или восемь раз с разными дельтами, и она будет двигаться в разных направлениях, просто используя направления дельты вместо того, чтобы пытаться использовать все восемь направлений самостоятельно — дельта также может использоваться если хотите, вы можете проверять границы, так как вы не можете выйти за пределы, например, в направлении, в котором вы не двигаетесь. Затем вы можете пойти дальше и получить перечисление всех направлений, функций, которые инвертируют направление, которые поворачивают направление на 90/45 градусов (если оно перечислено, это очень просто, вы просто добавляете 2 или 1 к перечислению и возвращаете новое направление) и т. д., что делает обработку очень легко сейчас.

Так что я мог бы иметь что-то вроде

function drawLine(int xstart, int ystart, int xdelta, intydelta)

которая начинается с xstart, ystart, заменяет плитку на O, добавляет xdelta к x, добавляет ydelta к y, заменяет плитку на O и т. д., пока она не упадет с края.

0

Другие решения

Других решений пока нет …