Aqui está a idéia básica: eu tenho um jogo de Rogue-ish, talvez Dwarf Fortress-ish, com um mundo superior gerado aleatoriamente e várias entradas de masmorras espalhadas por ele. Eu já tenho as masmorras basicamente cobertas, mas estou presa em um aspecto do mundo superior.
O mundo superior, considerado como um mapa 2D de telas, deve ter uma distribuição talvez semelhante a uma bolha de quatro temas ou biomas diferentes - pradarias, deserto, neve e pântano, cada um com sua própria quantidade total de telas. Digamos que o mapa seja 8x8, o que fornece 64 telas únicas. Metade delas poderia ser pradarias, um quarto de deserto e pântano e neve ganham um quarto cada:
Parece que a redução da paleta tornou a neve da mesma cor do pântano. Originalmente, havia oito telas de neve no canto inferior e uma área de pântano com oito telas no meio. Desculpe por isso e ignore os marcadores de localização.
O melhor que consegui foram algumas formas serpenteantes, e muitas vezes com combinações sem sentido, como o deserto serpenteando na neve (ou vice-versa). Pela minha vida, não consigo descobrir como obtê-la de maneira agradável e desonesta, sem falar em fazer sentido (?) Climático. Então, como eu gero um mapa de bioma como na maquete?
Ok, por solicitação: o mundo realmente não é muito maior que esse exemplo, e o que eu preciso é apenas uma maneira de espalhar algumas bolhas que determinam aparências temáticas, com a limitação extra de que a neve não pode tocar no deserto. As telas não rolam e, se uma tela estiver definida como "deserto", não haverá grama em nenhum lugar.
fonte
Respostas:
Existem muitas maneiras de esfolar esse gato, mas uma das mais interessantes é usar autômatos celulares . Comece com sua grade vazia e adicione algumas células iniciais de sementes em locais aleatórios. Estes devem ser de alguns tipos básicos de biomas não misturados. Diga: Grama, Deserto, Neve, Oceano.
Com base nas regras de crescimento de seu próprio projeto, que podem apresentar alguma aleatoriedade (não me importo que isso tecnicamente interrompa a ideia de CA, certo?), Elas aumentam cada etapa do mapa. Regras adicionais podem ser tais que, se você for oceano e estiver próximo a grama ou pântano, poderá se transformar em pântano. Se você estiver próximo da neve, poderá se tornar gelo; se estiver perto do deserto, poderá secar e se tornar deserto também.
O mesmo pode ser verdade para outras misturas e, em teoria, até sub-misturas como pântano congelado, tundra ou selva que brota de grandes extensões de florestas que cresceram em grandes extensões de pastagem.
As possibilidades são infinitas e também podem ser contínuas. Como essas regras são simples, você pode implementar ambientes que mudam com o tempo. Combinado com informações de altura e regras que levam isso em consideração, você pode cultivar lagos e rios, bloquear o crescimento de florestas sobre montanhas e outras coisas sofisticadas.
Esse mapa de altura pode ser o resultado de ruído permanente, quadrado de diamante ou até mesmo de outros modelos CA. De fato, você pode modificar esse mapa com o passar do tempo modelando placas tectônicas, elevando montanhas, afundando em trincheiras e até deixando rios baixarem a paisagem, criando cânions.
Esta toca de coelho se estende para sempre.
fonte
Resposta curta, mas você realmente deve consultar este artigo: www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/ Explica um algoritmo sobre a geração da geração aleatória de terra seca e biomas com base em zonas de umidade designadas e regiões de altitude. Mas, no seu caso, basta definir seus próprios valores para a distribuição que você deseja.
(grande edição) Tornarei isso muito mais claro para quais conceitos de geração de mapas você precisa aplicar. Use um sistema de coordenadas com 1 unidade por tela, em valores de ponto flutuante. Gere um pequeno conjunto aleatório de pontos dentro dessas coordenadas, como se você estivesse fazendo um diagrama de Voronoi, mas na verdade não criaremos as formas aleatórias. Em vez disso, o diagrama será implícito e aproximado pelo mapa após a definição dos biomas.
Cada ponto é o centro de cada área do bioma. Defina suas próprias regras para associar um ponto a um bioma. Por exemplo, se você deseja um deserto ao leste e não muito ao sul ou ao norte, todos os pontos maiores que um certo valor de X e dentro de um certo intervalo de Y terão um deserto ao seu redor.
Associe cada tela a um desses pontos, o que é feito pegando o centro da tela nas coordenadas XY (por exemplo, 4.5, 8.5) e retornando o ponto mais próximo ao centro da tela.
Aqui está um desenho aproximado de um diagrama de forma na grade de telas. Não estamos realmente preocupados com as linhas que cercam as formas, mas elas estão lá para ilustrar como as telas começam a aproximar as regiões da forma.
Repita para cada tela, dando a cada um seu próprio bioma.
fonte
Resposta 1:
crescer neve e deserto, quando isso for feito, procure as interseções (proibidas) e cresça (mais ou menos grande) pântano lá.
Rince e repita.
Resposta 2:
Para a parte 'blob', mudei meu comentário (conforme solicitado) para a postagem:
Se você crescer por iteração, ie. defina 1 ponto de deserto e depois cresça aleatoriamente em torno de qualquer ponto de deserto (cada vez que pegue aleatoriamente um dos pontos de deserto existentes e adicione 1 ponto em um de seus lados (onde ainda não há nada)), então você deverá obter um efeito desagradável ( sem longas filas, por exemplo).
Você também pode adicionar uma regra para não criar um ladrilho do deserto se houver neve em qualquer ladrilho próximo.
fonte