มีความแตกต่างอย่างมีนัยสำคัญระหว่างการใช้ตารางหรือตารางหกเหลี่ยมสำหรับพื้นที่ที่ค้นหาโดยอัลกอริทึมการค้นหาเส้นทาง กล่าวอีกนัยหนึ่งคือจัตุรัสหรือหกเหลี่ยมดีกว่าและถ้าเป็นเช่นนั้น
มีความแตกต่างอย่างมีนัยสำคัญระหว่างการใช้ตารางหรือตารางหกเหลี่ยมสำหรับพื้นที่ที่ค้นหาโดยอัลกอริทึมการค้นหาเส้นทาง กล่าวอีกนัยหนึ่งคือจัตุรัสหรือหกเหลี่ยมดีกว่าและถ้าเป็นเช่นนั้น
คำตอบ:
ข้อควรพิจารณาหลักในการตัดสินใจว่าจะใช้กริด vs vs hex กริดไม่ควรใช้ความสะดวกในการติดตั้ง AI - อัลกอริธึมการค้นหาแบบกว้างแรกและลึกแรกค่อนข้างเหมือนกันไม่ว่าคุณจะมีกราฟแบบไหน
ค่อนข้างเป็นปัญหาการเล่นเกมที่ผู้ออกแบบเกมควรพิจารณา กริดแบบสแควร์สามารถเข้าถึงตลาดมวลชนได้มากขึ้น (กระดานเลขฐานสิบหกมีแนวโน้มที่จะดู "เกินบรรยาย") และในโลกของการควบคุมขึ้น / ลง / ซ้าย / ขวามันเป็นเรื่องง่ายมากที่จะสำรวจรอบ ๆ กริดสแควร์ยังมีแนวโน้มที่จะ จำกัด การเคลื่อนไหวอีกเล็กน้อย สมมติว่าการเคลื่อนที่แบบฉาก (ไม่ใช่เส้นทแยงมุม) จะใช้เวลา 4 การเคลื่อนไหวเพื่อเดินไปรอบ ๆ สิ่งกีดขวางสี่เหลี่ยมจัตุรัสเมื่อเปรียบเทียบกับการเคลื่อนไหว 3 ครั้งในตารางฐานสิบหก จากมุมมองการเขียนโปรแกรม hexes ก็ง่ายกว่าเล็กน้อยที่จะนำไปใช้ แต่มันไม่เกี่ยวกับอัลกอริธึมการค้นหาเท่าที่กริดสแควร์เท่ากับอาเรย์สองมิติ แต่กริด hex ไม่ได้แมปกับโครงสร้างข้อมูลมาตรฐานจริงๆ
ด้านล่างของกริดสแควร์คือการเคลื่อนไหวไม่เคยรู้สึกถูกต้อง การเคลื่อนที่ในแนวทแยงมุมควรใช้จุดการเคลื่อนไหวของ sqrt (2) แต่ในทางปฏิบัติมันเป็น 1 การเคลื่อนไหว (ซึ่งทำให้รู้สึกว่าการเดินบนเส้นทแยงมุมนั้นเร็วและไม่ค่อยมีเหตุผลที่จะเดินแบบ orthogonally) หรือการเคลื่อนไหว 2 แนว ) ด้วยกริดฐานสิบหกระยะทางในการเคลื่อนไหวนั้นง่ายกว่ามากเนื่องจากเป็นระยะทางเดียวกันจากฐานสิบหกไปยังอีกจุดหนึ่งไม่ว่าคุณจะใช้เส้นทางไหน
ฉันไม่ใช่ผู้เชี่ยวชาญ AI ไม่ว่าด้วยวิธีใด แต่ความแตกต่างควรเล็กน้อย กริดสแควร์นั้นเร็วกว่าเล็กน้อย (4 การเชื่อมต่อต่อโหนดแทนที่จะเป็น 6) แต่นั่นไม่ใช่ปัจจัย จำกัด ในการทำงานแบบอัลกอริธึม ขึ้นอยู่กับว่าคุณวางแผนจะใช้อัลกอริธึมใดรหัสอาจซับซ้อนกว่าเล็กน้อยสำหรับกริดฐานสิบหกเนื่องจากมันซับซ้อนกว่าในการคำนวณพิกัด มักใช้ในการหาเส้นทาง
แต่สำหรับโลกที่เรียบง่ายเช่นระดับเกมเทิร์นเบสที่ใช้กลยุทธ์ความแตกต่างระหว่างเลย์เอาต์ทั้งสองไม่น่าจะสำคัญนัก ตารางสี่เหลี่ยมจะเรียบง่ายและเร็วขึ้นเล็กน้อย
มีความแตกต่างทางปฏิบัติอย่างหนึ่งที่ฉันสามารถคิดได้เกี่ยวกับการวางแผนเส้นทาง การเคลื่อนที่จากจุดกึ่งกลางของเซลล์ฐานสิบหกไปยังเพื่อนบ้านนั้นจะเป็นระยะทางเดียวกันเสมอในขณะที่ถ้าคุณอนุญาตให้เดินทางในแนวทแยงนี่จะไม่เป็นความจริงสำหรับช่องสี่เหลี่ยม
คำแนะนำเกี่ยวกับรูปหกเหลี่ยมนี้ยอดเยี่ยม ส่วนเกี่ยวกับการค้นหาเส้นทางมีตัวอย่างแบบอินเทอร์แอคทีฟและข้อมูลบางส่วนเกี่ยวกับวิธี adapy การค้นหาเส้นทางสี่เหลี่ยม
หากคุณใช้การค้นหาเส้นทางแบบกราฟเช่น A * หรืออัลกอริทึมของ Dijkstra หรือ Floyd-Warshall การค้นหาเส้นทางในกริดฐานสิบหกไม่แตกต่างจากการค้นหาเส้นทางบนกริดสแควร์
- เพื่อนบ้าน โค้ดตัวอย่างที่ฉันให้ในแบบฝึกหัด pathfinding จะเรียก graph.neighbor เพื่อให้ได้ตำแหน่งของเพื่อนบ้าน ใช้ฟังก์ชั่นในส่วนเพื่อนบ้านสำหรับสิ่งนี้ กรองเพื่อนบ้านที่ไม่สามารถใช้ได้
- Heuristic โค้ดตัวอย่างสำหรับ A * ใช้ฟังก์ชันฮิวริสติกที่ให้ระยะห่างระหว่างสองตำแหน่ง ใช้สูตรระยะทางปรับสัดส่วนเพื่อให้ตรงกับต้นทุนการเคลื่อนไหว ตัวอย่างเช่นหากต้นทุนการเคลื่อนไหวของคุณคือ 5 ต่อฐานสิบหกให้คูณระยะทางด้วย 5