Estou iniciando / iniciando um jogo de RPG de mapa em 2D em Java e quero implementar a geração aleatória de mapas. Eu tenho uma lista de peças diferentes (sujeira / areia / pedra / grama / cascalho etc.) junto com peças de água e peças de caminho, o problema que tenho é que não tenho idéia por onde começar a gerar um mapa aleatoriamente.
Seria necessário ter seções de terreno (como uma parte será areia, parte sujeira etc.) Similar à forma como o Minecraft é onde você tem biomas diferentes e eles se transformam perfeitamente. Por fim, eu também precisaria adicionar caminhos aleatórios a isso, além de seguir direções diferentes em todo o mapa.
Não estou pedindo a ninguém que me escreva todo o código ou qualquer coisa, apenas me coloque na direção certa, por favor.
tl; dr - Gere um mapa de peças com biomas, caminhos e verifique se os biomas se encaixam perfeitamente.
Embora as outras respostas aqui sejam realmente boas para gerar os tipos de paisagens estáticas que funcionariam para essa necessidade específica. Existem outros métodos que as pessoas que se deparam com essa pergunta podem estar procurando se desejam criar paisagens que mudam ao longo do tempo ou pareçam muito mais realistas. Você pode seguir essa técnica.
Ao contrário das outras respostas, você começa isso com um mapa totalmente vazio. Comece com o que você consideraria o nível do mar. Use o Perlin Noise para adicionar variações muito pequenas; se você tiver 256 elevações possíveis, não varie mais do que 3-5 em qualquer direção. Isso cria os primeiros bilhões de anos de sua paisagem sem precisar executar uma simulação por tanto tempo.
Placas tectônicas
Divida o mapa em linhas retas ou curvas para criar placas, quanto mais detalhadas as formas das placas, mais interessante será a sua paisagem. Mantenha-os grandes. Dê a cada placa uma direção, velocidade. Em um determinado período de tempo, mova as placas passo a passo pelo mapa, arrastando todas as peças acima delas.
Quando duas placas se cruzam, escolha qual irá passar e qual ficará abaixo, essa escolha poderá ser aleatória. Os ladrilhos nas placas designadas abaixo são instantaneamente reduzidos em altura em 5 etapas. Depois que uma placa é designada acima ou abaixo, todas as interações futuras com as placas seguirão estas regras:
Todas as placas que se cruzam lentas em 20% da velocidade atual a cada passo. Para maior realismo, adicione uma mudança aleatória de -10% a 10% na direção do movimento a cada passo.
Depois de executar o número desejado de etapas. Provavelmente 5 a 10 são suficientes. Quaisquer ladrilhos onde nenhuma placa é residente, devem ser descartados no nível mais baixo existente.
Grande ou pequeno?
Esse mapa pode ser usado como está ou ser expandido para criar um mapa muito maior dividindo-o em pedaços de bloco 4X4 (célula) e expandindo essas seções com base em suas elevações individuais. Trate a elevação de cada célula como um ponto e crie uma gradação suave no mapa maior entre esses pontos. Portanto, se o mapa maior for 40X40 em vez de 4X4 e o ponto (0,0) for 10 e o ponto (0,1) for 1, os blocos no mapa maior entre eles serão 10,9,8,7,6 , 5,4,3,2,1 de altura. É possível adicionar mais ruído Perlin para suavizar as inclinações. No geral, toda essa técnica de dimensionamento é semelhante ao algoritmo Diamond Square .
Água
Simular rios e lagos, oceanos e lençóis freáticos. Eu prefiro usar autômatos celulares .
As alturas tornam-se flutuantes ou intervalos int expandidos para permitir um rastreamento mais refinado. As células da água têm valores de saturação, digamos na faixa de 1-256. Os mapas devem começar uniformemente. Você precisará jogar com os números para o tamanho de seu mapa individual; no entanto, geralmente você seguirá regras mais ou menos assim:
Faça essa verificação para todas as células vizinhas. Execute um número suficiente de etapas. Se desejar, você pode adicionar temperatura a esta simulação alterando a quantidade de saturação perdida / adquirida por essa temperatura. Você também pode alterá-lo com base na elevação. Lagos e rios naturais devem se formar. Alguns vão cair no oceano. (O oceano provavelmente não será preenchido por nenhuma métrica, mas você designará qualquer coisa abaixo do nível do mar como preenchida com água no final).
Você pode manter os dados de temperatura e saturação para usar, como nas outras respostas, para criar biomas. Eles devem ser MUITO mais precisos e interessantes. Com biomas nevados nos pólos e quentes no meio (se você usar uma lista gradual e suave de temperaturas).
Você também pode simular o vento e, portanto, as mudanças de temperatura com base nas elevações. Você pode alternar entre executar a simulação de temperatura e a simulação de água, se desejar. No entanto, eu não construí nada usando mudanças de temperatura, então não vou comentar sobre como fazer isso.
Paisagens em evolução
Se você mantiver as simulações de terra, água e calor ao redor e reduzir drasticamente seus efeitos e também impedir que as placas se movam, você poderá continuar alterando todas essas métricas ao longo do tempo. Eu não faria os cálculos com muita frequência, mas você pode obter um mapa-múndi que responda a mudanças dessa maneira.
Conclusão
Embora esses tipos de técnicas sejam muito mais envolvidos, eles produzem efeitos muito mais realistas e evolutivos. Tome-o para o que vale a pena?
fonte
Você pode usar o Perlin Noise para a geração do terreno, eis como os biomas do Minecraft funcionam. Como você pode ver, ele usa um mapa de calor em combinação com um mapa de chuva para criar os biomas.
fonte