Como faço para gerar terrenos como o da Terra Chamuscada?

12

Sou desenvolvedor web e estou ansioso para começar a escrever meus próprios jogos.

Por familiaridade, eu escolhi o JavaScript e o canvaselemento por enquanto.

Quero gerar um terreno como esse na Terra chamuscada.

Terra arrasada

Minha primeira tentativa me fez perceber que não podia simplesmente aleatoriamente o yvalor; tinha que haver alguma sanidade nos picos e vales.

Pesquisei um pouco no Google, mas não consigo encontrar algo simples o suficiente para mim ou estou usando as palavras-chave erradas.

Você pode me mostrar que tipo de algoritmo eu usaria para gerar algo no exemplo, tendo em mente que sou completamente novo na programação de jogos (desde que fiz o Breakout em 2003 com o Visual Basic)?

alex
fonte

Respostas:

18

O algoritmo de deslocamento do ponto médio é exatamente o que você deseja.

Esse link pode gerar algo como isto:

insira a descrição da imagem aqui

Ou como sua imagem, dependendo de quais parâmetros você usa. Há fonte C disponível aqui .

O Pato Comunista
fonte
Obrigado por isso, ainda não tenho certeza de como implementá-lo em JavaScript, mas espero que fique mais claro para mim ao ler esse artigo.
alex
Há a fonte C eu apenas editado em Não deve ser demasiado de um problema para implementar :).
A Comunista Duck
@ O Pato Comunista Obrigado, já me envolvi em C antes.
alex
@The Comunista Duck Esperemos que estou no caminho certo :)
alex
@alex, você deve usar algum tipo de recursão em sua implementação. Atualmente, você tem simplesmente uma linha com o componente y aleatório, onde a variação aleatória diminui para a direita.
Juha Syrjälä 6/03/11
5

Que tal usar o algoritmo de deslocamento do ponto médio , possivelmente seguido de uma ligeira suavização, por exemplo, filtro passa-baixo para remover picos muito acentuados? Essa abordagem não é a mesma que na Terra chamuscada, mas deve fornecer resultados semelhantes.

Acredito que a Terra Chamuscada simulou de alguma forma a gravidade e a sujeira que caía. Por exemplo, você não pode ter uma colina muito íngreme porque, caso contrário, a sujeira cairia e criaria uma inclinação menos íngreme.

Juha Syrjälä
fonte
1

Há outra abordagem que você pode usar. Você pode adicionar várias ondas senoidais geradas aleatoriamente e depois escalar o resultado para caber na tela. É realmente fácil na prática e produz alguns bons resultados, embora mais suave e talvez mais artificial do que a captura de tela de exemplo.

Você pode ver a fonte em javascript aqui. É realmente fácil mexer com alguns parâmetros para obter diferentes tipos de terreno.

https://github.com/fmstephe/Tankwars

Francis Stephens
fonte