แผนที่ง่าย ๆ สี่ biomes และวิธีการแจกจ่าย


16

นี่คือแนวคิดพื้นฐาน: ฉันมีเกม Rogue-ish บางที Dwarf Fortress-ish ที่มีการสุ่มสร้างทางตรงข้ามและทางเข้าดันเจี้ยนหลายทางที่กระจัดกระจายอยู่รอบ ๆ ฉันมีคุกใต้ดินอยู่แล้วโดยทั่วไปแล้ว แต่ฉันติดอยู่กับแง่มุมของทางตรงข้าม

ในทางตรงข้ามซึ่งถือว่าเป็นแผนที่ 2 มิติของหน้าจอควรจะมีการกระจายที่คล้ายหยดสี่ชุดรูปแบบหรือ biomes ที่แตกต่างกัน - ทุ่งหญ้า, ทะเลทราย, หิมะและบึงแต่ละคนมีจำนวนหน้าจอของตัวเอง สมมติว่าแผนที่เป็น 8x8 ซึ่งมีหน้าจอที่ไม่ซ้ำกัน 64 แบบ ครึ่งหนึ่งของเหล่านั้นอาจเป็นทุ่งหญ้าทะเลทรายหนึ่งในสี่และป่าพรุและหิมะจะได้รับหนึ่งในสี่:

จำลองแผนที่โลกที่เป็นไปได้กับเมืองและสถานที่เริ่มต้น แต่ไม่มีทางเข้าดันเจี้ยน

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

สิ่งที่ดีที่สุดที่ฉันจะได้รับคือรูปทรงบางอย่างที่มักจะเพียงพอและมีการผสมผสานที่ไร้สาระเช่นทะเลทรายที่สาดผ่านหิมะ (หรือในทางกลับกัน) ฉันไม่สามารถใช้ชีวิตของฉันเพื่อหาวิธีที่จะทำให้มันดีและ blobby ให้อยู่คนเดียวถ้ามันทำให้รู้สึกภูมิอากาศ (?) ดังนั้นฉันจะสร้างแผนที่ biome เหมือนใน mockup ได้อย่างไร

โอเคตามคำขอ: โลกไม่ใหญ่กว่าตัวอย่างมากและสิ่งที่ฉันต้องการก็เป็นเพียงวิธีกระจาย blobs บางอย่างที่กำหนดลักษณะที่ปรากฏโดยมีข้อ จำกัด พิเศษที่หิมะไม่สามารถสัมผัสทะเลทราย หน้าจอไม่เลื่อนและหากตั้งค่าหน้าจอเป็น "ทะเลทราย" จะไม่มีหญ้าบนหน้าจอเลย


คุณยินดีที่จะใช้ห้องสมุดบุคคลที่สามหรือคุณต้องการรหัสโซลูชันของคุณเอง?
William Mariager

ฉันต้องการโค้ดของตัวเอง
Kawa

ขนาดทางชีวภาพได้รับการแก้ไขหรือไม่
kaoD

คุณสามารถแก้ไขโพสต์ด้วยรายการจุดของกฎที่แน่นอนที่คุณต้องการให้การสร้างแผนที่ทำตามได้หรือไม่ มันจะง่ายกว่าที่เราจะจัดการกับปัญหาที่รู้ว่าเรากำลังทำอะไรอยู่
William Mariager

ได้รับการแก้ไขและขนาดไบโอomeฉันไปกับพวกนั้นเช่นกัน สำหรับโลก 16x16 ทะเลทรายอาจยังคงเป็นหนึ่งในสี่ของพื้นที่ต่อไป แต่นั่นก็เพื่อรับประกันว่าส่วนใหญ่จะอยู่ที่นั่น
Kawa

คำตอบ:


8

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

ตามกฎการเติบโตของการออกแบบของคุณเองซึ่งอาจมีการสุ่ม (ฉันไม่สนใจว่ามันจะทำลายแนวคิดของ CA ใช่ไหม?) ให้พวกมันเติบโตในแต่ละขั้นตอนในแผนที่ กฎเพิ่มเติมอาจเป็นเช่นนั้นหากคุณเป็นมหาสมุทรและอยู่ติดกับหญ้าหรือบึงคุณอาจเปลี่ยนเป็นหนองน้ำ หากคุณติดกับหิมะคุณอาจกลายเป็นน้ำแข็งหากคุณอยู่ใกล้ทะเลทรายคุณอาจแห้งแล้งและกลายเป็นทะเลทรายด้วย

