¿Cómo genero un terreno como el de Scorched Earth?

12

Soy desarrollador web y estoy ansioso por comenzar a escribir mis propios juegos.

Por familiaridad, he elegido JavaScript y canvaselemento por ahora.

Quiero generar un terreno como ese en Scorched Earth.

Tierra quemada

Mi primer intento me hizo darme cuenta de que no podía simplemente aleatorizar el yvalor; tenía que haber algo de cordura en los picos y los canales.

He buscado en Google un poco, pero o no puedo encontrar algo lo suficientemente simple para mí o estoy usando las palabras clave incorrectas.

¿Puede mostrarme qué tipo de algoritmo usaría para generar algo en el ejemplo, teniendo en cuenta que soy completamente nuevo en la programación de juegos (desde que hice Breakout en 2003 con Visual Basic de todos modos)?

alex
fuente

Respuestas:

18

El algoritmo de desplazamiento del punto medio es exactamente lo que quieres.

Ese enlace puede generar algo como esto:

ingrese la descripción de la imagen aquí

O como tu imagen, dependiendo de los parámetros que uses. Hay una fuente C disponible aquí .

El pato comunista
fuente
Gracias por esto, todavía no estoy seguro de cómo implementarlo en JavaScript, pero espero que sea más claro para mí cuando lea ese artículo.
alex
Ahí está la fuente C que acabo de editar. No debería ser un gran problema implementar :)
The Communist Duck
@El pato comunista Gracias, ya he incursionado en C antes.
alex
@The Communist Duck Espero estar en el camino correcto :)
alex
@alex, deberías usar algún tipo de recursividad en tu implementación. Actualmente tiene simplemente una línea con componente y aleatorio, donde la variación aleatoria disminuye a la derecha.
Juha Syrjälä
5

¿Qué tal usar el algoritmo de desplazamiento del punto medio posiblemente seguido de un ligero suavizado, por ejemplo, filtrado de paso bajo para eliminar picos demasiado afilados? Este enfoque no es el mismo que en Scorched Earth, pero debería proporcionar resultados similares.

Creo que Scorched Earth simuló de alguna manera la gravedad y la caída de tierra. Por ejemplo, no puede tener una colina demasiado empinada porque, de lo contrario, la tierra se caería y crearía una pendiente menos empinada.

Juha Syrjälä
fuente
1

Hay otro enfoque que puede usar. Puede agregar varias ondas sinusoidales generadas aleatoriamente y luego escalar el resultado para que se ajuste a su pantalla. Es realmente fácil en la práctica y produce algunos buenos resultados, aunque más suave y quizás más artificial que su captura de pantalla de ejemplo.

Puedes ver la fuente en javascript aquí. Es realmente fácil jugar con algunos parámetros para obtener diferentes tipos de terreno.

https://github.com/fmstephe/Tankwars

Francis Stephens
fuente