Basit bir harita, dört biyom ve bunların nasıl dağıtılacağı


16

İşte temel fikir: Rastgele oluşturulmuş bir dünya ve etrafına dağılmış birkaç zindan girişi olan bir Rogue-ish, belki de Cüce Kale-ish oyunum var. Zaten temelde zindanlarım var , ama yeryüzünün bir yönüne takıldım.

2B bir ekran haritası olarak kabul edilen söz konusu dünya, dört farklı temanın veya biyomun (otlaklar, çöl, kar ve bataklık) her biri kendi toplam ekranlarına sahip olabilir. Diyelim ki harita 8x8, 64 farklı ekran sunuyor. Bunların yarısı otlak, çeyrek çöl, bataklık ve kar her biri çeyrek alabilir:

kasabalar ve başlangıç ​​konumu ile olası bir dünya haritası mockup, ancak zindan girişleri yok

Paletin azaltılması, karı bataklıkla aynı renge dönüştürdü. Başlangıçta, alt köşede sekiz kar ekranı ve ortada biraz kademeli sekiz ekranlı bataklık alanı vardı. Üzgünüz, lütfen yer işaretlerini dikkate almayın.

Alabileceğim en iyi şey bazı yılan şekilleri ve genellikle karda çöl yılanı gibi saçma sapan kombinasyonlarla yeterliydi (ya da tam tersi). Hayatım boyunca, iklimsel (?) Mantıklı olmasını sağlayarak, nasıl güzel ve blobby edileceğini anlayamıyorum. Peki maketteki gibi bir biyom haritasını nasıl oluşturabilirim?

Tamam, istek üzerine: dünya gerçekten bu örnekten çok daha büyük değil ve ihtiyacım olan şey, tematik görünümleri belirleyen bazı lekeleri yaymanın, karın çölle temas edemediği ekstra sınırlama ile yaymanın bir yoludur. Ekranlar kaymıyor ve bir ekran "çöl" olarak ayarlanmışsa, üzerinde hiçbir yerde ot olmayacak.


Üçüncü taraf kitaplıkları kullanmak istiyor musunuz, yoksa kendi çözümünüzü kodlamak mı istiyorsunuz?
William Mariager

Kendimi kodlamayı tercih ederim .
Kawa

Biyom boyutları sabit mi?
kaoD

Yayını, harita oluşturmanın takip etmesini istediğiniz kuralların tam bir nokta listesiyle düzenleyebilir misiniz? Tam olarak ne istediğimizi bilerek sorunla başa çıkmak bizim için daha kolay olurdu.
William Mariager

Düzenlendi ve biyom boyutları, örneğin bunlarla gittim. 16x16 dünyası için, Çöl hala bölgenin dörtte biri olabilir ve böyle devam eder, ancak bu çoğunlukla belirli alanların orada olacağını garanti eder.
Kawa

Yanıtlar:


8

Bu kedinin derisini almanın birçok yolu vardır, ancak daha ilginç olanlardan biri hücresel otomata kullanmaktır . Boş ızgara ile başlayın ve rastgele yerlerde birkaç tohum başlangıç ​​hücresi ekleyin. Bunlar bazı temel karışık olmayan biyom türlerinden olmalıdır. De ki: Çim, Çöl, Kar, Okyanus.

Kendi tasarımınızın büyüme kurallarına dayanarak, bazı rastgele özellikler içerebilir (teknik olarak CA fikrini bozması umrumda değil mi?) Onları haritaya her adımda büyüttüler. Ek kurallar, okyanus iseniz ve çim veya bataklığın yanındaysanız, bataklığa dönüşebilirsiniz. Karın yanındaysanız, buz olabilirsiniz, çöl yakınındaysanız, kuruyabilir ve çöl de olabilirsiniz.

Aynı şey diğer karışımlar için de geçerli olabilir ve teorik olarak donmuş bataklık, tundra veya büyük otlaklardan büyüyen geniş ormanlardan filizlenen ormanlar gibi alt karışımlar bile.

Olasılıklar sınırsızdır ve sürekli de olabilir. Bu kuralların hepsi basit olduğundan, zaman içinde değişen ortamları uygulayabilirsiniz. Yükseklik bilgisi ve dikkate alan kurallar ile gölleri ve nehirleri büyütebilir, dağların ve diğer süslü şeylerin üzerinde ormanların büyümesini engelleyebilirsiniz.

Bu yükseklik haritası, perlin gürültüsünün, elmas karenin veya diğer tüm CA modellerinin sonucu olabilir. Aslında, plaka tektoniklerini modelleyerek, dağları iterek, siperlerde batarak ve hatta nehirlerin manzarayı kanyonlar oluşturmasına izin vererek zaman geçtikçe bu haritayı değiştirebilirsiniz.

Bu tavşan deliği sonsuza dek uzanır.


CA önerisi için yukarı oy. Valmond'un yorumuyla çok iyi örtüşüyor.
Kawa

Bir CA çözümünün bu soruna ne kadar basit olabileceğine şaşıracaksınız. Basit kurallar ve rastgele bir başlangıç ​​haritası dikkat çekici derecede ayrıntılı ve 'gerçekçi' manzaralar oluşturabilir.
DampeS8N

CA prensibi ile gitti. Çöl ve karı ayrı tutan tek şey mutlak pozisyon kuralları olduğu için henüz doğru değil, ama şimdilik güzel yapıyor.
Kawa

