Saya dan tim sedang mengerjakan permainan pembuat pabrik yang memberikan pemain pabrik acak pada awal permainan. Untuk mencoba memastikan ada rasa "keadilan," idealnya pabrik yang dihasilkan secara acak akan memiliki area dalam beberapa unit (nilai placeholder) 30.
Ini relatif sederhana untuk menulis generator persegi panjang acak dasar untuk memenuhi spesifikasi ini, tetapi tujuan kami adalah agar pabrik menjadi lebih kompleks, mungkin terdiri dari 2, 3, atau bahkan 4 persegi panjang berpotongan, menghasilkan bentuk yang lebih kompleks (pikirkan L, Bangunan berbentuk U, dan O).
Saya sudah mencoba membuat persegi panjang acak dan kemudian menggunakan aljabar dasar untuk mengisi persegi panjang ke-2, tapi sejauh ini saya tidak beruntung menerapkan lebih dari 2 persegi panjang, dan bahkan kemudian saya tidak senang dengan hasilnya hanya untuk desain 2 persegi panjang. .
Beberapa info yang lebih relevan: 2D top down Beberapa mekanik adalah gaya faktorio sehingga kamar harus memiliki panjang dan lebar yang masuk akal untuk memungkinkan ruang untuk mesin Saat ini di Jawa dan Lua (dapat menggunakan perpustakaan built in baik jika diperlukan)
Terima kasih sebelumnya!
EDIT: Ketika saya mengatakan output "baik" atau "buruk", output yang buruk adalah output yang memiliki ruang yang tidak dapat digunakan oleh pemain. Batas bentuk pabrik di mana pemain dapat menempatkan mesin pabrik seperti ban berjalan. Idealnya, pabrik tidak boleh memiliki area yang hanya 1-2 blok lebar, bentuknya tidak boleh satu atau dua persegi panjang besar dengan garis 1-2 blok "menggantung" ke satu sisi. Output yang baik adalah di mana semua ruang lantai "bisa dikerjakan", sehingga semua area memiliki lebar setidaknya 3-4 blok. Output yang baik tidak selalu harus kompleks (1 atau 2 persegi panjang tidak apa-apa), tetapi harus memiliki peluang yang adil jika terdiri dari lebih dari 1-2 persegi panjang.
Mengingat batasan "semua area setidaknya memiliki lebar 3-4 blok" ide pertama yang muncul di benak saya adalah sesuatu seperti berikut:
Ide dasarnya adalah, mengingat Anda ingin semua area memiliki setidaknya ukuran tertentu, hanya bekerja di area dengan ukuran tersebut. Lebih umum, jika Anda ingin sesuatu menjadi benar dari semua output yang dihasilkan, lihat apakah itu dapat dibuat benar dari semua output yang dihasilkan sebagian.
sumber
Pertimbangkan untuk menggunakan booleans NOT dan UNION dan memilih di antara mereka secara acak.
Kemudian, saya akan menghitung luas dan skala itu naik atau turun untuk lebih cocok dengan ukuran perkiraan yang Anda cari, dan kemudian menguji bahwa tidak ada dimensi kurang dari jumlah minimum yang diperlukan.
sumber