อะไรคืออัลกอริธึมที่เหมาะสำหรับการสร้างดันเจี้ยน 2D เหมือน Rogue? [ปิด]


47

ทรัพยากรที่ดีอะไรบ้างที่เกี่ยวกับการสร้างเนื้อหาขั้นตอนในบริบทของการสร้างดันเจี้ยน?

บทความที่ใกล้เคียงที่สุดที่ฉันสามารถหาได้คืออัลกอริทึมสำหรับสร้างเขาวงกต 2 มิติซึ่งไม่ใช่สิ่งที่ฉันกำลังมองหา คุณสมบัติเช่นห้องและทางเดินเชื่อมต่อนั้นเหมาะอย่างยิ่ง

ขอบคุณ!


1
นอกจากจะดูที่การสร้างเขาวงกต
Anthony

1
มีบทความบางส่วนเกี่ยวกับเรื่องนี้ที่RogueBasin
Patry Guillaume

คำตอบ:


27

นี่เป็นคำตอบที่มากหรือน้อยมาก่อน สถานที่แวะพักแห่งแรกของคุณควรเป็นhttp://pcg.wikidot.com/

เนื่องจากฉันถูกกล่าวหาว่านี่ไม่ใช่คำตอบที่เป็นประโยชน์เลย (จริงๆมีคนถามหาทรัพยากรและฉันโพสต์ลิงก์ไปยังวิกิจัดการกับเรื่องนี้หรือไม่ ) หน้านี้ของ wiki เกี่ยวข้องกับเครื่องกำเนิด Dungeon โดยเฉพาะและลิงก์ไปยังบทความต่าง ๆ ในหัวเรื่อง
http://pcg.wikidot.com/pcg-algorithm:dungeon-generation

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


+1 สำหรับ "แนวคิดทั้งหมดถูกต้อง" แต่ฉันต้องการชี้แจงว่า: แนวคิดทั้งหมดถูกต้อง แต่บางแนวคิดอาจใช้ได้ดีกว่าแนวคิดอื่น แนวคิดศัพท์แสง <vague computer ของคุณที่นี่> จะทำงานและอาจเป็นสิ่งที่คุณต้องการ แต่มีวิธีอื่นที่จะทำให้มีประสิทธิภาพมากขึ้นสุ่มมากขึ้นเหนียวกว่าปรับแต่งได้มากขึ้นหรือผสมกันนอกเสียจากว่าคุณจะเป็นอย่างใดอย่างหนึ่ง ดีจริงๆหรือโชคดีจริงๆ
Nic Hartley

20

ฉันจัดการเพื่อให้ได้ระดับการมองที่ดีพอสมควรโดยใช้อัลกอริทึมต่อไปนี้โดยยึดตามตารางสี่เหลี่ยม:

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

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

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

นี่คือตัวอย่างของระดับที่สร้างขึ้น

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

จากอัลกอริทึมนี้คุณสามารถเพิ่มการตกแต่งผนังที่ขึ้นอยู่กับโซนทำให้ทางเดินเล็กลงหรือใหญ่ขึ้นสร้างห้องพิเศษและอื่น ๆ


10

หากคุณชอบการอ่านรหัสและสามารถแยก C # ได้ฉันขอแนะนำเครื่องกำเนิดดันเจี้ยนที่ใช้ roguelike Amaranth ของฉันได้ไหม มันนี่ มันจัดการกับห้องที่เชื่อมต่อกันคุณสมบัติที่เพิ่มขึ้นและสิ่งดีๆอื่น ๆ

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


1
ฉันวิ่งข้าม Amaranth สิ่งที่ดูเหมือนเมื่อหลายเดือนก่อน แต่ฉันลืมชื่อตามเวลาที่ฉันเข้าสู่คุกใต้ดินด้วยตัวเอง ขอบคุณสำหรับลิงค์!
Gabriel Isenberg

2
บทความของคุณที่journal.stuffwithstuff.com/2014/12/21/rooms-and-mazesก็ดีเหมือนกันฉันใช้เวอร์ชันที่ปรับเปลี่ยนแล้วด้วยคุณสมบัติพิเศษบางอย่างเช่น
เอนเดอร์เจน

