ดูเหมือนว่าคุณได้ตอบคำถามของคุณแล้ว A * น่าจะเป็นวิธีที่ดีที่สุด ใช่แน่นอนมันสามารถใช้ในแบบที่คุณอธิบายรวมถึงการใช้ข้อมูลความสูงเพื่อหลีกเลี่ยงภูเขา ตราบใดที่คุณสามารถเข้าถึงข้อมูลเกี่ยวกับกริดใด ๆ บนพื้นผิวโลกของคุณได้ก็ไม่มีเหตุผลที่คุณจะไม่สามารถใช้มันในฮิวริสติก A *
ในที่สุดคุณก็สับสนในการค้นหาเส้นทางด้วยเส้นทางที่ตามมาในตอนท้ายของคำถาม การค้นหาเส้นทางไม่ได้สนใจเรื่องแรงโน้มถ่วงเว้นแต่ว่าคุณจะเพิ่มเป็นฮิวริสติกและเนื่องจากคุณอยู่บนพื้นผิวของดาวเคราะห์แรงโน้มถ่วงจะเท่ากันทั่วทั้งพื้นผิว หลายเกมมีแรงดึงดูดร่วมกับการเคลื่อนไหวฉันไม่เห็นเหตุผลที่คุณทำไม่ได้
โดยพื้นฐานแล้วเราต้องการแมปไปจากสีแดงเป็นสีน้ำเงินเพื่อให้เหมือนกันบนทรงกลมเหมือนบนลูกบาศก์
เนื่องจาก A * มักจะนำเพื่อนบ้านไปยังโหนดปัจจุบันคุณจึงสามารถสร้างชุดฟังก์ชั่นสำหรับรับโหนดที่อยู่ติดกันได้อย่างง่ายดาย ตัวอย่างเช่นgetXPlus()
, getXMinus()
, getZPlus()
และอื่น ๆ ฟังก์ชั่นเหล่านี้จะใช้โหนดปัจจุบันและส่งกลับโหนดในทิศทางที่ระบุโดยชื่อฟังก์ชั่น
เวลาส่วนใหญ่ฟังก์ชั่นเหล่านี้สามารถเพิ่มค่าและทำอย่างไรก็ตามบนขอบที่จะเปลี่ยน
คุณจะต้องการแมปพื้นผิวของคิวบ์ของคุณกับระบบพิกัด 2D อย่างไรก็ตามคุณทำเช่นนี้ขึ้นอยู่กับคุณพวกเขาไม่จำเป็นต้องเข้าแถวเพียงแค่ให้พิกัด X, Y แต่ละพื้นที่ในตาราง
ตอนนี้เมื่ออยู่บนขอบและได้รับพื้นที่กริดที่อยู่ติดกันมันไม่จำเป็นต้องเป็นแค่การเพิ่มพิกัด เราต้องค้นหาใบหน้าที่เรากำลังเคลื่อนไปและเปลี่ยนเป็นพิกัดของใบหน้านั้น
ตัวอย่างเช่นการได้รับพิกัด XPlus ที่นี่จะเปลี่ยนทั้งพิกัด X และ Y เพราะเรากำลังย้ายไปยังพื้นที่กริดใหม่บนใบหน้าใหม่ เส้นสีเขียวแสดงถึงขอบระหว่างใบหน้าทั้งสอง
ตอนนี้เป็นเพียงพิกัดทั่วโลกมันอาจจะง่ายกว่าที่จะใช้ระบบพิกัดภายในด้วยมิติที่ 3 ที่แสดงถึงคิวบ์ใบหน้าที่คุณอยู่ในปัจจุบัน
ไม่ว่าจะด้วยวิธีใดคุณจะต้องมีพิกัดที่ไม่ซ้ำกันสำหรับแต่ละพื้นที่ของกริดบนใบหน้าของคิวบ์ การข้ามระหว่างพวกเขาจะขึ้นอยู่กับวิธีที่คุณใช้ระบบพิกัด คุณจำเป็นต้องรู้ว่าแผนที่นั้นประสานกับพื้นผิวของทรงกลมด้วยเช่นกัน
ในที่สุดทั้งหมดนี้ก็ควรจะถูกแยกออกไปเพื่อที่คุณจะไม่รู้ด้วยซ้ำ