Pembuatan peta acak

63

Saya memulai / memulai permainan RPG tilemap 2D di Jawa dan saya ingin menerapkan pembuatan peta acak. Saya memiliki daftar ubin yang berbeda, (tanah / pasir / batu / rumput / kerikil dll) bersama dengan ubin air dan ubin jalan, masalah yang saya miliki adalah bahwa saya tidak tahu harus mulai dari mana membuat peta secara acak.

Itu perlu memiliki bagian medan (Seperti bagian dari itu akan menjadi pasir, sebagian kotoran, dll.) Mirip dengan bagaimana Minecraft di mana Anda memiliki bioma yang berbeda dan mereka mulus berubah menjadi satu sama lain. Terakhir saya juga perlu menambahkan jalur acak ke ini juga pergi ke arah yang berbeda di seluruh peta.

Saya tidak meminta siapa pun untuk menulis saya semua kode atau apa pun, cukup minta saya ke arah yang benar.

tl; dr - Hasilkan peta ubin dengan bioma, jalur, dan pastikan bioma saling bertukar secara mulus.

Tom O
sumber

Jawaban:

68

Di antara banyak pertanyaan terkait lainnya di situs ini, ada artikel yang sering dikaitkan untuk pembuatan peta: Pembuatan Peta Poligonal untuk Game Anda dapat memperoleh beberapa strategi bagus dari artikel itu, tetapi tidak dapat digunakan sebagaimana mestinya.

Meskipun bukan tutorial, ada artikel tentang bagaimana peta dunia benteng Dwarf dihasilkan. Pada dasarnya Anda menghasilkan beberapa lapisan kebisingan, untuk ketinggian, kelembaban, suhu, salinitas. Maka Anda akan menggunakan sesuatu seperti ini:

masukkan deskripsi gambar di sini

Atau ini

masukkan deskripsi gambar di sini

untuk menghasilkan bioma berdasarkan lapisan kebisingan yang Anda hasilkan sebelumnya. Biasanya ini memberikan transisi yang cukup mulus antara bioma dan transisinya logis. Saya juga memodifikasi peta kelembaban dan suhu berdasarkan ketinggian. Ini secara alami menghasilkan "garis kayu" dan menghasilkan gunung berbatu dengan topi bersalju.

Saya menggunakan strategi ini untuk permainan saya dan menghasilkan peta seperti ini dengan sangat cepat:

masukkan deskripsi gambar di sini

Selain itu, Anda dapat melihat saya menggulir beberapa peta lagi di awal video ini .

Dan berikut ini beberapa lagi untuk Anda mulai:

Bagaimana saya bisa membuat "dunia" acak di mesin ubin?

Bagaimana saya bisa mengidentifikasi daerah fitur di dunia yang dihasilkan secara prosedural?

Bagaimana cara membuat noise solid tileable untuk pembuatan peta?

MichaelHouse
sumber
Sementara tautan Pembuatan Peta Polygonal untuk Game itu adalah artikel yang sangat bagus, saya rasa itu tidak cocok untuk pertanyaan ini karena a) itu bukan kotak tilemap dan b) tidak memiliki bioma - tekstur medan adalah berdasarkan ketinggian.
Tapio
@ Tapio Anda benar, saya telah memperbarui dengan informasi lebih lanjut.
MichaelHouse
@ Byte56 Terima kasih, semua ini memberi saya titik awal! :)
Tom O
@ Byte56 Saya perhatikan Anda menyebutkan pertanyaan saya dari beberapa tahun yang lalu, jadi saya memperbaruinya dengan kode kerja!
Nick Badal
1
BTW proyek pembuatan peta poligon dibuat untuk game yang memiliki peta ubin yang tidak menampilkan ketinggian. Ketinggian dan poligon ada untuk menghasilkan bioma tetapi sebenarnya tidak ditampilkan dalam permainan.
amitp
29

Sementara jawaban lain di sini sangat baik untuk menghasilkan jenis lanskap statis yang akan bekerja untuk kebutuhan spesifik ini. Ada metode lain yang mungkin dicari orang dari pertanyaan ini jika mereka ingin membuat lanskap yang berubah seiring waktu atau tampak jauh lebih realistis, Anda dapat mengikuti teknik ini.

Berbeda dengan jawaban lain, Anda memulai ini dengan peta yang sepenuhnya kosong. Mulailah dengan apa yang Anda anggap sebagai permukaan laut. Gunakan Perlin Noise untuk menambahkan variasi yang sangat sedikit, jika Anda memiliki 256 ketinggian yang mungkin, jangan ubah lebih dari 3-5 di kedua arah. Ini membangun beberapa miliar tahun pertama lanskap Anda tanpa harus benar-benar menjalankan simulasi selama itu.

Lempeng Tektonik

Membagi peta di sepanjang garis lurus atau lengkung untuk membuat piring, semakin detail bentuk piring, semakin menarik lansekap Anda. Buat mereka tetap besar. Beri setiap lempeng arah, kecepatan. Selama jangka waktu tertentu, gerakkan lempeng-lempeng dengan cara yang bijaksana di sekitar peta, seret semua ubin di atasnya.

