Comment générer un terrain comme celui de la Terre brûlée?


12

Je suis développeur Web et je souhaite commencer à écrire mes propres jeux.

Pour plus de familiarité, j'ai choisi JavaScript et canvaselement pour l'instant.

Je veux générer un terrain comme celui-ci dans Scorched Earth.

Terre brûlée

Ma première tentative m'a fait réaliser que je ne pouvais pas simplement randomiser la yvaleur; il devait y avoir un peu de raison dans les sommets et les creux.

J'ai cherché un peu sur Google, mais je ne trouve pas quelque chose d'assez simple pour moi ou j'utilise les mauvais mots clés.

Pouvez-vous me montrer le type d'algorithme que j'utiliserais pour générer quelque chose dans l'exemple, en gardant à l'esprit que je suis complètement nouveau dans la programmation de jeux (depuis la création de Breakout en 2003 avec Visual Basic)?

Réponses:


18

L'algorithme de déplacement du point médian est exactement ce que vous voulez.

Ce lien peut générer quelque chose comme ceci:

entrez la description de l'image ici

Ou comme votre image, selon les paramètres que vous utilisez. Il y a une source C disponible ici .


Merci pour cela, je ne sais toujours pas comment l'implémenter en JavaScript, mais j'espère que cela deviendra plus clair pour moi en lisant cet article.
alex

Il y a la source C que je viens d'éditer. Cela ne devrait pas être trop compliqué à implémenter :)
The Communist Duck

@Le canard communiste Merci, j'ai déjà essayé C.
alex


@alex, vous devez utiliser une sorte de récursivité dans votre implémentation. Actuellement, vous avez simplement une ligne avec une composante y aléatoire, où la variation aléatoire diminue vers la droite.
Juha Syrjälä

5

Que diriez-vous d'utiliser l' algorithme de déplacement à mi-chemin éventuellement suivi d'un léger lissage, par exemple un filtrage passe-bas pour éliminer les pointes trop pointues? Cette approche n'est pas la même que dans Scorched Earth, mais devrait fournir des résultats similaires.

Je crois que la Terre brûlée a simulé en quelque sorte la gravité et la saleté qui tombe. Par exemple, vous ne pouvez pas avoir une pente trop raide car sinon la saleté tomberait et créerait une pente moins raide.


1

Il existe une autre approche que vous pouvez utiliser. Vous pouvez additionner un certain nombre d'ondes sinusoïdales générées aléatoirement, puis mettre le résultat à l'échelle pour l'adapter à votre écran. C'est vraiment facile en pratique et produit de bons résultats, bien que plus doux et peut-être plus artificiel que votre exemple de capture d'écran.

Vous pouvez voir la source en javascript ici. Il est vraiment facile de jouer avec certains paramètres pour obtenir différents types de terrain.

https://github.com/fmstephe/Tankwars

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.