Правильний спосіб "випадковим чином" генерувати проточну місцевість


9

Я створюю просту гру RTS зверху вниз. Я планую на цьому "випадковим чином" генерувати карти на льоту, коли мені потрібно. Я планую на цьому все, що працює в "пропусках":

  1. Засипте місцевість усією травою
  2. Поверніться і додайте кілька випадкових шпорів гравію
  3. Округліть гравій
  4. На другому шарі намалюйте гірський пейзаж
  5. Круглі гори
  6. тощо.

А тепер подивіться на цю картинку нижче:

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

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

Як я повинен вирішувати, коли і як розмістити свій гравій, щоб він був принаймні неправильної форми та спорадично виглядав природним?

Дякую, якщо зможете! Будь-яка допомога вдячна!

Як бічна примітка:

Кожен прохід, в основному, я повторюю всі мої плитки (карта розділена на 40x40 плитки), подібну до цього:

for (int x = 0; x <= GRIDMAX - 1; x++) {
    for (int y = 0; y <= GRIDMAX - 1; y++) {
        //Terrain(x, y, 0) = SomethingHere;
    }
}

Відповіді:


5

Ви можете пограти з Perlin Noise ( див. Мою відповідь StackOverflow для реалізації ), щоб створити карту висоти. З карти висоти можна відобразити певні діапазони висоти для різних плиток. Щось на зразок:

  • Топ 20% снігу
  • Наступні 20% гравію
  • Наступні 40% трави
  • Останні 20% води

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


5

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

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

Дуже елегантним способом вирішити цю проблему є присвоєння унікального значення прапора кожному сусідньому напрямку плитки та викладіть ваш spritehseet таким чином, що отримане значення, додаючи разом усі суміжні прапори плитки, буде відповідати правильному положенню плитка в spritesheet. Прочитайте цю статтю, щоб отримати дуже чіткий опис методики.

І ось ще один ресурс , який описує іншу варіацію техніки.


Гей, просто щоб повідомити, ваша відповідь була надзвичайно корисною щодо закруглення кутів. Дякую тонну :) Це насправді все працює (навіть кути закруглення)!
Freesnöw

4

По суті, ви можете використовувати Perlin Noise Generation для створення своїх карт. Ви б відібрали згенеровану карту висоти та призначили блоки гравію частинам карти, які мають певну висоту.

Ось чудовий довідковий пост про те, як рухатись до впровадження такої системи та різних типів рельєфу, які ви могли б створити.

Приклади мають набагато більше кроків, ніж вам потрібно, але концепція така ж.

Детальніше про світовий ген типу Minecraft

http://www.gamedev.net/blog/33/entry-2227887-more-on-minecraft-type-world-gen/

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

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