Quais são alguns algoritmos ideais para a geração de masmorras 2D do tipo Rogue? [fechadas]


47

Quais são alguns bons recursos relacionados à geração de conteúdo procedural no contexto da geração de masmorras?

O artigo mais próximo que pude encontrar foi o algoritmo para gerar um labirinto 2D , o que não é exatamente o que estou procurando. Recursos, como salas e corredores conectados, são ideais.

Obrigado!


1
Além disso, dê uma olhada na geração do labirinto .
— Anthony

1
Há algum artigo sobre este tema na RogueBasin
— PATRY Guillaume

Respostas:


27

Isso já foi mais ou menos respondido antes. Seu primeiro ponto de parada deve ser http://pcg.wikidot.com/

Desde que fui acusado de não ser uma resposta útil (sério? Alguém pede um recurso e eu coloco um link em um wiki que trata do assunto? ), esta página no wiki trata especificamente de geradores de Dungeon e links para vários artigos sobre o assunto.
http://pcg.wikidot.com/pcg-algorithm:dungeon-generation

Eu ainda recomendaria navegar em todo o wiki, pois a geração de conteúdo procedural é apenas uma abordagem muito criativa e todas e quaisquer idéias são válidas. É um desafio de pensamento lateral - e divertido nisso.


+1 para "todas as idéias são válidas", mas gostaria de esclarecer sobre isso: todas as idéias são válidas, mas algumas funcionarão melhor que outras. Sua idéia do <vago jargão do computador aqui> funcionará e provavelmente será o que você deseja, mas há outras maneiras de fazê-lo que serão mais eficientes, mais aleatórias, mais coesas, mais personalizáveis ​​ou qualquer combinação delas, a menos que você seja muito bom ou muito sortudo.
— Nic Hartley

20

Consegui obter níveis razoavelmente bonitos usando o seguinte algoritmo, com base em uma grade quadrada:

Primeiro, crie um conjunto de salas. Parâmetros aleatórios definirão o tamanho das salas e seus números. Um algoritmo adaptável pode até definir algumas zonas feitas de grandes corredores e outras de salas muito pequenas.

Então, você precisa garantir que todas as salas estejam conectadas umas às outras. Para isso, execute um pathfinder para cavar corredores (digamos, A *) entre cada par de salas, atribuindo um peso escolhido aleatoriamente aos espaços existentes (salas ou outros corredores) em comparação com o espaço ainda não esculpido (nas paredes). Se a diferença de peso for pequena, cavar novos corredores será razoavelmente barato, e o algoritmo criará muitos corredores entre as salas, com muitas possibilidades de ir de um lugar para outro. Se a diferença de peso for alta, o algoritmo preferirá passar por salas e corredores existentes, tornando os caminhos mais tortuosos e com menos opções para chegar a um determinado destino.

Isso permite que você, a partir de um pequeno número de parâmetros, crie níveis de aparência muito diferentes, de salas esparsas e enormes com pequenos corredores que os ligam a um labirinto de câmaras estreitamente interconectadas.

Aqui está um exemplo de um nível gerado.

insira a descrição da imagem aqui

Com base nesse algoritmo, você pode adicionar decoração de parede que depende da zona, diminuir ou aumentar os corredores, criar salas especiais e assim por diante.


10

Se você gosta de ler código e pode analisar C #, posso sugerir o gerador de masmorras que meu amaranto semelhante ao roguelike usa? Está aqui . Ele lida com salas conectadas, recursos extensíveis e outras coisas interessantes.

Se você puxa e constrói o projeto inteiro, há uma ferramenta independente que irá gerar e desenhar as masmorras para que você possa ajustá-las e ver como funciona.


1
Encontrei Amaranth o que parece meses atrás, mas já havia esquecido o nome quando entrei na geração de masmorras. Obrigado pelo link!
— Gabriel Isenberg

2
Seu artigo na journal.stuffwithstuff.com/2014/12/21/rooms-and-mazes é também muito bom, eu uso uma versão modificada do que com alguns recursos extras, como motores de geração diferente corredor etc.
— Tobsta

3

Todas essas são ótimas idéias. Tomei um pouco de RogueBasin e pcg.wikidot.com, e ter escrito minha própria implementação em C #.

Eu realmente gostei da aparência 'natural' de níveis semelhantes a cavernas que podem ser gerados usando o método de autômatos celulares. Para entender o que quero dizer com método de autômatos celulares, imagine o Jogo da Vida de Conway. Meu código usa o que é chamado de método 4-5, o que significa que um bloco se tornará uma parede se for uma parede e 4 ou mais de seus nove vizinhos forem paredes, ou se não for uma parede e 5 ou mais vizinhos forem paredes. Começo preenchendo o mapa aleatoriamente com paredes ou espaço, depois visito cada posição x / y de forma iterativa e aplico a regra 4-5. Para ajudar a aliviar o problema de formar cavernas isoladas, depois de preencher o mapa aleatoriamente, coloco uma linha horizontal no mapa, definindo cada bloco para um espaço em vez de uma parede, antes de aplicar a regra 4-5 para cada bloco.

Você pode visualizar o código da minha classe de manipulador de mapas e quaisquer melhorias que eu fizer aqui

ou uma versão arquivada aqui .


2
Esta pergunta tem muitos votos e seria melhor se você pudesse abrir esta resposta um pouco mais. Por fim, os links tendem a morrer, então tente responder para que não haja necessidade de clicar em links. Como isso funciona? Qual é a ideia principal? Como isso difere de outros algoritmos?
— Katu

1
O link realmente morreu.
— htmlcoderexe

2

Eu acho que o lugar mais direto para descobrir isso é realmente olhar para o código fonte. Dois grandes players no campo, Angband e Nethack, são ambos de código aberto.


3
Embora de código aberto, pelo que me lembro, nem é um código muito bem documentado ou um código transparente ou um código escrito para aprender. Eles são fáceis de modificar, mas muito mais difíceis de entender.
— Tom Hudson

Talvez os originais não sejam ótimas referências, mas há um grande número de variantes, algumas das quais são excelentes. Por exemplo, o desenvolvedor do UnAngband fez uma série de melhorias na geração de masmorras e escreveu uma série de excelentes posts no blog , para que você possa definitivamente usar as idéias, se não o código.
— congusbongus

A fonte do NetHack é notoriamente difícil de entender. O gerador de calabouço (um deles) é espalhados nada menos do que arquivos três C, e cerca de 15 funções
— Elektra
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.