2d labirent oluşturmak için algoritma [kapalı]


Yanıtlar:



8

Kruskal Algoritmasının yarattığı sıkıca sarılmış labirentleri tercih ediyorum.

Kruskal Algoritmasının standart açıklaması, grafikteki konumları konum gruplarından ayırt etmekte başarısız olduğu ve bunun yanı sıra acemileri birbirine karıştıran belirsizliklerin tanımlanmasına yol açan veri yapısı seçimiyle ilgili bir püf noktasına dayanmakta uygun olmaması nedeniyle uygun değildir. Dolayısıyla Kruskal'ın termonolojisini reddediyorum.

Aşağıdaki şartları kullanacağım:

  • grafik
    • labirentin kendisi.
  • düğüm
    • labirentte bir yer. Kare bir labirentte, bu kare bir hücredir.
  • kenar
    • iki düğüm arasındaki bağlantı. Kare bir labirentte, bu 1 uzunluklu bir çubuktur.
  • Ağaç grubu
    • ağaç olarak düzenlenmiş, boş olabilen bir dizi düğüm

Ve onlardan, biz:

  1. Ağaç grupları içeren Grafik Ağacı Grubu için bir grup GTG'si oluşturun
  2. Doldur GTG bir ağaç grubu labirentiniz her konum için, bir düğüm içeren
  3. Kenar kümesi oluşturma E
  4. Doldur E labirentiniz her geçerli kenarlı
  5. Orada birden fazla grup iken GTG ve süre E boş değil:
  6. E'den rastgele bir kenar rE seçin
  7. Bitiş noktaları belirleyin p1 ve p2 arasında rE
  8. Kaldır rE dan E
  9. Hangi p1 ve p2 gruplarının ait olduğunu kontrol edin ( sırasıyla p1g ve p2g ).
  10. Eğer p1g ve p2g farklıysa, p1g ve p2g ağaç grubuna p1 -> p2 ' de katılın ve tüm ağaç sahipliğini bir ağacın diğerine yeniden yazın;
  11. 5. adıma dönün.
  12. Kenarınız kalmadıysa ancak birden fazla ağaç kalmadıysa, grafik bağlı değildir veya bir hata vardır.
  13. Tek bir ağacınız varsa, tam bir ilmeksiz labirentiniz olur.

1
Bir GUI projemiz vardı ve GUI'ye rastgele bir 2D labirent inşa etmek zorunda kaldık. Aynen böyle yaptım ve Kruskals lol kullandığımı hiç anlamadım. Kesinlikle bir grafik kullandığımı fark ettim.
Bryan Harrington,


1

Kolay yollardan biri kuzey duvarları ve batı duvarlarının bir listesini çıkarmak, sonra da buna izin vermektir. Her odaya bir numara ver. Daha sonra, iki oda aynı sayıya sahip olmadığı sürece, listedeki duvarlardan birini havaya uçurun, sonra sayılardan birini aynı numaraya sahip diğer odalara dayayın. Duvarlar tükenene kadar devam et. Bu, dikdörtgen labirentlerde veya gerçekten de "potansiyel olarak bağlı odaların" listesini verebileceğiniz başka bir labirentte işe yarar. Artı, programlaması oldukça kolay.


1

Roguelike gelişiminde kullanılan bazı algoritmalara da bir göz atacağım. Rogue Basin'de iyi bir başlangıç ​​kaynağı var



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.