3

ทั้งหมดนี้เป็นแนวคิดที่ยอดเยี่ยม ฉันใช้เวลาเล็กน้อยจากRogueBasinและ pcg.wikidot.com และเขียนการใช้งานของฉันเองใน C #

ฉันชอบรูปลักษณ์ที่ 'เป็นธรรมชาติ' ของระดับเหมือนถ้ำที่สามารถสร้างขึ้นได้โดยใช้วิธีเซลลูลาร์ออโตมาตา เพื่อให้เข้าใจถึงสิ่งที่ฉันหมายถึงโดยวิธีเซลลูลาร์ออโตลองจินตนาการถึง Game of Life ของ Conway รหัสของฉันใช้อะไรที่เรียกว่าวิธี 4-5 ซึ่งหมายความว่ากระเบื้องจะกลายเป็นกำแพงถ้ามันเป็นกำแพงและ 4 หรือมากกว่าเก้าเพื่อนบ้านเป็นผนังหรือถ้าไม่ใช่กำแพงและ 5 หรือมากกว่าเพื่อนบ้านเป็นผนัง ฉันเริ่มต้นด้วยการเติมแผนที่แบบสุ่มด้วยกำแพงหรือพื้นที่จากนั้นไปที่ตำแหน่ง x / y แต่ละตำแหน่งซ้ำ ๆ กันและใช้กฎ 4-5 ข้อ เพื่อช่วยบรรเทาปัญหาในการสร้างถ้ำที่แยกได้หลังจากกรอกแผนที่แบบสุ่มฉันว่างในแนวนอนข้ามแผนที่ตั้งค่าแต่ละไทล์ลงในช่องว่างแทนที่จะเป็นกำแพงก่อนใช้ 4-5 กฎกับแต่ละแผ่น

คุณสามารถดูรหัสสำหรับคลาสตัวจัดการแผนที่ของฉันและการปรับปรุงใด ๆ ที่ฉันทำที่นี่

หรือรุ่นที่เก็บไว้ที่นี่


2
คำถามนี้มีคะแนนโหวตจำนวนมากและมันจะดีกว่าถ้าคุณสามารถเปิดคำตอบนี้ได้มากขึ้น ลิงก์มักจะตายในที่สุดลองตอบคำถามโดยไม่จำเป็นต้องคลิกลิงค์ มันทำงานอย่างไร แนวคิดหลักคืออะไร? มันแตกต่างจากอัลกอริทึมอื่นอย่างไร
Katu

1
ลิงค์เสียชีวิตจริง
htmlcoderexe

2

ฉันคิดว่าสถานที่ที่ตรงที่สุดในการค้นหานี้คือการดูรหัสต้นฉบับจริง ๆ ผู้เล่นหลักสองคนในวงการคือ Angband และ Nethack เป็นทั้งโอเพ่นซอร์ส


3
ถึงแม้ว่าโอเพ่นซอร์ส แต่สิ่งที่ฉันจำได้ก็คือทั้งแหล่งข้อมูลที่มีเอกสารที่ดีมากหรือแหล่งที่โปร่งใสหรือเขียนเพื่อการเรียนรู้จากแหล่งที่มา พวกมันง่ายต่อการแฮ็กปรับแต่ง แต่ยากที่จะคร่ำครวญ
Tom Hudson

บางทีต้นฉบับอาจไม่ใช่แหล่งอ้างอิงที่ดี แต่มีตัวแปรจำนวนมากซึ่งบางส่วนก็ยอดเยี่ยม ตัวอย่างเช่นนักพัฒนาของ UnAngband ได้ทำการปรับปรุงจำนวนมากสำหรับการสร้างดันเจี้ยนและเขียนบทความในบล็อกโพสต์ยอดเยี่ยมดังนั้นคุณจึงสามารถใช้ความคิดนี้ได้หากไม่ใช้รหัส
congusbongus

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