Cara yang benar untuk "secara acak" menghasilkan medan yang mengalir

9

Saya membuat game RTS top down sederhana. Saya berencana untuk "secara acak" membuat peta dengan cepat ketika saya perlu. Saya berencana semuanya bekerja di 'pass':

  1. Isi medan dengan semua rumput
  2. Kembali dan tambahkan semburan kerikil acak
  3. Lengkapi kerikil
  4. Gambar Mountain Landscape di lapisan kedua
  5. Lengkapi pegunungan
  6. dll. dll

Sekarang, lihat gambar ini di bawah ini:

masukkan deskripsi gambar di sini

Saya membuat ini menggunakan editor peta saya tetapi saya berencana ini pada dasarnya menjadi hasil setelah semoga lulus / langkah 3.

Bagaimana saya harus memutuskan kapan dan akan menempatkan kerikil saya sehingga setidaknya berbentuk tidak teratur dan cukup sporadis agar terlihat alami?

Terima kasih, jika bisa! Segala dan semua bantuan sangat dihargai!

Sebagai catatan:

Setiap pass pada dasarnya saya iterasi melalui semua ubin saya (Peta dibagi menjadi 40x40 ubin) mirip dengan ini:

for (int x = 0; x <= GRIDMAX - 1; x++) {
    for (int y = 0; y <= GRIDMAX - 1; y++) {
        //Terrain(x, y, 0) = SomethingHere;
    }
}
Freesnöw
sumber

Jawaban:

5

Anda dapat bermain-main dengan Perlin Noise ( lihat jawaban StackOverflow saya untuk implementasi ), untuk menghasilkan peta ketinggian. Dari peta ketinggian, Anda dapat memetakan rentang ketinggian tertentu ke ubin yang berbeda. Sesuatu seperti:

  • 20% Salju Teratas
  • Berikutnya 20% Gravel
  • Selanjutnya 40% Rumput
  • 20% Air Terakhir

Anda harus bermain dengan nilai generator Perlin Noise untuk mendapatkan medan yang dapat dihasilkan dan terlihat bagus.

Nick Banks
sumber
5

Seperti yang dikatakan orang lain, kebisingan perlin harus menjadi sumber data yang baik untuk memutuskan di mana menempatkan berbagai jenis ubin. Saya ingin melengkapi gagasan itu dan menautkan dua sumber daya tambahan yang seharusnya membantu dengan langkah ketiga dalam daftar periksa Anda - membulatkan sudut .

Ini adalah proses yang disebut auto-tiling dan tidak terlalu sulit untuk diterapkan. Ada banyak cara berbeda untuk melakukannya, tetapi kebanyakan dari mereka bergantung pada penghitungan informasi kedekatan untuk setiap ubin untuk memutuskan grafik mana yang harus diambil di lokasi itu.

Cara yang sangat elegan untuk menyelesaikan masalah ini adalah dengan menetapkan nilai bendera unik untuk setiap arah ubin yang berdekatan, dan tata letak spritehseet Anda sehingga nilai yang Anda dapatkan dengan menambahkan bersama semua bendera ubin yang berdekatan akan sesuai dengan posisi yang benar dari ubin tersebut. petak di spritesheet. Baca artikel ini untuk deskripsi teknik yang sangat jelas.

Dan inilah sumber lain yang menggambarkan variasi teknik lainnya.

David Gouveia
sumber
Hei, hanya untuk memberi tahu Anda, jawaban Anda sangat membantu sejauh membulatkan sudut. Terima kasih banyak :) Sekarang semuanya bekerja (bahkan sudut pembulatannya)!
Freesnöw
4

Pada dasarnya Anda dapat menggunakan generasi Perlin Noise untuk menghasilkan peta Anda. Anda akan mencicipi peta ketinggian yang dihasilkan dan menetapkan blok kerikil ke bagian peta yang memiliki ketinggian di atas tertentu.

Berikut ini adalah posting referensi yang sangat baik tentang bagaimana cara mengimplementasikan sistem seperti itu dan berbagai jenis medan yang dapat Anda hasilkan.

Contoh-contohnya memiliki langkah lebih banyak daripada yang Anda perlukan, tetapi konsepnya sama.

Lebih lanjut tentang gen dunia tipe Minecraft

http://www.gamedev.net/blog/33/entry-2227887-more-on-minecraft-type-world-gen/

masukkan deskripsi gambar di sini

David Young
sumber