Как создать ландшафт, подобный выжженной Земле?

12

Я веб-разработчик, и я готов начать писать свои собственные игры.

Для знакомства я выбрал JavaScript и canvasэлемент на данный момент.

Я хочу создать такую ​​местность в Scorched Earth.

Выжженная земля

Моя первая попытка заставила меня понять, что я не могу просто рандомизировать yзначение; должно было быть некоторое здравомыслие в пиках и впадинах.

Я немного погуглил, но либо не могу найти что-то достаточно простое для себя, либо я использую неправильные ключевые слова.

Не могли бы вы показать мне, какой алгоритм я бы использовал для генерации чего-либо в этом примере, имея в виду, что я совершенно новичок в программировании игр (так или иначе, начиная с Breakout в 2003 году с Visual Basic)?

Алекс
источник

Ответы:

18

Алгоритм смещения средней точки - это именно то, что вам нужно.

Эта ссылка может генерировать что-то вроде этого:

введите описание изображения здесь

Или как ваше изображение, в зависимости от того, какие параметры вы используете. Там же источник C доступен здесь .

Коммунистическая утка
источник
Спасибо за это, я все еще не уверен, как реализовать это в JavaScript, но, надеюсь, это станет более понятным для меня, когда я прочитаю эту статью.
Алекс
Есть источник C, который я только что отредактировал. Это не должно быть слишком большой проблемой для реализации :)
Коммунистическая Утка
@ Коммунистическая утка Спасибо, я баловался в C раньше.
Алекс
@The Коммунистический Duck Надеюсь , я нахожусь на правильном пути :)
Alex
@alex, вы должны использовать какую-то рекурсию в своей реализации. В настоящее время у вас есть просто линия со случайным компонентом y, где случайное отклонение уменьшается вправо.
Юха Сыряля
5

Как насчет использования алгоритма смещения средней точки , возможно, сопровождаемого небольшим сглаживанием, например фильтрацией нижних частот, чтобы удалить слишком резкие пики? Этот подход не такой, как в Scorched Earth, но он должен обеспечить аналогичные результаты.

Я полагаю, что выжженная земля имитировала гравитацию и падающую грязь. Например, у вас не может быть слишком крутого холма, потому что иначе грязь упадет и создаст менее крутой склон.

Юха Сирьяля
источник
1

Есть другой подход, который вы можете использовать. Вы можете сложить несколько случайно сгенерированных синусоидальных волн и затем масштабировать результат, чтобы уместить его на экране. Это действительно легко на практике и дает хорошие результаты, хотя и более плавный и, возможно, более искусственный, чем скриншот из вашего примера.

Вы можете увидеть источник в javascript здесь. С некоторыми параметрами очень легко поиграться, чтобы получить разные виды местности.

https://github.com/fmstephe/Tankwars

Фрэнсис Стивенс
источник