Harita üretme yöntemleri


27

Küçük bir oyun için basit, "rasgele" oluşturulan bir harita oluşturmak için arıyorum.

Oyun, kara kütlesi ve okyanus alanları olan bir dünyanın yukarıdan aşağı görünümünden oluşuyor. Örneğin, dünyanın basit bir taslak haritasını düşünün.

Daha önce gördüğüm en yakın şey, eski SimCity oyunlarının seviye oluşturucusuydu ya da birçok adaya karşı tek bir kıtaya tercih edebileceğiniz Civ serisi.

Ne tür bir algoritma uygun olur? Haritanın orta derecede yakınlaştırılabilir olması gerekir, bu yüzden "tüm dünya" manzarasına ve daha da yakınlaştırılmış bir yerel manzaraya sahip olabilirim, ancak daha sonra çözeceğim.

Başlangıçta herhangi bir yükseklik kavramına ihtiyacım yok, sadece iki alana - kara ve deniz, ancak daha sonra genişletebilirim.


Bir çeşit perlin-gürültü işlevi kullanarak kuşaklar boyunca düşünmüştüm, ama aslında 2B yükseklik haritasından ne elde edeceğinden emin değilim, X yüksekliğindeki tüm alanları birbirine bağlayan bir dizi çizgiye.
Cylindric

Yanıtlar:


21

"Ünlü" Amit ( çeşitli oyun programlama konularının dev sayfasıyla birlikte ) bir oyun programlama bloguna sahip ve ilginç bir harita oluşturma yöntemi 3 bölümlük eğitimini tamamladı. Okumayı gerçekten çok sevdim ve üçüncü makalenin alt kısmında oldukça yıldız olan bir çalışma demosu var.

"Çokgen harita üretimi" bölüm 1 , bölüm 2 , bölüm 3 .

Bu, gereksinimlerinize uyarlamak istediğiniz bir teknik olabilir! En azından sürecin her aşamasında kullandığı algoritmalardan bahseder: Voronoi çokgenleri nesliyle başlar , Lloyd gevşemesini kullanarak onları daha eşit bir dağılıma gevşetir , "dünyayı karaya ve suya bölmek için basit bir işlev" kullanır ve ardından sel, okyanus ve gölleri belirlemek için doldurur. Orada durabilir ya da dağlar ve vadiler için okumaya devam edebilir ve 3B'ye çevirebilirsiniz.


2
Vay, Amit'in rehberini A * öğrenmek için çok kullandım. Kafamın içine bakıyor gibiydi :) "<3 Amit" dövmesini yaptırma zamanı ...
Cylindric

1
Bunlar gerçekten harika hilkat garibesi
Colm

Voronoi, güzel. :)
user712092
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.