Atualmente, estou trabalhando em um jogo de plataformas 2D baseado em blocos semelhante ao Terraria em alguns aspectos, embora esteja tendo dificuldades com a geração do terreno. Eu tenho alguns princípios básicos, embora eles não saiam como algo útil.
Eu tentei algumas técnicas diferentes, como o Perlin Noise, e li sobre outras, como o deslocamento do ponto médio, embora não tenha certeza do que seria melhor ou uma combinação de técnicas diferentes para gerar áreas diferentes. (Como deslocamento do ponto médio para a forma geral do terreno e ruído Perlin para as cavernas.)
Eu encontrei uma excelente explicação de como eu poderia colocá-lo em camadas com a Accidental Noise Library , embora esteja em C ++, e eu não conheço C ++ suficiente para compilá-lo em uma DLL que eu possa usar em C #. Tentei copiar isso em C #, embora não saiba como mesclar dois efeitos (o gradiente para a base geral e o fractal para os detalhes).
Atualmente estou usando um fractal de plasma e os resultados são extremamente variados. Por exemplo, ele pode gerar terreno onde quase não há superfície, ou pode gerar terreno onde não há superfície.
Um exemplo de um mapa correto, seria melhor com mais algumas melhorias. (Preto é sólido, branco é ar):
E um exemplo de um mapa terrível. (Preto é sólido, branco é ar):
Basicamente, o que estou perguntando é: qual seria a melhor maneira de gerar o terreno ou forçá-lo a garantir que haja uma quantidade razoável de área de superfície, com o tempo de geração o mais rápido possível. Ou, alternativamente, como eu seria capaz de obter o mesmo resultado que a Accidental Noise Library, mas em C #.
Qualquer exemplo seria muito apreciado.
fonte
Respostas:
Eu tentava manter o ruído Perlin, mas adicionando um peso a ele com base na altura, para garantir uma certa densidade média em determinadas altitudes. Para citar parte da postagem de Notch na geração do terreno Minecraft :
Essencialmente, você está pegando uma pequena fatia do terreno do Minecraft. Portanto, gere ruído 2D Perlin, mas pesa-o de forma que qualquer coisa acima de um determinado ponto provavelmente seja ar e qualquer coisa abaixo de um certo ponto provavelmente seja terra.
Isso lhe dará um bom terreno, com algumas saliências e recursos interessantes, além de algumas cavernas e ilhas flutuantes. (Se você não quiser ilhas flutuantes, poderá testá-las e removê-las manualmente.) Esse método não fornecerá itens como túneis; portanto, você desejará um método para adicioná-los na geração após o terreno, como um passeio aleatório .
fonte