ดังนั้นฉันจึงได้สร้างเกมจาวา 2D ขึ้นมาในกรอบนี้เรียกว่าGreenfootและฉันได้ทำงานกับ AI สำหรับผู้ชายที่คุณจะต่อสู้ ฉันต้องการให้พวกเขาสามารถย้ายไปทั่วโลกได้อย่างสมจริงดังนั้นฉันจึงรู้ทันทีว่าในอีกสองสามอย่างฉันจะต้องมีการค้นพบบางอย่าง
ฉันสร้างต้นแบบ A * สองชุด อันแรกเป็นแบบกริดและจากนั้นฉันก็สร้างมันขึ้นมาที่ทำงานร่วมกับจุดอ้างอิงดังนั้นตอนนี้ฉันต้องหาวิธีที่จะได้รับจาก "แผนที่" 2d ของอุปสรรค / สิ่งปลูกสร้างไปยังกราฟของโหนดที่ฉันสามารถสร้างเส้นทางได้ การค้นหาเส้นทางที่แท้จริงดูเหมือนจะดีเพียงแค่รายการเปิดและปิดของฉันเท่านั้นที่สามารถใช้โครงสร้างข้อมูลที่มีประสิทธิภาพมากขึ้น แต่ฉันจะไปที่นั้นถ้าต้องการ
ผมตั้งใจที่จะใช้ตาข่ายเดินเรือด้วยเหตุผลทั้งหมดออกเรียงรายอยู่ในนี้โพสต์บน ai-blog.net อย่างไรก็ตามปัญหาที่ฉันเผชิญคือสิ่งที่ A * คิดว่าเป็นเส้นทางที่สั้นที่สุดจากจุดกึ่งกลาง / ขอบของรูปหลายเหลี่ยมไม่จำเป็นต้องเป็นเส้นทางที่สั้นที่สุดหากคุณเดินทางผ่านส่วนใดส่วนหนึ่งของโหนด เพื่อให้ได้ความคิดที่ดีที่คุณสามารถดูคำถามที่ผมถามใน StackOverflow
ฉันได้รับคำตอบที่ดีเกี่ยวกับกราฟการมองเห็น ฉันได้ซื้อหนังสือเล่มนี้มาแล้ว ( Computational Geometry: Algorithms และ Applications ) และอ่านเพิ่มเติมในหัวข้ออย่างไรก็ตามฉันยังคงชอบการนำทางแบบเครือข่าย (ดู "การจัดการความซับซ้อน " จากหมายเหตุของ Amit เกี่ยวกับการหาเส้นทาง ) (ตามบันทึกด้านข้างบางทีฉันอาจใช้ Theta * เพื่อแปลง waypoints หลาย ๆ อันให้เป็นหนึ่งเส้นตรงหากสิ่งแรกและสิ่งสุดท้ายไม่ถูกบดบังหรือทุกครั้งที่ฉันย้ายกลับไปตรวจสอบที่จุดก่อนที่จะดูว่าฉันสามารถตรงจาก สิ่งนี้)
โดยพื้นฐานแล้วสิ่งที่ฉันต้องการคือการนำทางซึ่งเมื่อฉันใส่ผ่านอัลกอริธึมช่องทาง (เช่นอันนี้จากDigesting Duck ) ฉันจะได้รับเส้นทางที่สั้นที่สุดจริงแทนที่จะได้เส้นทางที่สั้นที่สุดตามโหนดไปยังโหนดเท่านั้น แต่ไม่สั้นที่สุดจริงเนื่องจากคุณสามารถผ่านรูปหลายเหลี่ยมและข้ามโหนด / ขอบ
โอ้และฉันต้องการทราบวิธีที่คุณแนะนำให้เก็บข้อมูลที่เกี่ยวข้องกับรูปหลายเหลี่ยม สำหรับตัวอย่างต้นแบบ waypoint ที่ฉันทำฉันเพิ่งมีแต่ละโหนดเป็นวัตถุและเก็บรายการของโหนดอื่น ๆ ทั้งหมดที่คุณสามารถเดินทางไปจากโหนดนั้นฉันเดาว่าจะไม่ทำงานกับรูปหลายเหลี่ยม? และฉันจะบอกได้อย่างไรว่ารูปหลายเหลี่ยมนั้นเปิด / ผ่านได้หรือว่าเป็นวัตถุทึบ? ฉันจะเก็บโหนดใดที่ประกอบเป็นรูปหลายเหลี่ยมได้อย่างไร
ในที่สุดสำหรับการบันทึก: ฉันต้องการโปรแกรมนี้ด้วยตัวเองตั้งแต่เริ่มต้นแม้ว่าจะมีวิธีแก้ไขปัญหาอื่น ๆ อยู่แล้วและฉันไม่ต้องการที่จะใช้รหัสนี้ในสิ่งอื่นนอกเหนือจากเกมนี้ดังนั้นจึงไม่สำคัญว่า มันจะมีคุณภาพไม่ดีอย่างหลีกเลี่ยงไม่ได้