1
Kar / çöl sorununa isteğe bağlı bir çözüm, karın çölle buluştuğu farklı bir biyom tipi oluşturmak için bir kural oluşturmaktır. Söyle, bataklık. Sonra bataklık normal şekilde büyümeye devam edebilir. Hala kar / çöl sınırlarınız olabilir, ama gerçekte bu biraz doğal. Aslında, dünyadaki çölün çoğu karla kaplı. - Kısacası, kar herhangi bir komşu çöl ise bataklığa dönüşecek şekilde kurala sahip olabilir.
DampeS8N

11

Kısa cevap ama bu makaleyi gerçekten kontrol etmelisiniz- www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/ Kuru arazi ve biyomların rastgele üretilmesiyle ilgili bir algoritmayı açıklıyor belirlenmiş nem bölgeleri ve rakım bölgelerine göre. Ancak sizin durumunuzda, istediğiniz dağıtım için kendi değerlerinizi ayarlamanız yeterlidir.

(büyük düzenleme) Uygulamanız gereken harita oluşturma kavramları için bunu çok daha net hale getireceğim. Kayan nokta değerlerinde ekran başına 1 birim içeren bir koordinat sistemi kullanın. Bir Voronoi diyagramı yapıyormuşsunuz gibi, bu koordinatlar içinde küçük bir rastgele nokta kümesi oluşturun, ancak aslında rastgele şekilleri yapmayacağız. Bunun yerine diyagram biyomlar yerleştirildikten sonra harita tarafından ima edilecek ve yaklaşık olarak gösterilecektir.

Her nokta, her biyom alanı için merkezdir. Bir noktayı bir biyom ile ilişkilendirmek için kendi kurallarınızı belirleyin. Örneğin, doğuda bir çöl istiyorsanız ve çok güneyde veya kuzeyde değil, belirli bir X değerinden büyük ve belirli bir Y aralığı içindeki tüm noktalarda onları çevreleyen çöl olacaktır.

Her ekranı, XY koordinatlarında (örneğin 4.5, 8.5) ekranın ortasını alarak ve ekranın merkezine en yakın noktayı döndürerek yapılan bu noktalardan biriyle ilişkilendirin.

İşte ekranlar ızgarasında bir şekil diyagramının kaba bir çizimi. Şekilleri çevreleyen çizgilerle gerçekten ilgilenmiyoruz, ancak ekranların şekil bölgelerine nasıl yaklaşmaya başladığını göstermek için oradalar.

Voronoi-ızgara

Her ekran için kendi biyomunu vererek tekrarlayın.


Bunu daha önce görmüştüm, ve benim zevkime göre biraz sivrisinek bazuka.
Kawa

Tamam, bu hafifçe koyuyor. Bu var çok bazuka-on-a-sivrisinek. 8x8 örneği sadece bir örnek değildi - dünya gerçekten bu çözümü haklı çıkaracak kadar büyük olmayacak.
Kawa

Tamam, şimdi anlıyorum. Biyomları haritanın her bir döşemesine göre ayırmanıza gerek yok. Ayrıca, makalenin önerilen konsepti yazar için özel olarak hazırlanmış gibi görünüyor, ancak bazı bölümleri seçilebilir. Cevabımı daha açık hale getirmek için düzenliyorum.
ChrisC

Hala çok karmaşık bir çözüm. Burada kullanılacak yükseklik veya nem yok. Tüm ben gerek tüm arayacaktım da sormak gerekli miktarda çöl, bataklık ve kar yukarı lekeler "dışarı yayılmasını" tür için bir yol "kar çok yakın çöle alınamıyor" gibi bazı ekstra kurallara uyarak oldu için .
Kawa

@Kawa: İçeri girmeye ve kendi çözümünüzü yazmaya hazırsınız gibi görünüyor! Söyleyebileceğim kadarıyla, zihninizde her şeyi görselleştirdiniz, sadece yapın! :) Unutmayın, olduğu gibi dünyanın en büyük harita üreticisi olmak zorunda değildir. ;)
Zolomon

1

Cevap 1:

kar ve çöl yetiştirin, bu yapıldığında, (yasak) kavşakları arayın ve orada (az ya da çok büyük) bataklık büyütün.

Rince ve tekrarlayın.

Cevap 2:

'Blob' kısmı için, yorumumu (istendiği gibi) gönderiye taşıdım:

Eğer yineleme ile büyürseniz, yani. 1 çöl noktası belirleyin ve herhangi bir çöl noktasının etrafında rastgele büyütün (her seferinde rastgele mevcut çöl noktalarından birini alın ve yanlarından birine 1 puan ekleyin (henüz hiçbir şeyin olmadığı)) o zaman blobi bir etki elde etmelisiniz ( örneğin uzun çizgiler yok).

Ayrıca kural ekleyebilir, böylece yakınında herhangi bir kiremit üzerinde kar varsa çöl kiremiti oluşturamazsınız.


Bu, sorunun blobi yönüne tam olarak yardımcı olmaz.
Kawa

2
eğer yineleme ile büyürseniz, yani. 1 çöl noktası belirleyin ve herhangi bir çöl noktasının etrafında rastgele büyütün (her seferinde rastgele mevcut çöl noktalarından birini alın ve yanlarından birine 1 puan ekleyin (henüz hiçbir şeyin olmadığı)) o zaman blobi bir etki elde etmelisiniz ( örneğin uzun çizgiler yok).
Valmond

ayrıca bir kural ekleyebilirsiniz, böylece yakınında herhangi bir kiremit üzerinde kar varsa çöl kiremiti oluşturamazsınız.
Valmond

Valmond, cevap ver.
Kawa
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.