Ketika dua lempeng melintas, tentukan pilihan mana yang akan dilewati dan mana yang akan masuk, pilihan ini bisa acak. Ubin di piring yang ditunjuk di bawah ini langsung dikurangi ketinggiannya dengan 5 langkah. Setelah sebuah piring telah ditentukan atas atau di bawah, semua interaksi di masa depan dengan pelat akan mengikuti aturan ini:

  • Di mana pelat yang ditunjuk melintasi pelat yang tidak dirancang, pelat yang tidak dirancang menjadi tipe yang berlawanan. (Jadi pelat UD menjadi di bawah saat melintasi sebuah.)
  • Di mana pelat lebih terletak di atas pelat bawah, semua ubin bergerak ke atas 0-1 langkah ketinggian, dan ubin mengikuti jalur pelat atas.
  • Di mana lempeng di atas melintasi lempeng di atas, semua ubin bergerak 1-2 langkah, dan ubin di daerah lintas tidak lagi melayang.
  • Jika pelat bawah melintasi pelat bawah, ubin apa pun di daerah dengan ketinggian lebih dari tanda 66% untuk kedua pelat di daerah lintas naik 1-3 langkah (seolah-olah dengan aktivitas vulkanik, ini akan menghasilkan pulau dari waktu yang cukup). ) dan ubin di daerah ini berhenti melayang.

Semua pelat yang melintas lambat sebesar 20% dari kecepatan saat ini setiap langkah. Untuk menambahkan realisme, tambahkan perubahan acak -10% hingga 10% dalam arah gerakan setiap langkah.

Setelah melakukan jumlah langkah yang diinginkan. Mungkin 5-10 banyak. Setiap ubin di mana tidak ada plat yang ada, harus dijatuhkan ke level terendah yang ada.

Besar atau kecil?

Peta ini dapat digunakan apa adanya, atau diperluas untuk membuat peta yang jauh lebih besar dengan memecahnya menjadi potongan 4X4 (sel) ubin dan memperluas bagian-bagian tersebut berdasarkan ketinggian masing-masing. Perlakukan ketinggian setiap sel sebagai titik, dan buat gradasi halus di peta yang lebih besar di antara titik-titik itu. Jadi, jika peta yang lebih besar adalah 40X40 bukannya 4X4, dan titik (0,0) adalah 10 dan titik (0,1) adalah 1, ubin di peta yang lebih besar di antara mereka akan menjadi 10,9,8,7,6 , 5,4,3,2,1 tingginya. Selanjutnya Perlin Noise dapat ditambahkan untuk mengurangi kelerengan lereng. Secara keseluruhan teknik penskalaan ini mirip dengan algoritma Diamond Square .

air

Untuk mensimulasikan sungai dan danau, lautan dan permukaan air. Saya lebih suka menggunakan automata seluler .

Ketinggian menjadi mengapung atau rentang int yang diperluas untuk memungkinkan pelacakan berbutir lebih halus. Sel-sel air memiliki nilai saturasi, katakanlah dalam kisaran 1-256. Peta harus dimulai secara merata. Anda harus bermain dengan angka untuk ukuran peta Anda sendiri, namun umumnya Anda akan mengikuti aturan seperti ini:

  • Jika sel tetangga lebih jenuh, tambah saturasi dan tambah tinggi.
  • Jika sel tetangga kurang jenuh, kurangi saturasi dan kehilangan tinggi.

Lakukan pemeriksaan ini untuk setiap sel tetangga. Jalankan melalui sejumlah langkah yang cukup. Jika Anda mau, Anda bisa menambahkan suhu pada simulasi ini dengan mengubah jumlah saturasi yang hilang / didapat oleh suhu itu. Anda juga dapat mengubahnya berdasarkan ketinggian. Danau dan sungai alami harus terbentuk. Beberapa akan jatuh ke laut. (Lautan mungkin tidak akan diisi oleh metrik apa pun, tetapi Anda akan menetapkan apa pun di bawah permukaan laut untuk menjadi air yang diisi pada akhirnya.)

Anda dapat menyimpan data suhu dan saturasi untuk digunakan, seperti pada jawaban lain, untuk membuat bioma. Mereka harus JAUH lebih akurat dan menarik. Dengan bioma bersalju di kutub dan yang panas di tengah (jika Anda menggunakan daftar suhu yang lancar.)

Anda juga dapat mensimulasikan angin, dan karenanya perubahan suhu berdasarkan ketinggian. Anda dapat bolak-balik antara menjalankan simulasi suhu dan simulasi air jika Anda mau. Namun saya belum membuat apa pun menggunakan perubahan suhu jadi saya tidak akan mengomentari bagaimana melakukan itu.

Bentang Alam yang Berkembang

Jika Anda menyimpan simulasi untuk tanah, air, dan panas di sekitar dan secara dramatis mengurangi efeknya dan juga menghentikan pelat agar tidak bergerak, Anda dapat terus mengubah semua metrik ini dari waktu ke waktu. Saya tidak akan menjalankan perhitungan terlalu sering, tetapi Anda bisa mendapatkan peta dunia yang merespons perubahan dengan cara ini.

Kesimpulan

Sementara jenis teknik ini jauh lebih terlibat, mereka menghasilkan efek yang lebih realistis dan berkembang. Ambillah untuk apa nilainya?

DampeS8N
sumber
15

Anda dapat menggunakan Perlin Noise untuk generasi medan, berikut adalah cara kerja bioma di Minecraft. Seperti yang Anda lihat, dia menggunakan peta panas dalam kombinasi dengan peta hujan untuk membuat bioma.

Bioma dari Minecraft

Tversteeg
sumber