Peta sederhana, empat bioma, dan cara mendistribusikannya

16

Inilah ide dasarnya: Saya memiliki permainan Rogue-ish, mungkin Dwarf Fortress-ish, dengan dunia luar yang dibuat secara acak dan beberapa pintu masuk ruang bawah tanah tersebar di sekitarnya. Saya sudah memiliki ruang bawah tanah pada dasarnya tertutup, tapi saya terjebak pada aspek dunia luar.

Said overworld, yang dianggap sebagai peta layar 2D, mungkin memiliki distribusi yang mungkin seperti gumpalan dari empat tema atau bioma yang berbeda - padang rumput, gurun, salju dan rawa, masing-masing dengan jumlah layar sendiri. Katakanlah peta tersebut berukuran 8x8, yang memberikan 64 layar unik. Setengah dari itu bisa berupa padang rumput, seperempat gurun, dan rawa dan salju masing-masing mendapat seperempat:

maket peta dunia yang mungkin dengan kota-kota dan lokasi awal, tetapi tidak ada pintu masuk ruang bawah tanah

Tampaknya pengurangan palet telah membuat salju warna sama dengan rawa. Awalnya, ada delapan layar salju di sudut bawah, dan area rawa delapan layar agak terhuyung di tengah. Maaf, tapi abaikan penanda lokasi.

Yang terbaik yang bisa saya dapatkan adalah beberapa bentuk ular, dan cukup sering dengan kombinasi yang tidak masuk akal seperti padang pasir yang menembus salju (atau sebaliknya). Saya tidak bisa seumur hidup saya mencari cara untuk mendapatkan itu bagus dan blobby, apalagi itu masuk akal secara iklim (?). Jadi bagaimana cara menghasilkan peta bioma seperti di maket?

Oke, atas permintaan: dunia benar-benar tidak jauh lebih besar dari contoh itu, dan yang saya butuhkan hanyalah cara untuk menyebarkan gumpalan yang menentukan penampilan tematik, dengan batasan ekstra bahwa salju tidak dapat menyentuh gurun. Layar tidak menggulir, dan jika layar diatur ke "gurun", tidak akan ada rumput di mana pun di atasnya.

Kawa
sumber
Apakah Anda bersedia menggunakan perpustakaan pihak ketiga, atau Anda ingin membuat kode solusi Anda sendiri?
William Mariager
Saya lebih suka coding saya sendiri.
Kawa
Ukuran bioma sudah diperbaiki?
kaoD
Bisakah Anda mengedit posting dengan daftar poin dari aturan persis yang Anda inginkan untuk diikuti oleh generasi peta? Akan lebih mudah bagi kita untuk mengatasi masalah dengan mengetahui dengan tepat apa yang kita inginkan.
William Mariager
Diedit, dan ukuran bioma, well, saya pergi dengan mereka misalnya. Untuk dunia 16x16, Desert bisa masih menjadi keempat daerah dan sebagainya, tapi itu sebagian besar untuk menjamin daerah-daerah tertentu akan berada di sana.
Kawa

Jawaban:

8

Ada banyak cara untuk menguliti kucing ini, namun salah satu yang lebih menarik adalah menggunakan automata seluler . Mulailah dengan kotak kosong Anda dan tambahkan beberapa sel awal benih di lokasi acak. Ini harus dari beberapa jenis dasar bioma non-campuran. Katakan: Rumput, Gurun, Salju, Samudra.

Berdasarkan aturan pertumbuhan desain Anda sendiri, yang dapat menampilkan beberapa keacakan (saya tidak peduli bahwa itu secara teknis merusak ide CA, kan?) Minta mereka menanamkan setiap langkah ke dalam peta. Aturan tambahan bisa sedemikian rupa sehingga jika Anda berada di lautan dan berada di sebelah rumput atau rawa, Anda bisa berubah menjadi rawa. Jika Anda berada di sebelah salju, Anda bisa menjadi es, jika berada di dekat gurun, Anda bisa mengering dan menjadi gurun juga.

Hal yang sama mungkin berlaku untuk campuran lainnya, dan secara teori bahkan sub-campuran seperti rawa beku, atau tundra, atau hutan tumbuh dari hamparan hutan besar yang tumbuh dari hamparan luas padang rumput.

Kemungkinannya tidak terbatas, dan juga bisa berkelanjutan. Karena semua aturan ini sederhana, Anda dapat menerapkan lingkungan yang berubah seiring waktu. Dikombinasikan dengan informasi ketinggian, dan aturan yang memperhitungkannya, Anda dapat menumbuhkan danau dan sungai, menghalangi pertumbuhan hutan di atas pegunungan dan hal-hal mewah lainnya.

Peta ketinggian itu bisa merupakan hasil dari perlin noise, atau diamond square, atau bahkan seluruh model CA lainnya. Bahkan, Anda dapat memodifikasi peta itu seiring berjalannya waktu juga dengan memodelkan lempeng tektonik, mendorong gunung, tenggelam di parit, dan bahkan membiarkan sungai menurunkan lanskap menciptakan ngarai.

Lubang kelinci ini memanjang selamanya.

