Rastgele oluşturulan zindanlarla bir oyun tasarlıyorum. Bunu bağlı, yönlendirilmemiş bir grafik olarak görmek istiyorum düğümlerin oda ve kenarların kapı veya koridor olduğu . Sonra zindan girişi olarak bir "yan" düğümü seçiyorum, bu giriş ve diğer tüm düğümler arasındaki mesafeyi hesaplıyorum ve en uzak düğümlerden birinin zindanın "hedefi" olduğuna karar veriyorum (hazinenin yeri, patron, prenses, vb.).
Son zindan topografisini üretmenin 2 yolunu gördüm:
- Önce rastgele bir grafik oluşturun, sonra 2d dünyasını kenar bağlantılarına saygı göstererek rastgele konumlardaki odalarla doldurmaya çalışın. Oda üretimi "kilitli" oda imkansız yerlerde sığdırmak için çalışıyor olabilir çünkü bu bazen zor olacağını düşündüm.
- İlk odaları oluşturun, rastgele yerleştirildikleri yere yerleştirin, ardından sonucu düğümlere ve kenarlara eşleyin. Bunu denemeye karar verdim.
Benim fikrim:
- İlk önce tüm zindanı içerecek büyük bir oda yaratın.
- Büyük odayı rastgele bir yerde, büyük odayı farklı alandaki 2 küçük odaya bölen bir duvar koyun.
- Sonra her odayı çok küçük olana kadar veya toplam oda sayısı maksimuma (veya başka bir koşula) ulaşıncaya kadar ikiye bölmeye devam ediyorum. Her yeni oda bir düğümdür.
- Bittiğinde, her odayı kontrol ediyorum ve diğer düğümleri buluyorum, 2 düğümü bir kenara bağlı olarak işaretliyorum.
Bu şekilde, tüm odaların 2B dünyasında olası bir konuma sahip olmasını ve bağlı bir grafikle doğru şekilde eşlenmesini sağlarım.
Benim sorunum çok fazla kapı ve oda bağlayan koridorlar olmasıdır.
Bu yüzden bağlı yönlendirilmemiş bir grafiğin kenar sayısını azaltan , ancak sonunda bağlı (tüm düğümlere ulaşılabilir durumda kalan) bir algoritma istiyorum .