Un mapa simple, cuatro biomas y cómo distribuirlos.

16

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:

maqueta de un posible mapa mundial con pueblos y ubicación inicial, pero sin entradas a mazmorras

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.

Kawa
fuente
¿Está dispuesto a utilizar bibliotecas de terceros o desea codificar su propia solución?
William Mariager
Yo prefiero la codificación de la mía.
Kawa
¿Los tamaños del bioma son fijos?
kaoD
¿Podría editar la publicación con una lista de puntos de las reglas exactas que desea que siga la generación del mapa? Sería más fácil para nosotros lidiar con el problema sabiendo exactamente a qué nos dirigimos.
William Mariager
Editado, y los tamaños de bioma, bueno, fui con esos, por ejemplo. Para un mundo de 16x16, Desert aún podría ser un cuarto del área, etc., pero eso es principalmente para garantizar que ciertas áreas estarán allí.
Kawa

Respuestas:

8

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.

DampeS8N
fuente
Votación a favor de la sugerencia de CA. Encaja bien con el comentario de Valmond.
Kawa
Te sorprendería lo simple que puede ser una solución de CA para este problema. Reglas simples y un mapa de inicio aleatorio pueden producir paisajes notablemente detallados y de aspecto 'realista'.
DampeS8N
Fui con el principio de CA. Todavía no está del todo bien, ya que lo único que mantiene separados el desierto y la nieve son algunas reglas de posición absolutas, pero lo hace muy bien por ahora.
Kawa
1
Una solución opcional para el problema de la nieve / desierto es tener una regla para crear un tipo diferente de bioma donde la nieve se encuentre con el desierto. Di pantano. Entonces el pantano puede continuar creciendo de manera normal. Es posible que todavía tenga bordes de nieve / desierto, pero en realidad eso es algo natural. De hecho, la mayor parte del desierto en la tierra está cubierta de nieve. - en resumen, la nieve podría tener la regla de tal manera que si algún vecino es desierto, se convierta en pantano.
DampeS8N
11

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.

Voronoi-grid

Repita para cada pantalla, dando a cada uno su propio bioma.

ChrisC
fuente
Lo he visto antes, y es un poco demasiado bazooka-on-a-mosquito para mis gustos.
Kawa
Bueno, de acuerdo, eso es decir suavemente. Es muy bazooka-on-a-mosquito. El ejemplo 8x8 no fue solo un ejemplo: el mundo realmente no será lo suficientemente grande como para justificar esa solución.
Kawa
Vale, ya veo ahora. Realmente no necesitas diferenciar los biomas en cada mosaico del mapa. Además, el concepto propuesto del artículo parece hecho a medida para el autor, pero algunas partes pueden ser eliminadas. Estoy editando mi respuesta para que quede más claro.
ChrisC
Todavía es una solución demasiado compleja. No hay altura o humedad para usar aquí. Todo lo que necesitaba, todo lo que quería pedir era alguna forma de "extender" gotas de desierto, pantano y nieve hasta las cantidades requeridas, siguiendo algunas reglas adicionales como "la nieve no puede acercarse demasiado al desierto" .
Kawa
@Kawa: ¡Parece que estás listo para cavar y escribir tu propia solución! Por lo que puedo decir, lo tienes todo visualizado en tu mente, ¡simplemente HAZLO! :) Recuerda que no tiene que ser el generador de mapas definitivo del mundo, siempre y cuando parezca que es así. ;)
Zolomon
1

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.

Valmond
fuente
Eso no ayuda exactamente con el aspecto manchado del problema.
Kawa
2
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).
Valmond
también puede agregar una regla para que no pueda crear una ficha del desierto si hay nieve en alguna ficha cercana.
Valmond
Valmond, pon eso en una respuesta.
Kawa