Saya datang dengan metode untuk menghasilkan peta ruang bawah tanah sederhana secara rekursif dengan mulai dengan satu ruangan dan secara rekursif menghubungkan kamar-kamar baru yang berdekatan secara acak ke sana.
Peta direpresentasikan sebagai array dua dimensi di mana setiap sel berisi nilai 0-15. 0 mewakili tidak ada ruang sementara setiap arah diwakili oleh utara = 1, timur = 2, selatan = 4, barat = 8.
Saya ingin memulai dengan satu ruangan non ([[0]]) dan kemudian memperluas array 2d sesuai kebutuhan agar sesuai dengan peta yang dihasilkan. Kesulitan yang saya hadapi dengan pohon seperti rekursi ini adalah bahwa jika array harus tidak tergeser untuk menambahkan baris dan kolom ke kiri dan atas peta, saya harus menyesuaikan posisi fungsi saat ini, baris dan kolom apa yang ada di . Ini membuatnya sehingga cabang-cabang yang terpisah tidak menyadari penyesuaian indeks array dari cabang-cabang lain, hanya fungsi anak-anak mereka yang akan tahu karena mereka memiliki posisi yang disesuaikan diteruskan kepada mereka sebagai argumen baris dan kolom mereka.
Apakah ada cara untuk melakukan ini? Saya mencoba menyimpan nilai offset baris dan kolom di luar rekursi, tetapi tidak berhasil karena suatu alasan.
Saya melakukan hal serupa, dengan Python. (Atau setidaknya bagian elastis).
Saya memiliki kamus (x, y) pemetaan tupel ke sel. Dalam kode semu:
Tabel hash akan sangat baik untuk hal semacam ini.
sumber
Solusi upaya minimum adalah memilih ukuran maksimum (X dan Y) yang Anda ingin mencapai penjara bawah tanah, meletakkan titik awal Anda di tengah itu, dan jangan biarkan pertumbuhan di luar itu. Tidak perlu melakukan perubahan apa pun. Tergantung pada batas tertentu yang dapat diterima, tentu saja.
sumber
Anda ingin menggunakan grafik daripada array 2D.
Setiap kamar akan menjadi simpul dalam grafik dan tahu kamar mana yang berdekatan dengannya:
Dengan begitu Anda tidak perlu menentukan seberapa besar peta Anda bisa menjadi.
Koordinat x, y dapat digunakan sebagai kunci unik dalam hashmap untuk akses cepat ke setiap kamar. Menambahkan ruang baru hanya akan menambahkan entri ke daftar Kamar yang berdekatan di dekatnya.
Grafik juga bagus untuk algoritma pencarian jalur, jika Anda membutuhkannya.
sumber