Asansörler ile ev harita labirent çözülebilir sağlamak?


13

Oyunumda bir evin zeminlerini yandan görüyoruz ve kahraman asansör alabilir - oka bağlı olarak bir asansör ya yukarı (bir sonraki asansöre yukarı doğru) ya da aşağı (bir sonraki asansöre doğru) yükselir. ve her zaman bir çift tam iki asansör bağlı. Kahramanın dikey olarak hareket edebilmesinin tek yolu budur, ancak yatay olarak serbestçe hareket edebilir. Ev haritası, farklı öğelerden oluşan rastgele bir 11x5 ızgara ve en solda, en sağda ve bazen iki orta konumdan birinde geçilmez duvarlar:

asansör örneği

Benim sorum: Haritanın her zaman rastgele ama her zaman çözülebilir olmasını ve alt katın sol tarafından başlayan kahramanın her zaman üst katta yukarı doğru işaret eden herhangi bir asansörle bırakabilmesini nasıl sağlayabilirim?

Değeri için geliştirme için Lua dilini kullanıyorum. Çok teşekkürler!

Yanıtlar:


14

Yapmak istediğiniz şey, her düğüm bir asansör konumu olacak şekilde bir Grafik oluşturmaktır ve aralarındaki kenarlar, orada yürüyebileceğiniz / kaldırabileceğiniz anlamına gelir. Grafiği oluşturduktan sonra, başlangıç ​​düğümünden bitiş düğümüne geçip geçemeyeceğinizi görmek için dfs / bfs kullanabilirsiniz.

Yukarıdaki örneği kullanarak grafiğin nasıl görüneceğine dair bir resim yaptım. Yeşil daireler orada bir asansör olduğu anlamına gelir ve yeşil çizgiler düğümden düğüme seyahat edebileceğiniz anlamına gelir.

düğümleri


Teşekkürler, bu çok faydalı! Sorumda haritanın da ilk etapta oluşturulması gerektiğini vurgulamalıydım. Şimdi düşündüğüm şey, tamamen rasgele kaldırılmış asansör / duvar kombinasyonları tekrar tekrar üretmek ve çözülebilirliklerini kontrol etmek yerine, kahramanın kahramanın yaptığı gibi evde adım atmasını sağlamaktan daha kolay olmayabilir. rastgele asansörler ve kapılar oluşturmak (örneğin, rastgele kaldırma mesafeleri ve sol-sağ dönüşler alarak duvarlar ekleyerek). "0, 4 veya 8 tur sağa yürüyün; yukarı doğru bir asansör oluşturun, 1 ila 4 kata
çıkın

@PhilippLenssen Bu aslında bir grafik üzerinde labirent üretimi için "rastgele derinlik-ilk arama" yaklaşımıdır.
Kevin Reid

5

Sahip olduğunuz şey ile normal bir labirent arasındaki fark, basitçe bitişik olmayan bağlantıların dikey olarak olmasıdır. Bakmanız gereken şey grafik tabanlı labirent oluşturma algoritmalarıdır . Sıradan bir 2B labirentinden daha büyük bir "bitişik odalar" veya "olası duvarlar" setine sahip olmanız yeterlidir, zira zaten araya giren bir asansöre sahip olmayan dikey olarak hizalanmış her kat ızgarası hücre çifti bitişiktir. Bunu, belirli kaldırma kenarlarının eklenmesinin olası diğer kaldırma kenarlarını yanlışlıkla sildiği bir grafik olarak modelleyebilirsiniz; bazı algoritmalar bununla karıştırılabilir, ancak diğerleri karıştırılamaz.

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.