Переконайтеся, що лабіринт карти будинку з ліфтами можна вирішити?


13

У моїй грі ми бачимо підлоги будинку збоку, і герой може брати підйомники - підйомник або йде вгору (до наступного підйому вгору), або вниз (до наступного підйому вниз), залежно від стрілки як показано, і завжди підключена пара рівно двох ліфтів. Це єдиний спосіб, коли герой може рухатися вертикально, хоча він може вільно рухатися горизонтально. Карта будинку - це рандомізована сітка розміром 11x5 з різними предметами та непрохідними стінами вкрай ліворуч, вкрай праворуч, а іноді в одному з двох середніх положень:

Приклад ліфтів

Моє запитання: Як я можу забезпечити, щоб карта завжди була рандомізованою, але завжди вирішуваною, і що герой, починаючи з лівої сторони нижнього поверху, завжди може залишити її через будь-який ліфт, спрямований вгору на верхньому поверсі?

Для чого варто використовувати мову Lua для розвитку. Дуже дякую!

Відповіді:


14

Що ви хочете зробити, це створити графік таким чином, що кожен вузол знаходиться в ліфті, а краї між ними означають, що ви можете ходити / підніматися там. Після того як ви створили графік, ви можете використовувати dfs / bfs, щоб побачити, чи зможете ви дістатись від стартового вузла до кінцевого вузла.

Використовуючи наведений вище приклад, я зробив уявлення про те, як виглядатиме графік. Зелені кола означають, що там є ліфт, а зелені лінії означають, що ви можете подорожувати від вузла до вузла.

вузли


Дякую, це дуже корисно! У своєму питанні я мав би більше підкреслити, що карту також потрібно створити в першу чергу. Я зараз замислююся над тим, якщо це може бути не простіше - а не генерувати повністю рандомізовані комбінації ліфтів / стін знову і знову і перевіряти їх вирішуваність - щоб алгоритм пройшов через будинок, як це робив би герой, і таким чином генерувати випадкові підйомники та двері (наприклад, приймаючи випадкові відстані підйому та повороти вліво-вправо, а також додаючи стіни, наприклад). Як і в "Пішіть праворуч або на 0, 4 або 8 витків; створіть підйом вгору, підніміться з 1 на 4 поверхи ..."
Philipp Lenssen

@PhilippLenssen Це, по суті, підхід "рандомізованого пошуку в глибині" для створення лабіринту на графіку.
Кевін Рейд

5

Різниця між тим, що у вас є, і звичайним лабіринтом полягає лише в тому, що він має не сусідні з'єднання по вертикалі. Я думаю, що ви повинні дивитися, це алгоритми генерації лабіринтів на основі графіків . Вам просто потрібно мати більший набір "сусідніх кімнат" або "можливих стін", ніж звичайний 2D-лабіринт, оскільки кожна вертикально вирівняна пара осередків підлоги-сітки, у яких ще немає піднімається підйомника, є сусідньою. Ви можете моделювати це як графік, коли додавання певних ребер підйому випадково видаляє інші можливі кромки підйому; деякі алгоритми можуть бути заплутані цим, але інші.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.