สิ่งนี้อาจเป็นจริงสำหรับสูตรผสมอื่น ๆ และในทางทฤษฎีแม้แต่สูตรย่อยเช่นบึงน้ำแข็งหรือทุ่งทุนดราหรือป่างอกจากป่าขนาดใหญ่ที่เติบโตจากทุ่งหญ้าขนาดใหญ่

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

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

หลุมกระต่ายนี้ขยายไปตลอดกาล


การถอนคำแนะนำสำหรับ CA มันเข้ากันได้ดีกับความคิดเห็นของ Valmond
Kawa

คุณจะประหลาดใจที่วิธีแก้ปัญหา CA อย่างง่าย ๆ สามารถแก้ไขปัญหานี้ กฎง่าย ๆ และแผนที่เริ่มต้นแบบสุ่มสามารถสร้างรายละเอียดที่น่าทึ่งและทิวทัศน์ที่สมจริง
DampeS8N

ไปด้วยหลักการ CA มันไม่ถูกต้องนักเนื่องจากมีเพียงสิ่งเดียวที่ทำให้ทะเลทรายและหิมะแตกเป็นกฎเกณฑ์ที่แน่นอน แต่ตอนนี้ทำได้ดีมาก
Kawa

1
ทางเลือกหนึ่งในการแก้ปัญหาหิมะ / ทะเลทรายคือมีกฎในการสร้าง biome แบบอื่นที่หิมะพบทะเลทราย พูดว่าล้น จากนั้นหนองบึงก็สามารถเติบโตได้ตามปกติ คุณยังอาจมีหิมะ / ทะเลทรายอยู่ แต่ในความเป็นจริงมันค่อนข้างเป็นธรรมชาติ ความจริงแล้วทะเลทรายบนโลกส่วนใหญ่นั้นปกคลุมไปด้วยหิมะ - โดยย่อหิมะอาจมีกฎว่าหากเพื่อนบ้านคนใดคนหนึ่งเป็นทะเลทรายก็จะเปลี่ยนเป็นป่าพรุ
DampeS8N

11

คำตอบสั้น ๆ แต่คุณควรตรวจสอบบทความนี้จริง ๆ - www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/มันอธิบายขั้นตอนวิธีหนึ่งสำหรับการสร้างรุ่นสุ่มของดินแดนแห้งและ biomes ขึ้นอยู่กับเขตความชื้นที่กำหนดและภูมิภาคระดับความสูง แต่ในกรณีของคุณเพียงตั้งค่าของคุณเองสำหรับการกระจายที่คุณต้องการ

(แก้ไขใหญ่)ฉันจะทำให้สิ่งนี้ชัดเจนยิ่งขึ้นสำหรับแนวคิดการสร้างแผนที่ที่คุณต้องใช้ ใช้ระบบพิกัดที่มี 1 หน่วยต่อหน้าจอในค่าทศนิยม สร้างจุดสุ่มขนาดเล็กภายในพิกัดเหล่านี้ราวกับว่าคุณกำลังสร้างแผนภาพ Voronoi แต่เราจะไม่สร้างรูปร่างแบบสุ่ม แต่แผนภาพจะบอกเป็นนัยและประมาณโดยแผนที่หลังจากที่ไบโอมีการตั้งค่า

แต่ละจุดเป็นศูนย์กลางของแต่ละพื้นที่ biome ตั้งกฎของคุณเองเพื่อเชื่อมโยงจุดกับ biome ตัวอย่างเช่นหากคุณต้องการทะเลทรายไปทางทิศตะวันออกและไม่ไกลไปทางใต้หรือทางเหนือจุดทั้งหมดที่มากกว่าค่า X ที่แน่นอนและอยู่ในช่วง Y ที่แน่นอนจะมีทะเลทรายล้อมรอบพวกเขา

