Saya membuat game dengan dunia yang dihasilkan secara prosedural yang dibuat pada awal permainan, terdiri dari beberapa area yang diwakili oleh kisi-kisi (katakanlah, 8x8, 9x6, ukuran idealnya akan berubah-ubah). Area-area ini seharusnya terhubung satu sama lain melalui daftar ketergantungan.
Koneksi ada ketika setidaknya 3 spasi dari kisi itu terekspos di antara kedua area tersebut. Di sel tengah area koneksi 3 ruang adalah pintu antara area:
Saya sudah mencoba mencari cara untuk menghubungkan mereka, tetapi menjadi semakin kompleks semakin banyak area yang perlu Anda pertimbangkan pada saat yang sama.
Saya sudah mencoba beberapa prototipe kertas dan walaupun ini adalah proses yang sangat sederhana ketika melakukannya secara visual, saya belum menemukan serangkaian ekspresi matematika yang baik yang memungkinkan saya untuk menempatkan kamar dengan efisiensi yang sama dengan kode.
Berikut ini contoh "sederhana" yang sedang saya perjuangkan:
- Area 'a' perlu dihubungkan ke 'b' dan 'c'
- Area 'b' perlu dihubungkan ke 'a' dan 'd'
- Area 'c' perlu dihubungkan ke 'a' dan 'd'
- Area 'd' harus terhubung ke 'b' dan 'c'
Pertimbangkan, untuk kesederhanaan, kami menempatkan kamar berdasarkan urutan penampilan mereka di daftar (Saya sudah mencoba yang lain). Jadi saya mendekati ini sebagai algoritma Generasi Bawah Tanah prosedural prosedural Anda.
Kami menempatkan 'a' di mana saja di papan tulis, karena ini adalah area pertama. Selanjutnya, kita memilih dinding secara acak dan, karena tidak ada yang terhubung ke dinding itu, kita dapat menempatkan 'b' di sana:
Sekarang kita perlu menempatkan 'c', tetapi 'a' sudah ada di papan, dan memiliki dinding yang ditempati, jadi kami memutuskan untuk meletakkannya di dinding lain. Tetapi tidak setiap penempatan akan berhasil, karena 'd' akan muncul dan perlu dihubungkan ke 'b' dan 'c' juga:
Saya mencoba batasan yang mungkin bahwa 2 kamar yang memiliki set dependensi yang sama tidak boleh berada di dinding yang berlawanan, tetapi bahkan itu tidak menjamin kesuksesan:
Dan dalam kasus lain, di mana area memiliki ukuran yang berbeda, berada di dinding yang berlawanan dapat bekerja:
Juga, tidak mempertimbangkan dinding bekas adalah asumsi yang salah karena mengesampingkan solusi yang valid:
Saya sudah mencoba mencari penelitian tentang algoritma Generasi Prosedural lainnya atau yang serupa, seperti Optimal Rectangle Packing dan algoritma Layout Grafik, tetapi biasanya algoritma tersebut tidak memperhitungkan setiap kendala dari masalah ini dan sulit untuk dicampur bersama.
Saya memikirkan banyak pendekatan, termasuk menempatkan area dan mundur sampai penempatan yang cocok ditemukan, tetapi mereka tampaknya sangat tergantung pada coba-coba dan mahal dalam hal perhitungan. Tetapi, mengingat penelitian yang luas tentang dua masalah terakhir yang saya sebutkan, mungkin itu satu-satunya / solusi terbaik?
Saya hanya ingin melihat apakah seseorang memiliki masalah yang sama di masa lalu atau bersedia membantu saya mencari tahu dan memberi saya beberapa petunjuk tentang di mana saya harus memulai dengan algoritma. Atau, jika gagal, saya harus melihat ke dalam melonggarkan kendala yang telah saya tetapkan.