ปัญหาที่จะต้องแก้ไข:สร้างแผนที่ดันเจี้ยน 2D แบบสุ่มสำหรับเกมแบบเรียงต่อกันที่ห้องทั้งหมดเชื่อมต่อกัน
ฉันกำลังมองหาวิธีแก้ปัญหาที่ดีกว่าสิ่งที่ฉันมีอยู่ในปัจจุบัน
โซลูชันปัจจุบันของฉันคือฉันรันสองอัลกอริธึม ครั้งแรกที่สร้างดันเจี้ยนที่มีห้องพัก ที่สองตรวจสอบให้แน่ใจว่าห้องพักทุกห้องเชื่อมต่อกัน ฉันอยากรู้ว่าการแก้ปัญหาอื่นอาจมีอยู่ เร็วขึ้นและ / หรือง่ายขึ้นเป็นต้นความเร็วไม่ใช่เรื่องที่น่ากังวล แต่ถ้าความเร็วสามารถเพิ่มได้โดยไม่ต้องเสียค่าใช้จ่ายจริงนั่นเป็นเรื่องดี ที่สำคัญกว่านั้นคือฉันและคนอื่น ๆ ที่อ่านอาจเรียนรู้วิธีต่าง ๆ ในการเข้าถึงและแก้ไขปัญหา
ด้านล่างคือการใช้งานปัจจุบันของฉัน ขณะนี้ห้องพักไม่มีทางออกหรือออกในทิศทาง 2, 3 หรือ 4
สร้างห้องดันเจี้ยน
ตั้งค่า: ตั้งค่าห้องปัจจุบันเป็นห้องซ้ายบน
- รับประเภทห้องที่ถูกต้องสำหรับห้องพัก (ที่ประเภทห้องที่ถูกต้องเป็นประเภทที่ไม่มีทางออกจากคุกใต้ดินและห้องที่ออกตรงกับทางออกของห้องด้านบนและห้องทางด้านซ้ายเพียงตรวจสอบด้านบนและ เหลือเนื่องจากขั้นตอนที่ 2 ด้านล่าง)
- วางห้องลงแล้วเลื่อนพิกัด x หนึ่งก้าว หากพิกัด x เกินความกว้างของดันเจี้ยนให้ตั้งค่าพิกัด x เป็น 0 และเลื่อนไปข้างหน้าพิกัด y หนึ่งก้าว หากพิกัด y เกินความสูงของดันเจี้ยนเราก็เสร็จเรียบร้อย
- ทำซ้ำจาก # 1
ฉันจะตรวจสอบเพื่อดูว่าห้องทั้งหมดเชื่อมต่อกันหรือไม่หากพวกเขาไม่ได้เชื่อมต่อกันทั้งหมดฉันเรียกใช้อัลกอริทึมที่สองว่าในวิธีที่ไม่เซ็กซี่ แต่ก็ดีพอในแง่ของรูปแบบดันเจี้ยน กำลังเชื่อมต่อ
กำลังตรวจสอบเพื่อดูว่าห้องทั้งหมดเชื่อมต่อกันหรือไม่
การตั้งค่า: สร้างแผนที่ 2 มิติของจำนวนเต็มแทนเส้นทางและเริ่มต้นรายการเป็นค่า "ไม่ได้ประมวลผล" (ยังไม่ผ่านการสำรวจ), -1 ตั้งค่าจำนวนเต็มดัชนีพา ธ เริ่มต้นที่ติดตามเส้นทางปัจจุบันเป็น 1 ตั้งค่าห้องปัจจุบันเป็นห้องด้านซ้ายบนโดยเพิ่มลงในสแต็กห้องเพื่อตรวจสอบ
- หากสแต็กมีห้องที่ต้องตรวจสอบให้ pop มันตั้งค่าดัชนีพา ธ ของห้องเป็นดัชนีพา ธ ปัจจุบัน หากสแต็กไม่มีห้องใด ๆ ให้เพิ่มดัชนีพา ธ และลองรับห้องโดยเลื่อนคอลัมน์ทีละคอลัมน์ไปทีละแถวจนกว่าเราจะได้ห้องที่ยังไม่ได้ประมวลผล หากไม่มีห้องว่างเราก็เสร็จแล้ว
- ตรวจสอบดูว่าห้องมีทางออกด้านซ้ายหรือไม่ ถ้ามันเพิ่มห้องด้านซ้ายลงในสแต็กหากยังไม่ได้อยู่บนนั้น
- ทำซ้ำขั้นตอนที่ 2 สำหรับการลงทิศทางขวาและบนสุด (เนื่องจากเราใช้สแต็กซึ่งหมายความว่าห้องจะถูกสำรวจตามลำดับตามเข็มนาฬิกาเริ่มต้นด้วยทิศทางบนสุด)
- ทำซ้ำจากขั้นตอนที่ 1
- หากการนับดัชนีเส้นทางมีค่ามากกว่าหนึ่งแสดงว่ามีห้องที่ไม่ได้เชื่อมต่อ
หากมีห้องที่ไม่ได้เชื่อมต่อฉันแล้วจัดกลุ่มห้องตามดัชนีพา ธ ของพวกเขารับดัชนีเส้นทางที่ใหญ่ที่สุดและเชื่อมต่อห้องอื่นทั้งหมดกับห้องเหล่านั้น นี่เป็นงานที่ทำอยู่ แต่แผนของฉัน (ปัจจุบัน "โหดเหี้ยม") คือการผ่านแต่ละห้องในกลุ่มห้อง (ยกเว้นตอนแรก) ตรวจสอบเพื่อดูว่ามีเส้นทางแนวนอนหรือแนวตั้งไปยังกลุ่มห้อง biggeset และ ถ้าเป็นเช่นนั้นสร้างเส้นทางแนวนอน / แนวตั้งที่นั่นโดยการฉีด / ปรับปรุงห้องพักในระหว่าง ล้างและทำซ้ำ น่าเกลียดใช่แล้ว แต่มันเป็นสิ่งที่ไม่น่าสังเกตในแง่ของรูปแบบการมองเห็นดังนั้นมันจึงใช้งานได้ในแง่นั้น