Автор | Помогите придумать алгоритм. |
Помогаю делать брату курсовой. Суть его такая:
1) Есть амбар - прямоугольник.
2) А в нём комнаты внутренние прямоугольники с проходами.
3) Во всем амбаре присутвуют всякие объекты неинтерактивные столы, верстаки, стены, трактор, и интерактивные: ящики, шкафы, сундуки в которых может быть ключ, найдя его чел просто выходит через ворота.
4) Всё это генериться рандомчиком(случайно).
Суть проблемы - тупики. Бывают ситуации, когда комнаты создаются не по желанию, а из внешних стен амбара и(или) других комнат, в которые нельзя попасть, в самосоздающихся комнатах нет работы создания прохода, т.к. они сами создались а не алгоритмом.
Скрины прилагаю (верхний правый угол самообразованная комната, которая считается за свободное пространоство амбара):
https://ibb.co/J5C4FT7
или вообще так
https://ibb.co/n8VQJhK
А если ещё там будет сундук с ключом или ворота, то вообще беда. Есть у кого идеи как этого избежать?
Т.е. можно конечно. Делать максимальное кол-во проходов в комнатах, но тогда решето не очень смотрится
https://ibb.co/pn6fys2
или смотреть чтоб стены комнат никогда не были совместны, но куча отдельных прямоугольников тоже не эстетично.
Какие ещё варианты, товарищи? |
Со stackoverflow не перепутал?) |
Я где больше всего обитаю туда и пишу, ну могу ещё в танчиках попробовать. |
для AndruxaX:
if then else жеж |
для AndruxaX:
это как написать крестики нолики, можно процедурно - но долго, можно ООП, так быстрее... |
Щас курну ,порешаем |
Мало данных, нужно ведь поочередно искать, я правильно понял? |
Нужно придумать алгоритм размещения внутренних прямоугольников и проходов в них внутри большого прямоугольника так, чтоб не было тупиков. |
Правильней не тупиков, а чтоб не было недоступных пространств. |
для AndruxaX:
так сделать во всех комнатах по 4 двери... |
курнул ,не могу ,не сегодня ... анекдоты в голове |
для AndruxaX:
Закопировал текст!
Завтра своему коллеге программисту покажу на работе) |
для __DestroyeR__:
так сделать во всех комнатах по 4 двери...
Да у меня был такой вариант, но тогда получается вот такое решето https://ibb.co/pn6fys2, а не комната, эстетически не очень, а так да, если лучше варианта не найдётся, я его использую. |
По центру каждого генерируемого модуля - маркер.
И после каждого шага генерации внутреннего прямоугольника - процедура с проверкой, можно ли до этого маркера добраться.
Если процедура возвращает, что нельзя, откатываем последний прямоугольник и рэндомно генерим снова.
Как-то так. |
для __DestroyeR__:
Закопировал текст!
Завтра своему коллеге программисту покажу на работе)
Спасибо, Destroer, уважуха тебе. |
для AndruxaX:
ну, завтра подумаем, скину результат)
Сегодня я как Госта Фейс, голове одни анекдоты, весь день искали интернет, 3 этажа без сети, мрак.
Нашли у провайдера, пров. сказал что умер один туннель, перенастроили маршрутизаторы и ура. |
И после каждого шага генерации внутреннего прямоугольника - процедура с проверкой, можно ли до этого маркера добраться.
Беда в том, что угловой прямоугольник не генерировался преднамеренно, а образовался от генерации других и маркера с проверкой там не будет. |
Ну тогда сделай сетку с точками на весь амбар и процедурой проверяй, все ли точки доступны.
Шаг сетки можно опытным путем подобрать. |
для Natty Dread:
Хотя уж такой попы это помогло бы избежать.
https://ibb.co/n8VQJhK
Но не такой
https://ibb.co/J5C4FT7 |
https://ibb.co/J5C4FT7
дааа, ужас для клаустрофоба) |