Apa sajakah algoritme yang ideal untuk pembuatan ruang bawah tanah 2D yang seperti Rogue? [Tutup]

47

Apa sajakah sumber daya yang baik mengenai pembuatan konten prosedural dalam konteks pembuatan ruang bawah tanah?

Artikel terdekat yang bisa saya temukan adalah Algoritma untuk menghasilkan labirin 2d , yang bukan yang saya cari. Fitur, seperti kamar dan lorong yang terhubung, sangat ideal.

Terima kasih!

Gabriel Isenberg
sumber
1
Juga, lihat generasi labirin .
Anthony
1
Ada beberapa artikel tentang hal ini di RogueBasin
PATRY Guillaume

Jawaban:

27

Ini kurang lebih telah dijawab sebelumnya. Tempat pemberhentian pertama Anda harus http://pcg.wikidot.com/

Karena saya dituduh ini sama sekali bukan jawaban yang membantu (sungguh? Seseorang meminta sumber daya dan saya mengirim tautan ke wiki yang berurusan dengan subjek? ), halaman wiki ini membahas tentang generator Dungeon secara khusus dan tautan ke berbagai artikel tentang subjek tersebut.
http://pcg.wikidot.com/pcg-algorithm:dungeon-generation

Saya masih merekomendasikan untuk menelusuri keseluruhan wiki, karena pembuatan konten prosedural hanyalah pendekatan yang sangat kreatif dan semua ide semuanya valid. Ini adalah tantangan berpikir lateral - dan yang menyenangkan.

Kaj
sumber
+1 untuk "semua ide valid", tetapi saya ingin menjelaskannya: Semua ide valid, tetapi beberapa akan bekerja lebih baik daripada yang lain. Ide <jargon komputer Anda yang samar-samar di sini> akan berfungsi , dan kemungkinan menjadi apa yang Anda inginkan, tetapi ada cara lain untuk melakukannya yang akan lebih efisien, lebih acak, lebih kohesif, lebih dapat disesuaikan, atau kombinasi apa pun daripadanya, kecuali Anda sangat bagus atau sangat beruntung.
Nic Hartley
20

Saya berhasil mendapatkan level yang cukup baik dengan menggunakan algoritma berikut, berdasarkan pada kotak persegi:

Pertama, buat satu set kamar. Parameter acak akan menentukan ukuran kamar dan jumlahnya. Algoritma adaptif bahkan dapat mendefinisikan beberapa zona yang terbuat dari lorong besar, dan lainnya dari ruangan yang sangat kecil.

Kemudian, Anda perlu memastikan bahwa semua kamar terhubung satu sama lain. Untuk ini, jalankan pathfinder untuk menggali koridor (misalkan, A *) di antara setiap pasangan kamar, memberikan bobot yang dipilih secara acak untuk ruang yang ada (kamar atau koridor lainnya) dibandingkan dengan ruang yang belum diukir (dinding). Jika perbedaan beratnya kecil, maka menggali koridor baru akan cukup murah, dan algoritme akan membuat banyak koridor di antara kamar, dengan banyak kemungkinan untuk berpindah dari satu tempat ke tempat lain. Jika perbedaan beratnya tinggi, maka algoritme akan lebih suka melewati ruang dan koridor yang ada, membuat jalur lebih berliku, dan dengan lebih sedikit pilihan untuk mencapai tujuan tertentu.

Ini memungkinkan Anda, dari sejumlah kecil parameter, untuk menciptakan tingkat tampilan yang sangat berbeda, dari ruang besar yang jarang dengan koridor kecil yang menghubungkannya ke labirin sarang yang tampak dari kamar-kamar yang saling berhubungan erat.

Berikut adalah contoh level yang dihasilkan.

masukkan deskripsi gambar di sini

Berdasarkan algoritma ini, Anda dapat menambahkan hiasan dinding yang tergantung pada zona, membuat koridor lebih kecil atau lebih besar, membuat kamar khusus, dan sebagainya.

small_duck
sumber
10

