กริดแบบเหลี่ยมหรือเลขฐานหกจะดีกว่าสำหรับการหาเส้นทางหรือไม่


17

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


4
คิดว่าคุณควรใช้อะไรก็ตามที่เหมาะกับการเล่นเกมของคุณ;)
Andrew Russell

คำตอบ:


19

ข้อควรพิจารณาหลักในการตัดสินใจว่าจะใช้กริด vs vs hex กริดไม่ควรใช้ความสะดวกในการติดตั้ง AI - อัลกอริธึมการค้นหาแบบกว้างแรกและลึกแรกค่อนข้างเหมือนกันไม่ว่าคุณจะมีกราฟแบบไหน

ค่อนข้างเป็นปัญหาการเล่นเกมที่ผู้ออกแบบเกมควรพิจารณา กริดแบบสแควร์สามารถเข้าถึงตลาดมวลชนได้มากขึ้น (กระดานเลขฐานสิบหกมีแนวโน้มที่จะดู "เกินบรรยาย") และในโลกของการควบคุมขึ้น / ลง / ซ้าย / ขวามันเป็นเรื่องง่ายมากที่จะสำรวจรอบ ๆ กริดสแควร์ยังมีแนวโน้มที่จะ จำกัด การเคลื่อนไหวอีกเล็กน้อย สมมติว่าการเคลื่อนที่แบบฉาก (ไม่ใช่เส้นทแยงมุม) จะใช้เวลา 4 การเคลื่อนไหวเพื่อเดินไปรอบ ๆ สิ่งกีดขวางสี่เหลี่ยมจัตุรัสเมื่อเปรียบเทียบกับการเคลื่อนไหว 3 ครั้งในตารางฐานสิบหก จากมุมมองการเขียนโปรแกรม hexes ก็ง่ายกว่าเล็กน้อยที่จะนำไปใช้ แต่มันไม่เกี่ยวกับอัลกอริธึมการค้นหาเท่าที่กริดสแควร์เท่ากับอาเรย์สองมิติ แต่กริด hex ไม่ได้แมปกับโครงสร้างข้อมูลมาตรฐานจริงๆ

ด้านล่างของกริดสแควร์คือการเคลื่อนไหวไม่เคยรู้สึกถูกต้อง การเคลื่อนที่ในแนวทแยงมุมควรใช้จุดการเคลื่อนไหวของ sqrt (2) แต่ในทางปฏิบัติมันเป็น 1 การเคลื่อนไหว (ซึ่งทำให้รู้สึกว่าการเดินบนเส้นทแยงมุมนั้นเร็วและไม่ค่อยมีเหตุผลที่จะเดินแบบ orthogonally) หรือการเคลื่อนไหว 2 แนว ) ด้วยกริดฐานสิบหกระยะทางในการเคลื่อนไหวนั้นง่ายกว่ามากเนื่องจากเป็นระยะทางเดียวกันจากฐานสิบหกไปยังอีกจุดหนึ่งไม่ว่าคุณจะใช้เส้นทางไหน


4
+1 นี่เป็นการตัดสินใจออกแบบไม่ใช่การตัดสินใจของ AI หากคุณต้องการกริดแบบหกเหลี่ยมตารางออฟเซ็ตสแควร์เช่นwww-cs-students.stanford.edu/~amitp/game-programming/grids/?hl=thอาจจะดูน่ากลัวน้อยกว่าสำหรับผู้เล่นทั่วไปและมันอาจเทียบเท่ากับรูปหกเหลี่ยมทางคณิตศาสตร์ นอกจากนี้ยังเป็นตัวแทนในหน่วยความจำเช่นกัน

2
+1 สำหรับประโยค "กริดสแควร์สามารถเข้าถึงตลาดมวลชนได้มากขึ้น (กระดาน
เลข

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

ฉันได้นำเกมกลยุทธ์แบบอิงเทิร์นอิงมาใช้กับกริด hex และสี่เหลี่ยมและไม่มีความแตกต่างที่จำเป็นในแง่ของความซับซ้อนในการค้นหาเส้นทาง ฉันได้เปลี่ยนเกมหนึ่งจากแผนที่ฐานสิบหกเป็นแผนที่สี่เหลี่ยมและ (นอกเหนือจากการเรนเดอร์) การเปลี่ยนแปลงเดียวที่ฉันต้องทำก็คือวิธี MapLocation :: GetDistance () ซึ่งคำนวณระยะห่างระหว่างสองส่วน ฉันแค่ต้องปรับการคำนวณเพื่อจัดการกับแถวอื่น ๆ ที่ถูกชดเชยเล็กน้อย ในทั้งสองกรณีคุณสามารถใช้การเป็นตัวแทนในหน่วยความจำเดียวกัน ดังนั้นอย่างที่คนอื่น ๆ พูดกันมันเป็นปัญหาการออกแบบจริงๆ
Mike Strobel

4
เพียงแค่แยกออกจากกัน hexes สามารถแมปกับอาร์เรย์ 2 มิติ รูปภาพกริดสี่เหลี่ยมจากนั้นเลื่อนทุกคอลัมน์คู่ลงครึ่งก้าว คุณมีกริดออฟเซ็ตสแควร์แล้วในตอนนี้
Asmor

3

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

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


5
"กริดแบบสแควร์นั้นเร็วกว่าเล็กน้อย (4 การเชื่อมต่อต่อโหนดแทน 6)" - หากคุณไม่สามารถเดินทางไปตามแนวทแยงมุมได้ในกรณีนี้คือการเชื่อมต่อ 8 จุดเทียบกับ 6
Ian Schreiber

Touche คุณพูดถูก แน่นอนว่าการเชื่อมต่อในแนวทแยงนั้นน่าจะเป็นไปได้
Gregory Avery-Weir

3

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


0

คำแนะนำเกี่ยวกับรูปหกเหลี่ยมนี้ยอดเยี่ยม ส่วนเกี่ยวกับการค้นหาเส้นทางมีตัวอย่างแบบอินเทอร์แอคทีฟและข้อมูลบางส่วนเกี่ยวกับวิธี adapy การค้นหาเส้นทางสี่เหลี่ยม

หากคุณใช้การค้นหาเส้นทางแบบกราฟเช่น A * หรืออัลกอริทึมของ Dijkstra หรือ Floyd-Warshall การค้นหาเส้นทางในกริดฐานสิบหกไม่แตกต่างจากการค้นหาเส้นทางบนกริดสแควร์

  • เพื่อนบ้าน โค้ดตัวอย่างที่ฉันให้ในแบบฝึกหัด pathfinding จะเรียก graph.neighbor เพื่อให้ได้ตำแหน่งของเพื่อนบ้าน ใช้ฟังก์ชั่นในส่วนเพื่อนบ้านสำหรับสิ่งนี้ กรองเพื่อนบ้านที่ไม่สามารถใช้ได้
  • Heuristic โค้ดตัวอย่างสำหรับ A * ใช้ฟังก์ชันฮิวริสติกที่ให้ระยะห่างระหว่างสองตำแหน่ง ใช้สูตรระยะทางปรับสัดส่วนเพื่อให้ตรงกับต้นทุนการเคลื่อนไหว ตัวอย่างเช่นหากต้นทุนการเคลื่อนไหวของคุณคือ 5 ต่อฐานสิบหกให้คูณระยะทางด้วย 5
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.