Aquí está la idea básica: tengo un juego Rogue-ish, quizás Dwarf Fortress-ish, con un mundo exterior generado aleatoriamente y varias entradas de mazmorras dispersas a su alrededor. Ya tengo las mazmorras básicamente cubiertas, pero estoy atrapado en un aspecto del supramundo.
Dicho supermundo, considerado como un mapa 2D de pantallas, debería tener una distribución similar a una burbuja de cuatro temas o biomas diferentes: praderas, desierto, nieve y pantano, cada uno con su propia cantidad total de pantallas. Digamos que el mapa es 8x8, lo que da 64 pantallas únicas. La mitad de ellos podrían ser pastizales, un cuarto del desierto, y el pantano y la nieve reciben un cuarto cada uno:
Parece que la reducción de la paleta ha hecho que la nieve sea del mismo color que el pantano. Originalmente, había ocho pantallas de nieve en la esquina inferior y un área pantanosa de ocho pantallas ligeramente escalonada en el medio. Lo siento por eso, e ignore los marcadores de ubicación.
Lo mejor que pude obtener fueron algunas formas de serpientes, y a menudo lo suficiente con combinaciones sin sentido como el desierto serpenteando a través de la nieve (o viceversa). No puedo por mi vida descubrir cómo hacerlo agradable y sucio, y mucho menos que tenga sentido climático (?). Entonces, ¿cómo genero un mapa de bioma como en la maqueta?
De acuerdo, a pedido: el mundo realmente no es mucho más grande que ese ejemplo, y lo que necesito es solo una forma de extender algunas manchas que determinan las apariencias temáticas, con la limitación adicional de que la nieve no puede tocar el desierto. Las pantallas no se desplazan, y si una pantalla está configurada en "desierto", no habrá pasto en ninguna parte.
Respuestas:
Hay muchas maneras de desollar a este gato, sin embargo, una de las más interesantes es usar autómatas celulares . Comience con su cuadrícula vacía y agregue algunas celdas iniciales de semillas en ubicaciones aleatorias. Estos deberían ser de algunos tipos básicos de biomas no mezclados. Diga: Hierba, Desierto, Nieve, Océano.
Según las reglas de crecimiento de su propio diseño, que podría presentar cierta aleatoriedad (no me importa que técnicamente rompa la idea de CA, ¿verdad?), Haga que crezcan en cada paso del mapa. Las reglas adicionales pueden ser tales que si usted está en el océano y está al lado de hierba o pantano, podría convertirse en pantano. Si estás al lado de la nieve, puedes convertirte en hielo, si estás cerca del desierto, puedes secarte y convertirte en desierto también.
Lo mismo podría ser cierto para otras mezclas, y en teoría incluso submezclas como pantanos congelados, o tundra, o junglas que brotan de grandes extensiones de bosques que crecieron a partir de grandes extensiones de pastizales.
Las posibilidades son infinitas y también pueden ser continuas. Como todas estas reglas son simples, puede implementar entornos que cambian con el tiempo. Combinado con la información de altura y las reglas que lo tienen en cuenta, puede cultivar lagos y ríos, bloquear el crecimiento de los bosques sobre las montañas y otras cosas elegantes.
Ese mapa de altura puede ser el resultado del ruido perlin, o el cuadrado de diamante, o incluso de otros modelos de CA. De hecho, también podría modificar ese mapa a medida que pasa el tiempo modelando tectónica de placas, empujando montañas, hundiéndose en trincheras e incluso dejando que los ríos bajen el paisaje creando cañones.
Esta madriguera de conejo se extiende para siempre.
fuente
Respuesta corta, pero realmente debería consultar este artículo: www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/ Explica un algoritmo sobre la generación aleatoria de tierra seca y biomas basado en zonas de humedad designadas y regiones de altitud. Pero en su caso, simplemente establezca sus propios valores para la distribución que desee.
(edición grande) Haré esto mucho más claro para los conceptos de generación de mapas que necesita aplicar. Use un sistema de coordenadas con 1 unidad por pantalla, en valores de coma flotante. Genere un pequeño conjunto aleatorio de puntos dentro de estas coordenadas, como si estuviera haciendo un diagrama de Voronoi pero en realidad no haremos las formas aleatorias. En cambio, el diagrama estará implícito y aproximado por el mapa después de que se establezcan los biomas.
Cada punto es el centro de cada área del bioma. Establezca sus propias reglas para asociar un punto con un bioma. Por ejemplo, si desea un desierto al este y no demasiado al sur o al norte, todos los puntos que sean mayores que un cierto valor X y dentro de un cierto rango Y tendrán un desierto que los rodea.
Asocia cada pantalla con uno de estos puntos, lo que se hace tomando el centro de la pantalla en coordenadas XY (digamos 4.5, 8.5) y devolviendo el punto más cercano al centro de la pantalla.
Aquí hay un dibujo aproximado de un diagrama de forma en la cuadrícula de pantallas. No estamos realmente interesados en las líneas que rodean las formas, pero están ahí para ilustrar cómo las pantallas comienzan a aproximarse a las regiones de formas.
Repita para cada pantalla, dando a cada uno su propio bioma.
fuente
Respuesta 1:
crezca nieve y desierto, cuando termine, busque las intersecciones (prohibidas) y haga crecer (más o menos grande) pantano allí.
Enjuague y repita.
Respuesta 2:
Para la parte 'blob', moví mi comentario (según lo solicitado) a la publicación:
Si creces por iteración, es decir. establezca 1 punto de desierto y luego crezca aleatoriamente alrededor de cualquier punto del desierto (cada vez que tome al azar uno de los puntos del desierto existentes y agregue 1 punto en uno de sus lados (donde todavía no hay nada)), entonces debería obtener un efecto de bloqueo ( sin largas colas, por ejemplo).
También puede agregar una regla para que no pueda crear un mosaico del desierto si hay nieve en algún mosaico cercano.
fuente