เชื่อมโยงแต่ละหน้าจอกับหนึ่งในจุดเหล่านี้ซึ่งทำได้โดยนำจุดกึ่งกลางของหน้าจอในพิกัด XY (พูด 4.5, 8.5) และส่งคืนจุดที่อยู่ใกล้กับศูนย์กลางของหน้าจอมากที่สุด

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

Voronoi ตาราง

ทำซ้ำสำหรับแต่ละหน้าจอโดยให้ biome ของตัวเองแต่ละอัน


ฉันเคยเห็นแบบนั้นมาก่อนแล้วและมันก็เป็นรถถังยุงเกินไปสำหรับรสนิยมของฉัน
Kawa

โอเคนั่นคือการวางไว้อย่างอ่อนโยน มันมากรถถัง-on-a-ยุง ตัวอย่าง 8x8 ไม่ได้เป็นเพียงตัวอย่าง - โลกไม่น่าจะใหญ่พอที่จะพิสูจน์ความจริงได้
Kawa

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

ยังแก้ปัญหาที่ซับซ้อนเกินไป ไม่มีความสูงหรือความชื้นที่จะใช้ที่นี่ ทั้งหมดที่ฉันต้องการทั้งหมดที่ฉันหมายถึงการถามสำหรับวิธีการบางอย่างเพื่อชนิดของ "การแพร่กระจายออก" blobs ของทะเลทรายหนองและหิมะได้ถึงจำนวนเงินที่จำเป็นตามกฎพิเศษบางอย่างเช่น "หิมะไม่สามารถได้ใกล้ชิดเกินไปทะเลทราย" .
Kawa

@Kawa: ดูเหมือนว่าคุณพร้อมที่จะขุดและเขียนทางออกของคุณเอง! จากสิ่งที่ฉันสามารถบอกได้ว่าคุณได้รับมันทั้งหมดในใจของคุณเพียงแค่ทำมัน! :) จำไว้ว่ามันไม่จำเป็นต้องเป็นเครื่องกำเนิดแผนที่ที่ดีที่สุดในโลกตราบใดที่มันดูเป็นอย่างนั้น ;)
Zolomon

1

ตอบ 1:

ปลูกหิมะและทะเลทรายเมื่อทำเสร็จแล้วให้หาทางแยก (ต้องห้าม) และปลูกหนองที่ใหญ่ขึ้น

Rince และทำซ้ำ

ตอบ 2:

สำหรับส่วน 'หยด' ฉันย้ายข้อคิดเห็นของฉัน (ตามที่ร้องขอ) ไปยังโพสต์:

หากคุณเติบโตโดยการทำซ้ำคือ กำหนดจุดของทะเลทราย 1 จุดแล้วสุ่มขึ้นรอบ ๆ จุดทะเลทรายใด ๆ (แต่ละครั้งจะสุ่มเลือกหนึ่งในจุดทะเลทรายที่มีอยู่และเพิ่ม 1 จุดที่ด้านใดด้านหนึ่งของมัน ไม่มีบรรทัดยาวเช่น)

คุณยังสามารถเพิ่มกฎเพื่อที่คุณจะไม่สามารถสร้างแผ่นทะเลทรายหากมีหิมะบนแผ่นกระเบื้องใด ๆ ที่อยู่ใกล้เคียง


แต่นั่นไม่ได้ช่วยในแง่มุมของปัญหา
Kawa

2
หากคุณโตขึ้นด้วยการทำซ้ำเช่น กำหนดจุดของทะเลทราย 1 จุดแล้วสุ่มขึ้นรอบ ๆ จุดทะเลทรายใด ๆ (แต่ละครั้งจะสุ่มเลือกหนึ่งในจุดทะเลทรายที่มีอยู่และเพิ่ม 1 จุดที่ด้านใดด้านหนึ่งของมัน ไม่มีบรรทัดยาวเช่น)
Valmond

คุณยังสามารถเพิ่มกฎเพื่อที่คุณจะไม่สามารถสร้างแผ่นทะเลทรายหากมีหิมะบนแผ่นกระเบื้องใด ๆ ที่อยู่ใกล้เคียง
Valmond

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