В моей игре мы видим этажи дома со стороны, и герой может делать подъемы - подъемник либо поднимается вверх (до следующего подъема вверх), либо вниз (до следующего подъема вниз), в зависимости от стрелки как показано, и всегда есть пара ровно двух связанных лифтов. Это единственный способ, которым герой может двигаться вертикально, хотя он может свободно двигаться горизонтально. Карта дома представляет собой рандомизированную сетку 11x5 с различными предметами и непроходимыми стенами слева, справа и иногда в одной из двух средних позиций:
Мой вопрос: как я могу обеспечить, чтобы карта всегда была случайной, но всегда разрешимой, и чтобы герой, начиная с левой стороны нижнего этажа, всегда мог покинуть ее с помощью любого направленного вверх лифта на верхнем этаже?
Для чего это стоит, я использую язык Lua для разработки. Спасибо!
Разница между тем, что у вас есть, и обычным лабиринтом в том, что он имеет несмежные соединения по вертикали. Я думаю, что вы должны обратить внимание на алгоритмы генерации лабиринтов на основе графов . Вам просто нужно иметь больший набор «смежных комнат» или «возможных стен», чем в обычном двухмерном лабиринте, так как каждая вертикально выровненная пара ячеек пола-сетки, которая еще не имеет промежуточного лифта, является смежной. Вы можете смоделировать это как график, где добавление определенных ребер подъема случайно удаляет другие возможные подъемные ребра; некоторые алгоритмы могут быть смущены этим, но не другие.
источник