วิธีที่ถูกต้องในการ "สุ่ม" สร้างภูมิประเทศที่ไหล


9

ฉันกำลังสร้างเกม RTS แบบบนลงล่างง่ายๆ ฉันวางแผนที่จะสร้างแผนที่แบบ "สุ่ม" ในทันทีเมื่อฉันต้องการ ฉันวางแผนที่จะทำงานทั้งหมดใน 'ผ่าน':

  1. เติมภูมิประเทศด้วยหญ้าทั้งหมด
  2. ย้อนกลับไปและเพิ่มก้อนกรวดแบบสุ่ม
  3. ปัดกรวดออกไป
  4. วาด Mountain Landscape บนเลเยอร์ที่สอง
  5. รอบภูเขา
  6. ฯลฯ

ตอนนี้ให้ดูที่ภาพด้านล่าง:

ป้อนคำอธิบายรูปภาพที่นี่

ฉันสร้างสิ่งนี้โดยใช้โปรแกรมแก้ไขแผนที่ของฉัน แต่ฉันวางแผนว่าสิ่งนี้จะเป็นผลลัพธ์หลังจากที่หวังว่าจะผ่าน / ขั้นตอนที่ 3

ฉันจะตัดสินใจเกี่ยวกับเวลาและวางกรวดของฉันเพื่อที่ว่าอย่างน้อยก็มีรูปร่างผิดปกติและเป็นระยะ ๆ พอที่จะดูเป็นธรรมชาติ?

ขอบคุณถ้าคุณสามารถ! ความช่วยเหลือใด ๆ และชื่นชมทั้งหมด!

ในฐานะที่เป็นบันทึกด้านข้าง:

แต่ละรอบนั้นโดยทั่วไปฉันจะวนซ้ำผ่านไพ่ทั้งหมดของฉัน (แผนที่แบ่งออกเป็นไพ่ 40x40) คล้ายกับสิ่งนี้:

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

คำตอบ:


5

คุณสามารถเล่นรอบกับเสียงรบกวน Perlin ( ดูคำตอบ StackOverflow ของฉันสำหรับการใช้งาน ) เพื่อสร้างแผนที่ความสูง จากแผนที่ความสูงคุณสามารถแมปช่วงความสูงบางช่วงไปยังไทล์ที่แตกต่างกัน สิ่งที่ต้องการ:

  • หิมะตกยอดนิยม 20%
  • ถัดไป 20% กรวด
  • หญ้า 40% ต่อไป
  • น้ำ 20% สุดท้าย

คุณจะต้องเล่นกับค่ากำเนิดเสียงของ Perlin เพื่อรับภูมิประเทศที่สามารถสร้างและดูดี


5

อย่างที่คนอื่นพูดเสียงเพอร์ลินน่าจะเป็นแหล่งข้อมูลที่ดีสำหรับการตัดสินใจว่าจะวางกระเบื้องประเภทใด ฉันต้องการที่จะเติมเต็มความคิดที่ว่าและเชื่อมโยงสองแหล่งข้อมูลเพิ่มเติมที่ควรจะเป็นประโยชน์กับกับขั้นตอนที่สามในรายการตรวจสอบของคุณ - ปัดเศษมุม

นี่เป็นกระบวนการที่เรียกว่าการเรียงแบบอัตโนมัติและไม่ใช่เรื่องยากที่จะนำมาใช้ มีหลายวิธีที่จะทำ แต่ส่วนใหญ่พึ่งพาการคำนวณข้อมูล adjacency สำหรับแต่ละไทล์เพื่อตัดสินใจว่าจะวาดกราฟฟิคใดในตำแหน่งนั้น

วิธีที่สวยงามมากในการแก้ปัญหานี้คือการกำหนดค่าแฟล็กที่ไม่ซ้ำกันให้กับทิศทางไทล์แต่ละอันที่อยู่ติดกันและวาง spritehseet ของคุณเพื่อให้ค่าที่คุณได้รับโดยการรวมแฟล็กติดกันทั้งหมดของกระเบื้องจะสอดคล้องกับตำแหน่งที่ถูกต้อง กระเบื้องใน spritesheet อ่านบทความนี้สำหรับคำอธิบายที่ชัดเจนของเทคนิค

และนี่คือทรัพยากรอื่นที่อธิบายการเปลี่ยนแปลงของเทคนิคอื่น


เฮ้เพื่อบอกให้คุณรู้ว่าคำตอบของคุณนั้นมีประโยชน์มาก ๆ ขอบคุณตัน :) ตอนนี้ใช้งานได้จริงแล้ว (แม้จะเป็นมุมโค้งมน)!
Freesnöw

4

เป็นหลักคุณสามารถใช้การสร้างเสียงรบกวน Perlinเพื่อสร้างแผนที่ของคุณ คุณจะลองตัวอย่างแผนที่ความสูงที่สร้างขึ้นและกำหนดบล็อกกรวดไปยังส่วนต่าง ๆ ของแผนที่ที่มีความสูงเกินระดับที่กำหนด

นี่คือโพสต์อ้างอิงที่ยอดเยี่ยมเกี่ยวกับวิธีดำเนินการเกี่ยวกับการใช้งานระบบและภูมิประเทศประเภทต่าง ๆ ที่คุณสามารถสร้างได้

ตัวอย่างมีขั้นตอนมากกว่าที่คุณต้องการ แต่แนวคิดนั้นเหมือนกัน

เพิ่มเติมเกี่ยวกับโลก Gen-type Minecraft

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

ป้อนคำอธิบายรูปภาพที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.