ฉันกำลังสร้างเกมด้วยโลกที่สร้างขึ้นตามขั้นตอนที่สร้างขึ้นในตอนต้นของเกมซึ่งประกอบด้วยหลายพื้นที่ที่แสดงโดยกริด (พูด, 8x8, 9x6 ขนาดจะเป็นการดีตามอำเภอใจ) พื้นที่เหล่านี้ควรจะเชื่อมต่อซึ่งกันและกันผ่านรายการการพึ่งพา
มีการเชื่อมต่อเมื่อมีช่องว่างอย่างน้อย 3 ช่องของกริดนั้นระหว่างสองพื้นที่ ในเซลล์ตรงกลางของพื้นที่เชื่อมต่อ 3 พื้นที่นั้นเป็นประตูทางเข้าระหว่างพื้นที่:
ฉันพยายามคิดหาวิธีเชื่อมโยงพวกมันเข้าด้วยกัน แต่มันก็ซับซ้อนมากขึ้นเรื่อย ๆ ในด้านที่คุณต้องพิจารณาในเวลาเดียวกัน
ฉันได้ลองทำต้นแบบกระดาษและในขณะที่มันเป็นกระบวนการที่ง่ายมากเมื่อทำการมองเห็นฉันยังไม่พบชุดนิพจน์ทางคณิตศาสตร์ที่ดีที่ทำให้ฉันสามารถวางห้องที่มีประสิทธิภาพเดียวกันด้วยรหัส
นี่เป็นตัวอย่าง "ง่าย ๆ " ที่ฉันกำลังดิ้นรนอยู่ตอนนี้:
- พื้นที่ 'a' จำเป็นต้องเชื่อมต่อกับ 'b' และ 'c'
- พื้นที่ 'b' จำเป็นต้องเชื่อมต่อกับ 'a' และ 'd'
- พื้นที่ 'c' จำเป็นต้องเชื่อมต่อกับ 'a' และ 'd'
- พื้นที่ 'd' จำเป็นต้องเชื่อมต่อกับ 'b' และ 'c'
พิจารณาเพื่อความง่ายเราวางห้องตามลำดับที่ปรากฏในรายการ (ฉันลองคนอื่นแล้ว) ดังนั้นฉันจึงเข้าใกล้สิ่งนี้เป็นอัลกอริทึม Dungeon Generation แบบมาตรฐานของคุณ
เราวาง 'a' ไว้ที่ใดก็ได้บนกระดานเนื่องจากเป็นพื้นที่แรก ต่อไปเราจะสุ่มเลือกกำแพงและเนื่องจากไม่มีอะไรเชื่อมต่อกับผนังนั้นเราจึงสามารถวาง 'b' ไว้ที่นั่น:
ตอนนี้เราต้องวาง 'c' แต่ 'a' อยู่บนกระดานอยู่แล้วและมีกำแพงที่ว่างอยู่ดังนั้นเราจึงตัดสินใจวางมันไว้บนอีกกำแพงหนึ่ง แต่ไม่ใช่ทุกตำแหน่งที่จะทำเพราะ 'd' กำลังจะมาถึงและจะต้องเชื่อมต่อกับ 'b' และ 'c' ด้วยเช่นกัน:
ฉันลองข้อ จำกัด ที่เป็นไปได้ที่ห้อง 2 ห้องที่มีชุดของการอ้างอิงที่เหมือนกันไม่สามารถอยู่บนผนังฝั่งตรงข้ามได้ แต่ก็ไม่ได้รับประกันความสำเร็จ:
และในกรณีอื่น ๆ ที่พื้นที่มีขนาดแตกต่างกันการอยู่บนกำแพงฝั่งตรงข้ามสามารถทำงานได้:
นอกจากนี้การไม่พิจารณาผนังที่ใช้เป็นข้อสันนิษฐานที่มีข้อบกพร่อง
ฉันได้ลองค้นหางานวิจัยเกี่ยวกับอัลกอริธึมการสร้างโพรซีเดอร์อื่นหรือที่คล้ายกันเช่นอัลกอริธึมการบรรจุที่เหมาะสมและอัลกอฮอร์เลย์เอาต์กราฟ แต่โดยปกติอัลกอริทึมเหล่านั้นไม่ได้คำนึงถึง
ฉันคิดถึงวิธีการหลายอย่างรวมถึงการวางพื้นที่และย้อนกลับจนกระทั่งพบตำแหน่งที่เหมาะสม แต่พวกเขาดูเหมือนจะขึ้นอยู่กับการลองผิดลองถูกและมีค่าใช้จ่ายสูงในแง่ของการคำนวณ แต่จากการวิจัยอย่างละเอียดเกี่ยวกับสองปัญหาสุดท้ายที่ฉันพูดถึงมันอาจเป็นทางออกเดียวที่ดีที่สุด?
ฉันแค่อยากจะดูว่าใครบางคนมีปัญหาที่คล้ายกันในอดีตหรือไม่ก็ยินดีที่จะช่วยฉันคิดออกและให้ฉันชี้ไม่กี่ที่ที่ฉันควรเริ่มต้นด้วยอัลกอริทึม หรือถ้าไม่เช่นนั้นฉันจะต้องคลายข้อ จำกัด ที่ฉันตั้งไว้