Estou programando um jogo baseado em blocos e tenho alguns blocos básicos (grama, sujeira, etc.), mas não consigo descobrir como gerar uma boa geração aleatória de mapas, porque quando faço uma seleção realmente aleatória, se o bloco deve ser grama / sujeira, eu entendi o seguinte:
Entendo por que isso está acontecendo, mas o que quero é criar algumas áreas contínuas aleatórias de grama ou sujeira. Algo que faria mais sentido, assim:
Respostas:
O que você pode fazer é gerar aleatoriamente um mapa de Voronoi como este:
center points
(veja os pontos pretos) e decida aleatoriamente se são grama ou sujeira.center point
de terra ou grama.Se o que você fez anteriormente foi "jogar uma moeda" para cada ladrilho (ruído), a geração de um diagrama de Voronoi proporcionará um resultado muito melhor.
Você pode melhorar isso dividindo o
center points
emislands
com um algoritmo que:centers points
e os designa comoleaders
.fonte
center points
. Depois decida se são grama ou sujeira. Agora passe pela matriz e decida se cada peça está mais próxima de um ponto de terra ou grama. Talvez me diga qual parte desafiadora?Você pode usar o ruído perlin, que normalmente é usado para a geração de mapas de altura. Ruído Perlin nos jogos
Depois, você pode usar as alturas como consultor, qual a probabilidade de ocorrência de grama / sujeira em uma região do mapa.
Exemplo (valores de ruído Perlin de 0 a 255): Se o valor for superior a 200, a chance de colocar grama é de 80% (sujeira de 20%). Se o valor estiver entre 100 e 200, a chance de colocar grama é de 50% (sujeira também 50%). Se o valor estiver abaixo de 100, a chance de a grama ser colocada é de 20% (sujeira 80%).
fonte
http://gamedevelopment.tutsplus.com/tutorials/generate-random-cave-levels-using-cellular-automata--gamedev-9664
Aqui está a minha versão do método de autômatos celulares: comece preenchendo a grade aleatoriamente e execute essas regras de autômatos cullulares algumas vezes
e acaba parecendo uma caverna
o índice pode ser convertido para a posição x & y e voltar com este código
Acabei de retornar uma lista de bools porque eu uso essa lista para muitas coisas: cavernas, árvores, flores, grama, neblina, água, você pode até combinar várias listas de maneiras diferentes aqui, primeiro removo todas as cavernas menores e depois uno duas listas aleatórias
fonte
Selecione um ponto no mapa. Coloque o tipo de ladrilho desejado com um valor base como 40. Mantenha o controle de onde você colocou o ladrilho recém-desejado. Adicione o ponto de partida a uma lista.
Para cada ponto desta lista, você visita todos os vizinhos. Enquanto você tem energia suficiente (iniciada aos 40), adicione um bloco desejado e adicione-o à lista a ser visitada. Dê menos energia ao novo ladrilho, determinado por você. Mais fácil = abaixamento aleatório. Depois de visitar o bloco da lista, remova-o. Comece novamente visitando todos os blocos não visitados, mas criados.
fonte