No meu jogo, vemos o chão de uma casa de lado, e o herói pode subir; um elevador sobe (para o próximo elevador para cima) ou desce (para o próximo elevador para baixo), dependendo da seta como mostrado e sempre há exatamente um par de dois elevadores conectados. Essa é a única maneira que o herói pode se mover verticalmente, embora ele possa se mover livremente na horizontal. O mapa da casa é uma grade 11x5 aleatória com itens diferentes e paredes intransponíveis à extrema esquerda, extrema direita e, às vezes, em uma das duas posições do meio:
Minha pergunta: como garantir que o mapa seja sempre aleatório e sempre solucionável e que o herói, começando no lado esquerdo do piso inferior, possa sempre deixá-lo através de qualquer elevação apontando para cima no piso superior?
Para o que vale a pena, estou usando a linguagem Lua para desenvolvimento. Muito obrigado!
A diferença entre o que você tem e um labirinto normal é simplesmente que ele tem conexões não adjacentes verticalmente. Eu acho que o que você deve observar são algoritmos de geração de labirinto baseados em gráficos . Você simplesmente precisa ter um conjunto maior de "salas adjacentes" ou "paredes possíveis" do que um labirinto 2D comum, pois todo par verticalmente alinhado de células da grade do piso que ainda não possui um elevador intermediário é adjacente. Você pode modelar isso como um gráfico em que a adição de arestas de elevação definidas exclui acidentalmente outras arestas de elevação possíveis; alguns algoritmos podem ficar confusos com isso, mas outros não.
fonte