Yanıtlar:
Labirent yapmanın birçok yolu vardır. Bunların ve açıklamalarının burada büyük bir listesi var: http://www.astrolog.org/labyrnth/algrithm.htm
Sanırım "Mükemmel" altında açıklananı kullandım.
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:
Ve onlardan, biz:
Vikipedi, labirent oluşturma konusunda harika bir kaynağa sahip . Ben ettik kullanım prim algoritması randomize harika sonuçlar ile. Bölünme algoritması ilginç görünüyor ama ben hiç kullanmadım.
İşte işte prim'in işte wikipedia örneği.
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.
Roguelike gelişiminde kullanılan bazı algoritmalara da bir göz atacağım. Rogue Basin'de iyi bir başlangıç kaynağı var
Burada iyi bir koşu var: https://journal.stuffwithstuff.com/2014/12/21/rooms-and-mazes/
Temel adımlar şunlardı:
Burada kodu: https://github.com/munificent/hauberk/blob/db360d9efa714efb6d937c31953ef849c7394a39/lib/src/content/dungeon.dart
Hangisini kullandığımı sordun, ben de cevaplayacağımdan emin olacağım. Rootbeer Oyunlarındaki labirent oyunumda Recursive Backtracker Algoritmasını kullandım .
Bu algoritmayı kullandığımın bir kanıtı, lütfen çalışmamın reklamı olarak görmeyin.