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.