Estoy comenzando / empecé un juego RPG de mosaico 2D en Java y quiero implementar la generación de mapas aleatorios. Tengo una lista de diferentes mosaicos (tierra / arena / piedra / hierba / grava, etc.) junto con mosaicos de agua y mosaicos de caminos, el problema que tengo es que no tengo idea de dónde comenzar a generar un mapa al azar.
Tendría que tener secciones de terreno (como una parte de ella será arena, parte de tierra, etc.) Similar a cómo Minecraft es donde tienes diferentes biomas y se transforman sin problemas entre sí. Por último, también necesitaría agregar rutas aleatorias en esto, así como ir en diferentes direcciones en todo el mapa.
No le estoy pidiendo a nadie que me escriba todo el código ni nada, solo póngame en la dirección correcta, por favor.
tl; dr: genera un mapa de mosaico con biomas, caminos y asegúrate de que los biomas se unan perfectamente entre sí.
Mientras que las otras respuestas aquí son realmente buenas para generar los tipos de paisajes estáticos que funcionarían para esta necesidad específica. Hay otros métodos que las personas que se encuentran con esta pregunta podrían estar buscando si desean crear paisajes que cambien con el tiempo o parezcan mucho más realistas, puede seguir esta técnica.
A diferencia de las otras respuestas, comienzas esto con un mapa completamente vacío. Comience con lo que consideraría ser el nivel del mar. Use el ruido Perlin para agregar una variación muy leve, si tiene 256 elevaciones posibles, no varíe más de 3-5 en cualquier dirección. Esto construye los primeros miles de millones de años de su paisaje sin tener que ejecutar una simulación durante tanto tiempo.
Placas tectónicas
Divida el mapa a lo largo de líneas rectas o curvas para crear placas, cuanto más detalladas sean las formas de las placas, más interesante será su paisaje. Mantenlos grandes. Dale a cada plato una dirección, velocidad. Durante un período de tiempo determinado, mueva las placas de forma escalonada alrededor del mapa, arrastrando todas las fichas sobre ellas con ellas.
Cuando se cruzan dos placas, elija cuál pasará y cuál se hundirá, esta elección puede ser aleatoria. Las baldosas en las placas designadas debajo se reducen instantáneamente en altura en 5 pasos. Una vez que se ha designado una placa encima o debajo, todas las interacciones futuras con placas seguirán estas reglas:
Todas las placas que cruzan se ralentizan en un 20% de su velocidad actual en cada paso. Para mayor realismo, agregue un cambio aleatorio de -10% a 10% en la dirección del movimiento en cada paso.
Después de realizar el número deseado de pasos. Probablemente 5-10 son suficientes. Cualquier mosaico en el que no haya placas residentes debe dejarse caer al nivel más bajo existente.
¿Grande o pequeño?
Este mapa se puede usar como está o se puede expandir para crear un mapa mucho más grande al dividirlo en bloques de 4X4 mosaicos (celdas) y expandir esas secciones en función de sus elevaciones individuales. Trate la elevación de cada celda como un punto y cree una gradación suave en el mapa más grande entre esos puntos. Entonces, si el mapa más grande es 40X40 en lugar de 4X4, y el punto (0,0) era 10 y el punto (0,1) era 1, los mosaicos en el mapa más grande entre ellos serían 10,9,8,7,6 , 5,4,3,2,1 de altura. Se puede agregar más ruido de Perlin para suavizar las pendientes. Sobre todo, esta técnica de escala es similar al algoritmo Diamond Square .
Agua
Para simular ríos y lagos, océanos y capas freáticas. Prefiero usar autómatas celulares .
Las alturas se convierten en flotadores o rangos int expandidos para permitir un seguimiento de grano más fino. Las células de agua tienen valores de saturación, digamos en el rango de 1-256. Los mapas deben comenzar de manera uniforme. Tendrás que jugar con los números para tus tamaños de mapa individuales, sin embargo, en general, seguirás reglas como esta:
Haga esta verificación para cada celda vecina. Ejecute una cantidad suficiente de pasos. Si lo desea, puede agregar temperatura a esta simulación cambiando la cantidad de saturación perdida / ganada por esa temperatura. También puede cambiarlo según la elevación. Se deben formar lagos y ríos naturales. Algunos caerán al océano. (El océano probablemente no se llenará por ninguna métrica, pero de todos modos designarás cualquier cosa debajo del nivel del mar para que se llene de agua al final).
Puede mantener los datos de temperatura y saturación para usar, como en las otras respuestas, para crear biomas. Deberían ser MUCHO más precisos e interesantes. Con biomas nevados en los polos y calientes en el medio (si usa una lista gradual de temperaturas suave).
También puede simular el viento y, por lo tanto, los cambios de temperatura en función de las elevaciones. Si lo desea, puede avanzar y retroceder entre la simulación de temperatura y la simulación de agua. Sin embargo, no he construido nada con los cambios de temperatura, por lo que no comentaré cómo hacerlo.
Paisajes en evolución
Si mantiene las simulaciones de tierra, agua y calor y reduce drásticamente sus efectos y también evita que las placas se muevan, puede continuar cambiando todas estas métricas con el tiempo. No ejecutaba los cálculos muy a menudo, pero puede obtener un mapa mundial que responda a los cambios de esta manera.
Conclusión
Si bien este tipo de técnicas son mucho más complicadas, producen efectos mucho más realistas y evolutivos. Tómelo por lo que vale?
fuente
Puedes usar Perlin Noise para la generación del terreno, así es como funcionan los biomas en Minecraft. Como puede ver, él usa un mapa de calor en combinación con un mapa de lluvia para crear los biomas.
fuente