2013-03-12 1 views
0

Итак, у меня есть 2d вектор символов, который я называю сеткой. Давайте просто скажем его 70 x 30. Когда сетка создана, она автоматически заполняет каждую позицию «x»Самый простой способ изменить несколько значений в заданных местах в 2D-векторе?

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

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

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

  • Создание двойной для петли, ширины и высоты, называя их, я и J
  • Если я = (а || Ь || с || d ...) & & J = (е || е || г ..)

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

+0

Вы всегда можете использовать одномерный массив и индексировать его по размеру. –

+0

Кажется, у вас есть список координат на сетке для замены. Почему бы вам просто не пройти этот список и не индексировать только те ячейки, которые вам нужно заменить? – David

ответ

0

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

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

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

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

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

, который начинается в Xstart, ystart, заменяет плитку с О, добавляет Xdelta х, добавляет ydelta у, заменяет плитку с O, и т.д. до он падает с края.

Смежные вопросы