Algoritma untuk menghasilkan labirin 2d [ditutup]

27

Algoritma apa yang telah Anda gunakan di masa lalu untuk menghasilkan labirin 2d sederhana?

Jdeseno
sumber

Jawaban:

21

Ada banyak cara membuat labirin. Ada daftar besar mereka dan deskripsi mereka di sini: http://www.astrolog.org/labyrnth/algrithm.htm

Saya pikir saya menggunakan yang dijelaskan di bawah "Sempurna".

Tetrad
sumber
Sumber daya yang sangat bagus, persis apa yang saya cari.
jdeseno
Suka situs itu, menggunakannya bertahun-tahun lalu.
zanlok
8

Saya lebih suka labirin luka ketat yang diciptakan Algoritma Kruskal.

Deskripsi standar Algoritma Kruskal tidak sesuai karena gagal membedakan lokasi dalam grafik dari grup lokasi, sementara mengandalkan permainan kata-kata tentang pilihan struktur data, yang mengarah ke ambiguitas deskripsi yang membingungkan para pemula. Karena itu saya menolak termonologi Kruskal.

Saya akan menggunakan ketentuan berikut:

  • Grafik
    • labirin itu sendiri.
  • Node
    • lokasi di labirin. Pada labirin persegi, ini adalah sel kuadrat.
  • Tepi
    • koneksi antara dua node. Di labirin persegi, ini adalah bar 1-panjang.
  • Grup Pohon
    • satu set node, yang mungkin kosong, disusun seperti pohon

Dan dari itu, kita mendapatkan:

  1. Buat grup GTG , untuk Grup Pohon Grafik , yang berisi grup pohon
  2. Isi GTG dengan satu grup pohon yang berisi satu simpul, untuk setiap lokasi di labirin Anda
  3. Buat set tepi E
  4. Isi E dengan setiap tepi yang valid di labirin Anda
  5. Meskipun ada lebih dari satu grup di GTG , dan sementara E tidak kosong:
  6. Pilih rE tepi acak dari E
  7. Identifikasi titik akhir p1 dan p2 dari rE
  8. Hapus rE dari E
  9. Memeriksa kelompok p1 dan p2 milik ( p1g dan P2G masing-masing).
  10. Jika p1g dan p2g berbeda, bergabung dengan grup pohon p1g dan p2g di p1 -> p2 , dan tulis ulang semua kepemilikan grup dari satu pohon ke pohon lain, sehingga bergabung dengan pohon.
  11. Kembali ke langkah 5.
  12. Jika Anda tidak memiliki ujung yang tersisa, tetapi lebih dari satu pohon, grafik tidak terhubung atau ada bug.
  13. Jika Anda hanya memiliki satu pohon, Anda memiliki labirin tanpa loop yang lengkap.
John Haugeland
sumber
1
Kami memiliki proyek GUI dan kami harus membangun labirin 2D acak pada GUI. Ini persis bagaimana saya melakukannya dan saya tidak pernah menyadari bahwa saya menggunakan Kruskals lol. Saya benar-benar sadar telah menggunakan grafik.
Bryan Harrington
1

Wikipedia memiliki sumber daya yang hebat tentang pembuatan labirin . Saya telah menggunakan algoritma prims acak dengan hasil yang bagus. Algoritma pembagian terlihat menarik tetapi saya belum pernah menggunakannya.

Berikut adalah contoh wikipedia tentang prim di tempat kerja.

Gambar Wikipedia

deft_code
sumber
1

Salah satu cara mudah adalah dengan membuat daftar tembok utara dan dinding barat, lalu ubah menjadi mereka. Berikan nomor masing-masing kamar. Kemudian meledakkan salah satu dinding dalam daftar, selama kedua kamar tidak memiliki nomor yang sama, kemudian menyebar salah satu nomor ke semua kamar lain dengan nomor yang sama. Terus sampai Anda kehabisan dinding. Ini berfungsi untuk labirin persegi panjang atau, sungguh, labirin lainnya di mana Anda dapat memberikan daftar "kamar yang berpotensi terhubung". Plus, ini cukup mudah untuk diprogram.


sumber
1

Saya juga akan melihat beberapa algoritma yang digunakan dalam pengembangan Roguelike. Ada sumber daya awal yang baik di Rogue Basin

Casey
sumber
0

Anda bertanya yang mana yang saya gunakan, jadi saya akan memastikan untuk menjawabnya. Saya menggunakan Algoritma Backtracker Rekursif dalam permainan labirin saya di Rootbeer Games .

Ini bukti bahwa saya menggunakan algoritma, tolong jangan melihatnya sebagai iklan dari pekerjaan saya.

BenMaddox
sumber