DampeS8N
sumber
Upvoting untuk saran CA. Itu cocok dengan komentar Valmond.
Kawa
Anda akan terkejut betapa sederhana solusi CA untuk masalah ini. Aturan sederhana dan peta awal acak dapat menghasilkan lanskap tampak sangat rinci dan 'realistis'.
DampeS8N
Pergi dengan prinsip CA. Ini belum sepenuhnya benar karena satu-satunya hal yang membedakan gurun dan salju adalah beberapa aturan posisi absolut, tetapi itu berlaku dengan baik untuk saat ini.
Kawa
1
Salah satu solusi opsional untuk masalah salju / padang pasir adalah memiliki aturan untuk menciptakan jenis bioma yang berbeda di mana salju bertemu gurun. Katakan, rawa. Kemudian rawa dapat terus tumbuh seperti biasa. Anda mungkin masih memiliki batas salju / gurun, tetapi pada kenyataannya itu agak alami. Bahkan, sebagian besar padang pasir di bumi tertutup salju. - singkatnya, salju mungkin memiliki aturan sehingga jika ada tetangga yang gurun, ia berubah menjadi rawa.
DampeS8N
11

Jawaban singkat tetapi Anda harus benar-benar memeriksa artikel ini di www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/ Ini menjelaskan satu algoritma pada generasi generasi acak lahan kering dan bioma berdasarkan zona kelembaban yang ditunjuk dan daerah ketinggian. Tetapi dalam kasus Anda, cukup tetapkan nilai Anda sendiri untuk distribusi yang Anda inginkan.

(suntingan besar) Saya akan membuatnya lebih jelas untuk konsep pembuatan peta apa yang perlu Anda terapkan. Gunakan sistem koordinat dengan 1 unit per layar, dalam nilai floating point. Hasilkan satu set kecil titik acak dalam koordinat ini, seolah-olah Anda membuat diagram Voronoi tetapi kami tidak akan benar-benar membuat bentuk acak. Sebaliknya diagram akan tersirat dan didekati oleh peta setelah bioma ditetapkan.

Setiap titik adalah pusat untuk setiap area bioma. Tetapkan aturan Anda sendiri untuk mengaitkan suatu titik dengan bioma. Misalnya jika Anda ingin gurun di timur dan tidak terlalu jauh ke selatan atau utara, semua titik yang lebih besar dari nilai X tertentu dan dalam rentang Y tertentu akan memiliki gurun yang mengelilinginya.

Kaitkan setiap layar dengan salah satu titik ini, yang dilakukan dengan mengambil bagian tengah layar dalam koordinat XY (katakanlah 4.5, 8.5) dan mengembalikan titik terdekat ke pusat layar.

Berikut gambar kasar diagram bentuk pada kisi layar. Kami tidak benar-benar peduli dengan garis yang mengelilingi bentuk, tetapi ada di sana untuk menggambarkan bagaimana layar mulai mendekati daerah bentuk.

Voronoi-grid

Ulangi untuk setiap layar, berikan masing-masing bioma sendiri.

ChrisC
sumber
Saya pernah melihatnya sebelumnya, dan rasanya agak terlalu bazooka-on-a-nyamuk untuk seleraku.
Kawa
Baiklah oke, itu yang biasa saja. Ini sangat bazooka-on-a-nyamuk. Contoh 8x8 bukan hanya contoh - dunia benar-benar tidak akan cukup besar untuk membenarkan solusi itu.
Kawa
Oke, saya mengerti sekarang. Anda benar-benar tidak perlu membedakan bioma dengan setiap ubin peta. Juga, konsep yang diusulkan artikel itu tampaknya dibuat khusus untuk penulis tetapi beberapa bagian dapat diambil. Saya sedang mengedit jawaban saya untuk membuatnya lebih jelas.
ChrisC
Masih terlalu kompleks solusinya. Tidak ada ketinggian atau kelembaban untuk digunakan di sini. Yang saya butuhkan, yang ingin saya tanyakan adalah cara untuk semacam "menyebar" gumpalan gurun, rawa, dan salju hingga jumlah yang diperlukan, mengikuti beberapa aturan tambahan seperti "salju tidak bisa terlalu dekat dengan gurun" .
Kawa
@ Kawa: Sepertinya Anda siap menggali dan menulis solusi Anda sendiri! Dari apa yang bisa saya katakan, Anda memiliki semuanya divisualisasikan dalam pikiran Anda, LAKUKAN SAJA! :) Ingatlah bahwa itu tidak harus menjadi penghasil peta utama di dunia, asalkan terlihat seperti itu. ;)
Zolomon
1

Jawaban 1:

tumbuh salju dan gurun, ketika itu dilakukan, mencari persimpangan (dilarang) dan tumbuh (lebih atau kurang besar) rawa di sana.

Bangkit dan ulangi.

Jawaban 2:

Untuk bagian 'gumpalan', saya memindahkan komentar saya (seperti yang diminta) ke pos:

Jika Anda tumbuh dengan iterasi, yaitu. menetapkan 1 titik gurun dan kemudian tumbuh secara acak di sekitar titik gurun (setiap kali secara acak mengambil salah satu titik gurun yang ada dan menambahkan 1 titik di salah satu sisinya (di mana tidak ada apa-apa)) maka Anda harus mendapatkan efek goyah ( tidak ada garis panjang misalnya).

Anda juga dapat menambahkan aturan sehingga Anda tidak dapat membuat ubin gurun jika ada salju di ubin mana pun di sekitarnya.

Valmond
sumber
Itu tidak benar-benar membantu dengan aspek blobby masalah.
Kawa
2
jika Anda tumbuh dengan iterasi, yaitu. menetapkan 1 titik gurun dan kemudian tumbuh secara acak di sekitar titik gurun (setiap kali secara acak mengambil salah satu titik gurun yang ada dan menambahkan 1 titik di salah satu sisinya (di mana tidak ada apa-apa)) maka Anda harus mendapatkan efek goyah ( tidak ada garis panjang misalnya).
Valmond
Anda juga dapat menambahkan aturan sehingga Anda tidak dapat membuat ubin gurun jika ada salju di ubin mana pun di sekitarnya.
Valmond
Valmond, tuliskan itu dalam jawaban.
Kawa