Jika Anda suka membaca kode dan dapat mem-parsing C #, bolehkah saya menyarankan generator penjara bawah tanah yang digunakan Amaranth roguelike saya? Itu disini . Ini menangani kamar terhubung, fitur yang dapat diperluas, dan beberapa hal bagus lainnya.

Jika Anda menarik ke bawah dan membangun seluruh proyek, ada alat mandiri yang akan menghasilkan dan menggambar ruang bawah tanah sehingga Anda dapat men-tweak dan melihat cara kerjanya.

banyak sekali
sumber
1
Aku bertemu Amaranth beberapa bulan yang lalu, tapi aku sudah lupa nama itu saat aku menjadi generasi dungeon. Terima kasih untuk tautannya!
Gabriel Isenberg
2
Artikel Anda di journal.stuffwithstuff.com/2014/12/21/room-and-mazes juga sangat bagus, saya menggunakan versi modifikasi itu dengan beberapa fitur tambahan seperti mesin gen koridor yang berbeda dll.
Tobsta
3

Semua ini adalah ide bagus. Saya telah mengambil sedikit dari RogueBasin dan pcg.wikidot.com, dan telah menulis implementasi saya sendiri di C #.

Saya benar-benar menyukai tampilan alami seperti tingkat gua yang dapat dihasilkan dengan menggunakan metode automata seluler. Untuk memahami apa yang saya maksud dengan metode automata seluler, bayangkan Permainan Kehidupan Conway. Kode saya menggunakan apa yang disebut metode 4-5, yang berarti ubin akan menjadi dinding jika itu adalah dinding dan 4 atau lebih dari sembilan tetangganya adalah dinding, atau jika bukan dinding dan 5 atau lebih tetangga adalah dinding. Saya mulai dengan mengisi peta secara acak dengan dinding atau ruang, kemudian mengunjungi setiap posisi x / y secara iteratif dan menerapkan aturan 4-5. Untuk membantu meringankan masalah pembentukan gua-gua yang terisolasi, setelah mengisi peta secara acak, saya mengosongkan garis horizontal di peta, mengatur setiap ubin ke ruang alih-alih dinding, sebelum menerapkan aturan 4-5 untuk setiap ubin.

Anda dapat melihat kode untuk kelas pengendali peta saya, dan setiap perbaikan yang saya buat di sini

atau versi yang diarsipkan di sini .

Adam White
sumber
2
Pertanyaan ini memiliki banyak suara dan akan lebih baik, jika Anda bisa membuka jawaban ini sedikit lebih banyak. Tautan cenderung mati, akhirnya, jadi cobalah menjawabnya, sehingga tidak perlu mengklik tautan. Bagaimana cara kerjanya? Apa ide utamanya? Apa bedanya dengan algoritma lainnya?
Katu
1
Tautan itu benar-benar mati.
htmlcoderexe
2

Saya pikir tempat yang paling langsung untuk menemukan ini adalah untuk benar-benar melihat kode sumber. Dua pemain utama di lapangan, Angband dan Nethack, keduanya open-source.

Ian Schreiber
sumber
3
Meskipun open-source, dari apa yang saya ingat tidak ada sumber yang sangat terdokumentasi dengan baik atau sumber transparan atau tertulis-untuk-belajar-dari sumber. Mereka mudah untuk meretas tweak, tetapi secara keseluruhan lebih sulit untuk grok.
Tom Hudson
Mungkin aslinya bukan referensi yang bagus, tetapi ada banyak varian, beberapa di antaranya sangat bagus. Misalnya, pengembang UnAngband membuat sejumlah perangkat tambahan untuk generasi penjara bawah tanah dan menulis serangkaian posting blog yang luar biasa , sehingga Anda pasti dapat menggunakan ide jika bukan kode.
congusbongus
Sumber NetHack terkenal sulit dipahami. Generator penjara bawah tanah (SATU dari mereka) tersebar di tidak kurang dari TIGA file C, dan sekitar 15 fungsi
Élektra