Генерация заполненного многоугольника внутри гиперарра - PullRequest
0 голосов
/ 31 января 2019

Рассмотрим следующее:

В настоящее время я программирую очень простой генератор подземелий.Прямо сейчас это работает следующим образом:

  1. Генерирует int [] [] гипер-массив произвольных длин.

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

  3. Запустить генератор идеального лабиринта с 0,0 и запустить до полного пространства.между комнатами полно коридоров.

  4. Соедините комнаты с коридорами, удалите тупики, у вас останется система взаимосвязанных комнат.

Как это

dungeon

Теперь я хотел бы оживить эти комнаты, потому что они просто плоские прямоугольники.Теперь мне нужно найти способ сгенерировать многоугольник внутри int hyperarray (координаты, вероятно, будут в порядке, это не проблема), а затем заполнить пространство многоугольника в hyperarray единицами (часть I ').У меня проблемы с).

1 Ответ

0 голосов
/ 31 января 2019

Я пытаюсь выяснить, как "рисовать линии в массиве целых чисел" прямо сейчас.я обнаружил, что могу нарисовать линию из одной точки в другую, выполнив следующие действия: найдите ширину и высоту точки 1 и точки 2 (абсолютное значение x1-x2 и y1-y2, разделите ширину на (высоту)-1) и из точки 1 в точку 2, вдоль оси y переместитесь к точке 2 на один шаг, а на оси x с шагом ширины / высоты. Пример:

01000
01000
00100
00100
00010
00001

здесь у меня есть линияот (1,0) как (x, y) до (4,5), если я беру ширину и высоту, я получаю ширину = 3 высоты = 5, если я делю 3/5, я получаю 0,6 и так для каждогоодин шаг по оси Y, я делаю шаг 0,6 вдоль оси X (и получаю результирующее значение, так как мы можем использовать только целые числа в качестве позиций) и получаю координаты

(1,0)
(1.6,1) -> (1,1)
(2.2,2) -> (2,2)
(2.8,3) -> (2,3)
(3.4,4) -> (3,4)
(4,5) ->   (4,5)

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

x = x1 + (|(y1-y)| * ( |(x1-x2)| / |(y1-y2)| ) * sign(x2-x1))

, где x - текущий x каждой итерации, следуя линии вдоль оси y и x1, являющейся вашей начальной позицией x, x2быть в вашей конечной позицииurrent y каждой итерации (конкретный счетчик во время цикла), y1 и y2 соответственно находятся в начальной и конечной позициях y.и подпишите (x2-x1), чтобы выяснить, движетесь ли вы влево или вправо от начальной позиции.

, с этим вы сможете нарисовать контур вашего многоугольника, и, надеюсь, это должнозаполнить его впоследствии станет легче.

Надеюсь, это поможет вам с уважением

РЕДАКТИРОВАТЬ: мы рисуем линии для каждой последовательной пары координат, а не КАЖДОЙ ОДНОЙ пары.Это означает, что если бы вы нарисовали многоугольник из точек p1, p2, p3, p4, p5, вы бы нарисовали линию от p1 до p2, p2 до p3, от p3 до p4, от p4 до p5 и от p5 до p1

, простобыстрый знак

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...