Помогите написать модуль

Помогите написать модуль

Доброй ночи.
Прошу опытных программистов помочь с написанием модуля
Замый ближайший аналог - старая игрушка Трубопроводчик
Есть локация состоящая из сетки произвольного размера (допустим 5х5)
Генерируется лабиринт из 5х5 тайлов с различными конфигурациями труб и методом верчения тайлов нужно провести воду от входа в лабиринт к его выходу. я ни как не могу сообразить, как это сделать без тупого перебора вариантов с ифами на все возможные позиции. Очень прошу помочь.

hitmir
useravatar
Offline
2 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Помогите написать модуль

hitmir,
насколько я знаю, в трубопроводчике не генерируемые уровни.

Но вообще задача сложная. В двух словах не опишешь.
Тебе нужен генератор лабиринта + проверка проходимости пути.

Для генератора я бы сделал цикл.
Перед циклом указываем начальную клетку, внося её в список (массив).

Генерируем тайл случайным образом для клетки самой верхней в списке, учитывая, что выходы с неё не могут быть направлены в тупики (границы карты или уже сгенерированные клетки {здесь есть загвоздка с поиском выхода, которого нет. По идее вход и выход нужно задавать заранее})
Добавляем смежные (то есть клетки, на которые из текущей есть выходы) к списку.
Удаляем из верхнюю списка клетку (то есть для которой мы только что генерировали тайл).
Повторяем цикл.

Так же по идее надо сверяться с координатами конечной клетки, но можно тоже каким-нибудь способом выбрать её из уже простроенных к границам путей.

Потом чистим карту от тупиковых путей, т.е. ведущих никуда.

Сейчас пишу видео по алгоритмам поиска путей на QSP согласно этой статье https://habr.com/post/331192/ Не знаю, правда, когда допишу. Может только ближе к концу года.

Aleks Versus
воздвигатель башни
useravatar
Offline
1428 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Помогите написать модуль

Похоже, мне проще будет насоздавать пресетов лабиринта труб и рандомно крутануть каждый тайл а потом сравнивать с шаблонным массивом пока не сойдется...

hitmir
useravatar
Offline
2 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Помогите написать модуль

Не очень понимаю, что мешает просто сгенерировать сначала в сетке ГОТОВУЮ трубу (идущую как надо), потом затыкать остатки случайными тайлами, а потом в этой готовой трубе повернуть каждый тайл случайным образом. Вот и сгенерирован уровень. Или я что-то не понял в вопросе?

Харч
useravatar
Offline
82 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Помогите написать модуль

Харч,
hitmir в итоге про это и написал, как я понял. Я тоже думал, что проблема именно в генерации готовой трубы. Случайным образом крутануть тайлы — это задача на уровне rand(1,4).

Aleks Versus
воздвигатель башни
useravatar
Offline
1428 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Помогите написать модуль

Генерация готовой трубы же практически очевидна? Или я что-то не понимаю? smile

Харч
useravatar
Offline
82 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Помогите написать модуль

Харч,
если я правильно помню "Трубопроводчика", там труба могла иметь несколько разветвлений, которые в итоге всё равно сходились к одному выходу. Плюс петли всякие, пересечения. Если одну нитку генерировать, вообще ничего сложного. Но, опять таки, я полагал что нужна сложная труба и вариации.

Aleks Versus
воздвигатель башни
useravatar
Offline
1428 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Информация

Статистика форума:
 
Всего тем:
1026
Всего опросов:
14
Всего сообщений:
16790431
Сообщений на этой неделе:
20
Пользователи форума:
 
Всего пользователей:
2257
Последним зарегистрировался:
Morris