Metody generowania mapy

27

Chcę stworzyć prostą, „losowo” generowaną mapę dla małej gry.

Gra składa się z widoku z góry na świat, z masą lądową i obszarami oceanicznymi. Pomyśl na przykład o prostej zarysie mapy świata.

Najbliższą rzeczą, jaką widziałem wcześniej, był generator poziomów dla starych gier SimCity lub serii Civ , w której możesz ustawić preferencje dla pojedynczego kontynentu względem wielu wysp itp.

Jaki rodzaj algorytmu byłby odpowiedni? Mapa będzie musiała być umiarkowanie powiększalna, więc mogę mieć widok „całego świata”, a także bardziej przybliżony widok lokalny, ale myślę, że rozwiążę to później.

Początkowo nie potrzebuję żadnej koncepcji wysokości, tylko dwa obszary - lądowy i morski, chociaż mogę ją później rozszerzyć.

Cylindryczny
źródło
Myślałem wzdłuż linii generacji, używając pewnego rodzaju funkcji perlin-hałas, ale nie jestem pewien, jak przejść z mapy wysokości 2D do zestawu linii łączących wszystkie obszary na wysokości X.
Cylindryczny

Odpowiedzi:

21

„Słynny” Amit (z ogromną stroną różnych tematów związanych z programowaniem gier) ma bloga poświęconego programowaniu gier i właśnie ukończył 3-częściowy samouczek interesującej metody generowania map. Naprawdę podobały mi się lektury, a na dole trzeciego artykułu znajduje się działające demo, które jest dość gwiezdne.

„Generowanie mapy wielokątów” część 1 , część 2 , część 3 .

Może to być technika, którą chcesz dostosować do swoich potrzeb! Przynajmniej wspomina algorytmy, których używa na każdym etapie procesu: zaczyna od generacji wieloboków Voronoi , rozluźnia je do bardziej równomiernej dystrybucji za pomocą relaksacji Lloyda , używa „prostej funkcji dzielenia świata na ziemię i wodę” , a następnie wypełnia powodzie, aby określić oceany i jeziora. Wygląda na to, że możesz się tam zatrzymać lub poczytać o górach i dolinach i zmienić go w 3D i tak dalej.

Ricket
źródło
2
Och, wow, skorzystałem z przewodnika Amita, aby nauczyć się A *. To tak, jakby patrzył mi w głowę :) Czas na tatuaż „<3 Amit” ...
Cylindric
1
To naprawdę cholernie świetne
Colm,
Voronoi, miło. :)
user712092