के लिए एक स्टार पाथफाइंडिंग एल्गोरिदम हेरिस्टिक, मैं snake game का निर्माण कर रहा हूं जो घन की सतह पर चलता है। वर्तमान में यह पथदर्शी के लिए डिजस्ट्रा के एल्गोरिदम का उपयोग करता है। सेट और प्राथमिकता कतार डेटा संरचनाओं के अनुकूलन के बावजूद, यह अभी भी थोड़ा धीमा है। जब आप सांप एक खाद्य पदार्थ खाते हैं और एक नया खोजना शुरू करते हैं तो आप देरी देखते हैं।क्यूब सतह
मैं इसे ए * का उपयोग करने के लिए प्राप्त करने की कोशिश कर रहा हूं लेकिन मुझे एक अच्छा ह्युरिस्टिक नहीं मिल रहा है। आंदोलन के 4 दिशाओं के साथ एक फ्लैट ग्रिड पर, मैं मैनहट्टन दूरी का उपयोग करूंगा। मैंने 3 डी मैनहट्टन दूरी abs(dx) + abs(dy) + abs(dz)
का उपयोग करने की कोशिश की है जो अच्छे कारण के लिए काम नहीं करता है: सांप के लिए, गेम दुनिया वास्तव में 6 grids (corresponding to the faces of the cube) असामान्य लपेट-आसपास गुणों के साथ है।
कोड में, प्रत्येक वर्ग को grid[15][15]
2D सरणी में संग्रहीत किया जाता है। प्रत्येक चेहरे को स्टोर करने के लिए 6 ऐसे सरणी हैं। तो प्रत्येक वर्ग में 212 सरणी में ऑफ़सेट का वर्णन करने के लिए (arrayX, arrayY, d)
ट्रिपल है और कौन सी सरणी निर्दिष्ट करें। इसके अलावा, प्रत्येक वर्ग में (x, y, z)
ट्रिपल स्थानिक स्थिति का वर्णन करता है।
https://github.com/mhluska/Snakeception/blob/master/src/js/game.coffee#L105
यहाँ एक * के लिए पुस्तकालय कोड है::
यहाँ खेल कोड के क्षेत्र है जहां pathfinding होता है
https://github.com/mhluska/Stimpack/blob/master/src/js/graph.coffee#L60
क्या इस के लिए एक उपयुक्त, संक्षिप्त अनुमानी है गेम की दुनिया?
आप अपने ग्राफ को 2 डी + आकार वाले ग्रिड के रूप में सोच सकते हैं जो चारों ओर लपेटता है, इसलिए ए * के लिए आपका उत्साही केवल कुछ मूल्यों को ले रहा है * (कल्पना करने की कोशिश करें कि आप इसे 1 डी पर कैसे करेंगे ग्रिड जो पहले चारों ओर लपेटता है) *। हालांकि, केवल 1000 नोड्स के साथ, जावास्क्रिप्ट में भी यह वास्तव में आवश्यक नहीं होना चाहिए। आपके कोड का कुछ हिस्सा (या शायद आपके द्वारा उपयोग किए जाने वाले डेटा-स्ट्रक्चर) ** रास्ते ** को चलाने के लिए बहुत लंबा समय ले रहा है। आपको कुछ प्रोफाइलिंग करने की ज़रूरत है, यह निर्धारित करने के लिए कि कौन सी रेखाएं मंदी का कारण बन रही हैं - आपको आसानी से बिना किसी देरी के 1000 से अधिक नोड्स खोजना चाहिए। –