Як я можу генерувати рельєф, подібний до випаленої Землі?


12

Я веб-розробник і хочу почати писати власні ігри.

Для ознайомлення я зараз вибрав JavaScript та canvasелемент.

Я хочу генерувати таку місцевість на випаленій Землі.

Випалена земля

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

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

Чи можете ви, будь ласка, покажіть мені, який алгоритм я використовував би для створення чогось у прикладі, маючи на увазі, що я абсолютно новий у програмуванні ігор (з моменту створення Breakout у 2003 році з Visual Basic все одно)?

Відповіді:


18

Алгоритм переміщення середньої точки - саме те, що ви хочете.

Це посилання може генерувати щось подібне:

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

Або подобається ваше зображення, залежно від параметрів, які ви використовуєте. Там же джерело C доступний тут .


Дякую за це, я все ще не впевнений, як його реалізувати в JavaScript, але, сподіваюся, це стане мені зрозумілішим, коли я читаю цю статтю.
alex

Є джерело С, яке я щойно відредагував. Це не повинно бути занадто великим питанням для впровадження :)
Комуністична качка

@Камуністична качка. Дякую, я вже давно намагався в С.
alex

@ Комуністична качка Сподіваюся, я на вірному шляху :)
Алекс

@alex, ви повинні використовувати якусь рекурсію у своїй реалізації. В даний час у вас є просто рядок із випадковою складовою y, де випадкова зміна зменшується праворуч.
Juha Syrjälä

5

А як щодо використання алгоритму переміщення середньої точки , можливо, після нього буде злегка згладжуватися, наприклад, фільтрація з низьким проходом для видалення занадто гострих шипів? Цей підхід не такий, як у випаленій Землі, але має дати подібні результати.

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


1

Ви можете використовувати інший підхід. Ви можете скласти декілька випадково генерованих синусоїд, а потім масштабувати результат, щоб розміститись на екрані. На практиці це дуже просто і дає хороші результати, хоча плавніші і, можливо, більш штучні, ніж ваш приклад знімка екрана.

Ви можете побачити джерело у javascript тут. Дуже легко пограбувати з деякими параметрами, щоб отримати різні види місцевості.

https://github.com/fmstephe/Tankwars

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.