Pacman: कैसे आँखें वापस राक्षस छेद करने के लिए अपना रास्ता खोजने के लिए?


321

मुझे पैकमैन में भूतों के एआई के लिए बहुत सारे संदर्भ मिले, लेकिन उनमें से किसी ने भी यह नहीं बताया कि कैसे पचमन द्वारा भूत खाने के बाद आँखें केंद्रीय भूत छेद में वापस जाती हैं।

मेरे कार्यान्वयन में मैंने एक सरल लेकिन भयानक समाधान लागू किया। मुझे बस हर कोने पर कठोर कोडिंग करनी है कि किस दिशा में जाना चाहिए।

क्या कोई बेहतर / या सबसे अच्छा समाधान है? शायद एक सामान्य एक जो विभिन्न स्तर के डिजाइनों के साथ काम करता है?


11
क्या आप सुनिश्चित हैं कि कोने पर हार्डकोडिंग पर्याप्त अच्छी है? यह सर्वोत्तम मार्ग की गारंटी नहीं देता है। कल्पना कीजिए कि भूत एक लंबे संकीर्ण मार्ग का सामना कर रहा है। आपके एल्गोरिथ्म द्वारा उसे उस पूरे मार्ग से नीचे जाना होगा, एक कोने तक पहुँचना होगा, और फिर सबसे तेज़ मार्ग लेना होगा। यदि आप हर चौक पर हार्ड-कोडिंग करते हैं कि किस दिशा में जाना है, तो वह पहले बस घूमना जान सकता है।
मार्क पीटर्स

3
@ मर्क, एक कोने पर आपकी परिभाषा पर निर्भर करता है। यदि यह एक टी कनेक्शन है भले ही आप शीर्ष रेखा में सीधे जाएं, यह ठीक है।
थोरबजोरन राव एंडरसन

1
@ थोरबजर्न: मैं चौराहों के बारे में भी बात नहीं कर रहा हूं। इस बोर्ड पर एक नज़र डालें: en.wikipedia.org/wiki/File:Pac-man.png । यदि भूत दाएं-बाएं घूम रहा था और नीचे-बाएं से दूसरी बिंदु पर स्थित है, तो यह कुछ समय के लिए किसी चौराहे पर नहीं मिलेगा। इसका कारण यह होगा कि अगर वह पीछे की ओर (बाईं ओर) मुड़ गया और सबसे छोटा रास्ता ले लिया, तो वह 10 वर्गों की यात्रा करेगा।
मार्क पीटर्स

6
आपका समाधान वेपाइंट्स (या ब्रेड क्रम्ब्स) का उपयोग करता है, और मुझे लगता है कि एल्गोरिदम को खोजने के लिए पथ का उपयोग करने के लिए एक आम इस्तेमाल की जाने वाली तकनीक है।
निक डंडौलकिस

1
सारे सवालों के जवाब देने के लिए धन्यवाद! मैं बस अपने पिछले समाधान पर टिक गया और हर कोने में दिशाओं को हार्डकोड किया। यह सामान्य करने के लिए, यह आवश्यक है कि लेवल्ड्वेज़र / एक स्तर फ़ाइल भी इस जानकारी को स्तर परिभाषा में परिभाषित करती है।
RoflcoptrException

जवाबों:


152

वास्तव में, मैं कहूंगा कि आपका दृष्टिकोण किसी भी तरह के पाथफाइंडिंग की तुलना में लगभग शून्य-रन समय लागत के साथ एक बहुत बढ़िया समाधान है।

यदि आपको मनमाने ढंग से नक्शों के सामान्यीकरण की आवश्यकता है, तो आप किसी भी पाथफाइंग एल्गोरिथ्म का उपयोग कर सकते हैं - चौड़ाई-पहली खोज को लागू करना सरल है, उदाहरण के लिए - और इसका उपयोग यह गणना करने के लिए कि खेल को चलाने से पहले कोनों में से प्रत्येक पर कौन सी दिशाओं को एनकोड करना है।

EDIT (11 अगस्त 2010): मुझे सिर्फ Pacman सिस्टम पर एक बहुत विस्तृत पृष्ठ पर संदर्भित किया गया था: Pac-Man Dossier , और जब से मेरे पास यहां स्वीकृत उत्तर है, मुझे लगा कि मुझे इसे अपडेट करना चाहिए। लेख में स्पष्ट रूप से राक्षस घर में लौटने के अधिनियम को शामिल नहीं किया गया है, लेकिन यह बताता है कि पीएसी-मैन में प्रत्यक्ष पाथफाइंडिंग निम्नलिखित का एक मामला है:

  • अगले चौराहे की ओर बढ़ना जारी रखें (हालांकि यह अनिवार्य रूप से एक विशेष मामला है 'जब कोई विकल्प दिया जाता है, तो उस दिशा को चुनें जिसमें आपकी दिशा को उलट देना शामिल नहीं है, जैसा कि अगले चरण में देखा गया है);
  • चौराहे पर, बगल के निकास चौराहों को देखें, जिस पर आप बस से आए थे, को छोड़कर;
  • एक जो लक्ष्य के सबसे पास है उठा। यदि एक से अधिक समान रूप से लक्ष्य के पास है, तो इस क्रम में पहली वैध दिशा चुनें: ऊपर, बाएं, नीचे, दाएं।

16
मुझे लगता है कि इसका मतलब है कि आप इसे रनटाइम पर गणना कर सकते हैं (जब स्तर लोड किया जाता है लेकिन इससे पहले कि आप इसे खेलना शुरू करें) लेकिन सिर्फ एक बार। जिसे बनाए रखना मुश्किल नहीं है।
मार्क पीटर्स

3
हाँ, या यदि उस हिस्से के रूप में नक्शे बनाने के लिए एक उपकरण है।
काइलोटन

6
वापसी के रास्तों के बारे में कुछ भी गलत नहीं है। आप रनटाइम प्रदर्शन के लिए स्टोरेज (पथ) का व्यापार कर रहे हैं।
स्टीव कू

6
धन्यवाद। मुझे लगता है कि इस समाधान के साथ बीमार छड़ी। किसी को भी पता है कि यह मूल Pacman में कैसे किया गया था?
RoflcoptrException

4
नहीं, मैं नहीं। मूल प्रश्न उस शब्द का उपयोग करता था लेकिन यह कानूनी रूप से बाध्यकारी नहीं है।
काइलोटन

85

मैंने इस समस्या को जेनेरिक स्तरों के लिए इस तरह हल किया है: स्तर शुरू होने से पहले, मैं राक्षस छेद से किसी तरह का "बाढ़ भराव" करता हूं; भूलभुलैया की हर टाइल जो एक दीवार नहीं है उसे एक संख्या मिलती है जो कहती है कि यह छेद से कितनी दूर है। इसलिए जब आँखें 68 की दूरी के साथ एक टाइल पर होती हैं, तो वे देखती हैं कि पड़ोसी टाइल में से किसकी दूरी 67 है; फिर जाने का रास्ता है।


15
हाँ। फ़्लडफ़िल किसी भी स्थिति में पाथफाइंडिंग के लिए बहुत अच्छा है जहाँ दुनिया इसे व्यवहार्य बनाने के लिए बहुत बड़ी नहीं है। मुझे लगता है कि इसका उपयोग बड़ी दुनिया में भी किया जा सकता है जिसमें एक मोटे ग्रिड को लगाया जा सकता है जिसकी कनेक्टिविटी प्रचलित थी। यह चीजों को थोड़ा हटकर बनाएगा, लेकिन इस तरह के खेलों में मैंने जो ट्रैफिक जाम देखा है, उससे बेहतर होगा।
लोरेन Pechtel

1
अंतरिक्ष को बचाने के लिए (बड़ी दुनिया, या विवश प्रणालियों के लिए), आप हर चौराहे पर एक मान बचाने के बजाय, प्रत्येक चौराहे पर यात्रा करने की दिशा को बचा सकते हैं। यह अनिवार्य रूप से ओपी का सुझाव था।
ब्लूराजा - डैनी पफ्लुगुएफ्ट

ब्लूराजा: यकीन है, लेकिन ऐसा करना अधिक जटिल है और परिणाम उतना इष्टतम नहीं है - भूत दो चौराहों के बीच खाया जाता है, इसलिए वह कुछ समय के लिए गलत दिशा में भाग सकता है। मेरे समाधान ने en.wikipedia.org/wiki/HP_200LX पर अच्छी तरह से काम किया ताकि कितना अधिक विवश हो सके?
एरिक किट्ज़म्यूलर

5
(मुझे देर हो गई ...) हाँ बाढ़-भरण अच्छा है, हालाँकि आपको वास्तव में एक पूर्ण संख्या की आवश्यकता नहीं है, प्रत्येक वर्ग में एक दिशा (दो बिट्स) का उपयोग करने के लिए अगले वर्ग को इंगित करने के लिए।
Matthieu M.

Matthieu: हाँ, यह एक संभव अनुकूलन होगा।
एरिच किट्ज़म्यूलर

42

अधिक पारंपरिक पाथफाइंग एल्गोरिदम के विकल्प के लिए, आप (उचित रूप से नामित!) Pac-Man Scent Antiobject पैटर्न पर एक नज़र डाल सकते हैं ।

आप स्टार्टअप पर भूलभुलैया के चारों ओर राक्षस-छेद-गंध फैल सकते हैं और आँखें इसे घर पर पालन कर सकती हैं।

एक बार जब गंध सेट हो जाता है, तो रनटाइम लागत बहुत कम होती है।


संपादित करें: दुख की बात है कि विकिपीडिया लेख को हटा दिया गया है, इसलिए बचाव के लिए वेकबैक मशीन ...


2
यह मेरा जवाब होने जा रहा था। यह आमो के अनिवार्य रूप से एक ही है, लेकिन मुझे हमेशा पैशमैन की गंध के बारे में याद है :)
ल्यूक शेफ़र

ऐसा लगता है कि विकिपीडिया लेख मृत / हटा दिया गया है। शीर्ष Google परिणाम यह थ्रेड है, लेकिन मुझे लगता है कि यह करीब आता है।
डेविड

2
मैं एक दूसरे के लिए भ्रमित हो गया लेकिन फिर तुरंत समझ में आया कि "खुशबू" का क्या मतलब है। यह इन अदिश क्षेत्र की चीजों का वर्णन करने का एक शानदार तरीका है!
स्टीवन लू


18

कोई भी सरल समाधान जो काम करता है, रखरखाव योग्य है, विश्वसनीय है और काफी अच्छा प्रदर्शन करता है, एक अच्छा समाधान है। यह मुझे लगता है जैसे आप पहले से ही एक अच्छा समाधान मिल गया है ...

एक पथ-खोज समाधान आपके वर्तमान समाधान की तुलना में अधिक जटिल होने की संभावना है, और इसलिए डिबगिंग की आवश्यकता होने की अधिक संभावना है। यह शायद धीमा भी होगा।

IMO, यदि यह टूटा नहीं है, तो इसे ठीक न करें।

संपादित करें

IMO, अगर भूलभुलैया तो तय हो गई है अपने वर्तमान समाधान है अच्छा / सुरुचिपूर्ण कोड। "चतुर" के साथ "अच्छा" या "सुरुचिपूर्ण" की बराबरी करने की गलती न करें। सरल कोड "अच्छा" और "सुरुचिपूर्ण" भी हो सकता है।

यदि आपके पास कॉन्फ़िगर करने योग्य भूलभुलैया स्तर हैं, तो शायद आपको पथप्रदर्शन तब करना चाहिए जब आप शुरू में mazes को कॉन्फ़िगर करते हैं। सरलतम यह होगा कि हाथ से इसे करने के लिए भूलभुलैया डिजाइनर प्राप्त करें। अगर आपके पास एक बाज़िल माज़ है ... या उपयोगकर्ता उन्हें डिज़ाइन कर सकते हैं, तो मैं इसे स्वचालित रूप से परेशान करूँगा।

(एक तरफ: यदि मार्गों को हाथ से कॉन्फ़िगर किया गया है, तो भूलभुलैया डिज़ाइनर उप-स्तरीय मार्गों का उपयोग करके एक स्तर को और अधिक रोचक बना सकता है ...)


हाँ, यह काम कर रहा है। हालांकि मैं अच्छा कोड लिखना चाहूंगा और केवल कोड ही नहीं। और इसके अतिरिक्त मैंने अपने प्रश्न में अंतिम वाक्य जोड़ा, इसलिए यदि संभव हो तो एल्गोरिथ्म केवल एक भूलभुलैया के लिए नहीं बल्कि कई के लिए होना चाहिए।
RoflcoptrException

mazes भी उत्पन्न किया जा सकता है (मेरे पास एक एल्गोरिथ्म है जो अच्छे दिखने वाले pacman mazes उत्पन्न करता है), इसलिए थोड़ा सा स्वचालन जाने का रास्ता है
Erich Kitzmueller

"... या उपयोगकर्ता उन्हें डिज़ाइन कर सकते हैं।" किस मामले में, आपके पास एक bazillion mazes है।
फ़ूज़न

@ अनुभव - मुझे इस बात की जानकारी है। हालांकि, दो मामलों के बीच एक अंतर है। यदि यह ओपी एक चकाचौंध करने वाला माज़ बनाता है, तो हाथ से मार्ग बनाना एक असुविधा है। यदि यह अंतिम उपयोगकर्ता है ... इसका मतलब है कि ओपी को प्रलेखन लिखना है, अंत उपयोगकर्ताओं की mazes की अंतहीन समस्या निवारण करना, फ़ील्ड की अंतहीन शिकायतें कि यह कैसे अमित्र है, आदि। दूसरे शब्दों में स्वचालित मार्ग निर्माण को लागू करने के कारण अलग हैं
स्टीफन सी

14

मूल Pacman में द घोस्ट ने येलो पिल खाने वाले को अपनी "गंध" से पाया, वह मानचित्र पर एक निशान छोड़ देगा, भूत बेतरतीब ढंग से इधर-उधर घूमता रहेगा जब तक कि उन्हें गंध नहीं मिल जाती, तब वे बस गंध पथ का अनुसरण करेंगे जो उन्हें सीधे ले जाते हैं खिलाड़ी। हर बार पचमन चले गए, "गंध मान" 1 से कम हो जाएगा।

अब, पूरी प्रक्रिया को उल्टा करने का एक सरल तरीका होगा "भूत गंध का पिरामिड", जो कि नक्शे के केंद्र में अपना उच्चतम बिंदु है, फिर भूत सिर्फ इस गंध की दिशा में आगे बढ़ता है।


मुझे वास्तव में यह दृष्टिकोण पसंद है और मैं इसे भी
आज़माऊंगा

5
यह सही नहीं है; यदि वे सभी इस एल्गोरिथ्म का पालन करते हैं, तो वे उसे एकल फ़ाइल का पीछा करते हुए समाप्त कर देंगे। प्रत्येक भूत का व्यवहार अलग है; आप विकिपीडिया लेख पर अधिक जानकारी पा सकते हैं।
डिवाइडर

5

मान लिया कि आपके पास पहले से ही पैक्मैन का पीछा करने के लिए आवश्यक तर्क है कि पुन: उपयोग क्यों नहीं किया जाता है? बस लक्ष्य बदलो। लगता है कि यह ठीक उसी तर्क का उपयोग करके एक पूरी नई दिनचर्या बनाने की कोशिश की तुलना में बहुत कम काम होगा।


हाँ, मेरे पास पहले से ही लागू किए गए
पैक्मैन

मेरे अनुभव में (मुझे मस्ती के लिए पैक्मैन संस्करण लिखना बहुत पसंद है), ऐसा करने से आंखें लंबे समय तक छेद के बाहर अटक सकती हैं। ऐसा इसलिए है क्योंकि पीछा करने वाला एल्गोरिथ्म आमतौर पर "अगर पैक्मैन उत्तर में है, तो उत्तर की ओर" जाता है, लेकिन भूलभुलैया में "जाल" हो सकता है, जहां आंखों को पहले दक्षिण की ओर जाना होगा। चूंकि पैक्मैन चलती है, भूत जल्दी या बाद में बच जाएगा, लेकिन छेद एक निश्चित लक्ष्य है। (नोट: मैं उत्पन्न mazes के बारे में बात कर रहा हूँ)
Erich Kitzmueller


3

केंद्र से दूरी का मान रखने वाले प्रत्येक वर्ग के बारे में क्या? प्रत्येक दिए गए वर्ग के लिए इस तरह से आप सभी संभावित दिशाओं में तत्काल पड़ोसी वर्गों के मूल्यों को प्राप्त कर सकते हैं। आप सबसे कम मान वाले वर्ग को उठाते हैं और उस वर्ग में जाते हैं।

मान किसी भी उपलब्ध एल्गोरिदम का उपयोग करके पूर्व-गणना की जाएगी।


मैं यह सुझाव देने जा रहा था। 'दैत्य-छेद' से शुरू होने वाला एक बाहरी बाढ़। मुझे लगता है कि आपके जवाब से एक तस्वीर को फायदा होगा।
AjahnCharles

3

यह सबसे अच्छा स्रोत था जो मुझे मिल सकता है कि यह वास्तव में कैसे काम करता है।

http://gameai.com/wiki/index.php?title=Pac-Man#Respawn जब भूतों को मार दिया जाता है, तो उनकी असंतुष्ट आंखें अपने शुरुआती स्थान पर लौट आती हैं। यह बस उस स्थान पर भूत के लक्ष्य टाइल को सेट करके पूरा किया गया है। नेविगेशन समान नियमों का उपयोग करता है।

यह वास्तव में समझ में आता है। हो सकता है कि दुनिया में सबसे कुशल नहीं है, लेकिन एक बहुत अच्छा तरीका है कि आप किसी अन्य राज्य या उन रेखाओं के बारे में चिंता न करें जो आप लक्ष्य को बदल रहे हैं।

साइड नोट: मुझे एहसास नहीं था कि उन पीएसी-मैन प्रोग्रामर कितने भयानक थे, उन्होंने मूल रूप से बहुत ही सीमित मेमोरी के साथ बहुत कम जगह में एक संपूर्ण संदेश प्रणाली बनाई ... जो आश्चर्यजनक है।


2

मुझे लगता है कि आपका समाधान समस्या के लिए सही है, उससे भी सरल, एक नया संस्करण अधिक "यथार्थवादी" बनाना है जहां भूत की आँखें दीवारों के साथ जा सकती हैं =)


2
और भी अधिक यथार्थवाद जोड़ने के लिए, भूतों को खुद को दीवारों के माध्यम से स्थानांतरित करने में सक्षम होने की अनुमति दें: डी
थॉमस ईडिंग

3
वे भूत की अपारदर्शी दीवारें हैं, लेकिन दूसरे क्रम के भूत, (भूत का भूत) अधिक पारदर्शी हैं। (आप सुविधाओं में तब्दील बग के साथ कई उपयोगकर्ता मैनुअल पा सकते हैं)
हर्नान एचे जूल

1
+1 "दूसरे क्रम के भूतों" के लिए - ओह हाँ, एक भूत के व्युत्पन्न को निश्चित रूप से दीवारों की तरह पहले क्रम की वस्तुओं को पार करना होगा ... :)
असद अब्राहिम

2

यहाँ एक एनालॉग और स्यूडोकोड को बारूद के बाढ़ भरण का विचार है।

queue q
enqueue q, ghost_origin
set visited

while q has squares
   p <= dequeue q
   for each square s adjacent to p
      if ( s not in visited ) then
         add s to visited
         s.returndirection <= direction from s to p
         enqueue q, s
      end if
   next
 next

विचार यह है कि यह एक चौड़ाई-पहली खोज है, इसलिए हर बार जब आप एक नए आसन्न वर्ग का सामना करते हैं, तो सबसे अच्छा मार्ग पी के माध्यम से होता है। यह ओ (एन) मुझे विश्वास है।


2

मुझे इस बात की अधिक जानकारी नहीं है कि आपने अपने खेल को कैसे लागू किया लेकिन, आप निम्नलिखित कार्य कर सकते हैं:

  1. गेट के लिए आंखों के स्थान की सापेक्ष स्थिति निर्धारित करें। यानी क्या यह ऊपर बचा है? ठीक नीचे?
  2. फिर दोनों दिशाओं में से एक के विपरीत आंखों को घुमाएं (जैसे कि यह गेट के दाईं ओर छोड़ दिया जाता है और गेट के नीचे) इसे घुमाएं और जांचें कि क्या वहां और दीवारें आपको ऐसा करने से रोक रही हैं।
  3. यदि दीवारें आपको ऐसा करने से रोक रही हैं, तो इसे दूसरी दिशा के विपरीत ले जाएं (उदाहरण के लिए, यदि पिन के सापेक्ष आंखों के निर्देशांक उत्तर की ओर सही हैं और यह वर्तमान में बाएं चल रहा था, लेकिन रास्ते में एक दीवार है दक्षिण की ओर चलें।
  4. याद रखने के लिए हर बार जाँच करते रहें कि गेट के सापेक्ष आँखें कहाँ हैं और यह देखने के लिए जाँच करें कि कब अक्षांशीय समन्वय नहीं है। यानी यह गेट के ऊपर ही है।
  5. मामले में यह केवल गेट के ऊपर होता है यदि दीवार है, तो बाएं या दाएं जाएं और इस नंबर को 1 - 4 तक करें जब तक कि आंखें मांद में न हों।
  6. मैं Pacman में एक मृत अंत कभी नहीं देखा है इस कोड मृत सिरों के लिए खाता नहीं होगा।
  7. इसके अलावा, मैंने एक समाधान को शामिल किया है जब आँखें एक दीवार के बीच "डगमगाने" होती हैं जो मेरे छद्मकोड में मूल भर में फैलती हैं।

कुछ छद्मकोड:

   x = getRelativeOppositeLatitudinalCoord()
   y
   origX = x
    while(eyesNotInPen())
       x = getRelativeOppositeLatitudinalCoordofGate()
       y = getRelativeOppositeLongitudinalCoordofGate()
       if (getRelativeOppositeLatitudinalCoordofGate() == 0 && move(y) == false/*assume zero is neither left or right of the the gate and false means wall is in the way */)
            while (move(y) == false)
                 move(origX)
                 x = getRelativeOppositeLatitudinalCoordofGate()
        else if (move(x) == false) {
            move(y)
    endWhile

2

प्रत्येक कोने पर बस एक यादृच्छिक दिशा चुनने का dtb23 का सुझाव, और अंत में आपको राक्षस-छेद की आवाजें बहुत बुरी लगेंगी।

हालाँकि आप खेल की कठिनाई में अधिक भिन्नता लाकर खेल को अधिक मज़ेदार बनाने के लिए इसके अयोग्य रिटर्न-टू-होम एल्गोरिथ्म का उपयोग कर सकते हैं। आप उपरोक्त तरीकों में से किसी एक को लागू करके ऐसा करेंगे जैसे कि आपके वेपॉइंट्स या बाढ़ भराव, लेकिन ऐसा गैर-नियतात्मक रूप से करना। तो हर कोने पर, आप यह तय करने के लिए एक यादृच्छिक संख्या उत्पन्न कर सकते हैं कि क्या इष्टतम तरीका, या एक यादृच्छिक दिशा ले सकता है।

जैसे ही खिलाड़ी स्तरों को आगे बढ़ाता है, आप इस संभावना को कम कर देते हैं कि एक यादृच्छिक दिशा ली गई है। यह स्तर की गति, भूत गति, गोली खाने वाले ठहराव (आदि) के अलावा समग्र कठिनाई स्तर पर एक और लीवर जोड़ देगा। आपको आराम करने के लिए अधिक समय मिला है जबकि भूत सिर्फ हानिरहित आंखें हैं, लेकिन यह समय प्रगति के रूप में छोटा और कम हो जाता है।


2

संक्षिप्त उत्तर, बहुत अच्छा नहीं। :) यदि आप पीएसी-मैन को बदल देते हैं, तो आंखें जरूरी रूप से वापस नहीं आएंगी। कुछ हैक्स के आसपास तैरने से यह समस्या होती है। तो यह एक सहकारी भूलभुलैया होने पर निर्भर है।


2

मैं यह प्रस्तावित करूंगा कि भूत उस रास्ते को संग्रहीत करता है जो उसने छेद से पचमैन तक ले लिया है। इसलिए जैसे ही भूत मर जाता है, वह उल्टे दिशा में इस संग्रहीत पथ का अनुसरण कर सकता है।


2
वह रास्ता शायद बहुत लंबा होने वाला है
अहमद वाई। सलेह

जब भी आप एक नोड का पुनरीक्षण करते हैं तो आप इतिहास से एक लूप को समाप्त कर सकते हैं। यह काफी अधिक प्रत्यक्ष बना देगा। हमेशा एक ही प्रत्यक्ष मार्ग का अनुसरण करने की तुलना में अधिक दिलचस्प हो सकता है, लेकिन अक्सर इसमें कुछ मूर्खतापूर्ण लगभग छोरों (जैसे एक वर्ग के 3 पक्ष) शामिल होंगे।
AjahnCharles

1

यह जानते हुए कि पैक्मैन पथ गैर-यादृच्छिक हैं (यानी, प्रत्येक विशिष्ट स्तर 0-255, इनकी, ब्लिंकी, पिंकी, और क्लाइड उस स्तर के लिए ठीक उसी पथ पर काम करेंगे)।

मैं इसे लेता हूं और फिर अनुमान लगाता हूं कि कुछ मास्टर पथ हैं जो पूरे भूलभुलैया के चारों ओर एक "वापसी पथ" के रूप में घूमते हैं जो कि एक नेत्रगोलक वस्तु लंबित हो जाती है जहां यह है कि जब पीएसी आदमी ने भूत खा लिया।


1

पैशमैन में भूत एक्स या वाई पर पहले मैच की कोशिश करने के संदर्भ में कम या ज्यादा अनुमान लगाने योग्य पैटर्न का पालन करते हैं, जब तक कि लक्ष्य पूरा नहीं हो जाता। मैंने हमेशा यह माना कि यह ठीक उसी तरह था जैसे आँखों के लिए अपना रास्ता खोज रही थी।


1
  1. खेल शुरू होने से पहले नक्शे में नोड्स (चौराहों) को बचाएं
  2. जब राक्षस मर जाता है तो बिंदु (निर्देशांक) ले लो और अपनी नोड सूची में निकटतम नोड ढूंढें
  3. उस नोड से छेद तक शुरू होने वाले सभी रास्तों की गणना करें
  4. लंबाई के हिसाब से सबसे छोटा रास्ता लें
  5. बिंदु और निकटतम नोड के बीच की जगह की लंबाई जोड़ें
  6. ड्रा करें और पथ पर आगे बढ़ें

का आनंद लें!


1

मेरा दृष्टिकोण थोड़ा स्मृति गहन (पैकमैन युग के दृष्टिकोण से) है, लेकिन आपको केवल एक बार गणना करने की आवश्यकता है और यह किसी भी स्तर के डिजाइन (कूद सहित) के लिए काम करता है।

एक बार नोड्स लेबल करें

जब आप पहली बार एक लेवल लोड करते हैं, तो सभी मॉन्स्टर लायर नोड्स 0 (लैयर से दूरी का प्रतिनिधित्व करते हुए) को लेबल करें। आउटवर्ड लेबलिंग से जुड़े नोड्स 1 को आगे बढ़ाएं, नोड्स उनसे जुड़े 2, और इसी तरह, जब तक कि सभी नोड्स लेबल नहीं हो जाते। (ध्यान दें: यह तब भी काम करता है जब खोह में कई प्रवेश द्वार हों)

मैं मान रहा हूं कि आपके पास पहले से ही प्रत्येक नोड का प्रतिनिधित्व करने वाली वस्तुएं और उनके पड़ोसियों के कनेक्शन हैं। छद्म कोड कुछ इस तरह दिख सकता है:

public void fillMap(List<Node> nodes) { // call passing lairNodes
    int i = 0;

    while(nodes.count > 0) {
        // Label with distance from lair
        nodes.labelAll(i++);

        // Find connected unlabelled nodes
        nodes = nodes
            .flatMap(n -> n.neighbours)
            .filter(!n.isDistanceAssigned());
    }
}

लार से बाढ़-भराव

आंखें नीची दूरी लेबल के साथ पड़ोसी के पास जाएं

एक बार जब सभी नोड्स लेबल होते हैं, तो आंखों को राउटिंग तुच्छ होता है ... बस पड़ोसी नोड को सबसे कम दूरी के लेबल के साथ चुनें (ध्यान दें: यदि कई नोड्स में समान दूरी है, तो इससे कोई फर्क नहीं पड़ता कि कौन सा उठाया गया है)। छद्म कोड:

public Node moveEyes(final Node current) {
    return current.neighbours.min((n1, n2) -> n1.distance - n2.distance);
}

पूरी तरह से लेबल उदाहरण

पूरा नक्शा


0

मेरे PacMan खेल के लिए मैंने कुछ हद तक " shortest multiple path homeएल्गोरिथ्म " बनाया है जो कभी भी भूलभुलैया के लिए काम करता है जिसे मैं इसे प्रदान करता हूं (मेरे नियमों के सेट के भीतर)। यह उनकी सुरंगों के पार भी काम करता है।

जब स्तर लोड किया जाता है, तो सभी path home data in every crossroadखाली (डिफ़ॉल्ट) होता है और एक बार भूत भूलभुलैया का पता लगाने के लिए शुरू होता है, crossroad path home informationवे हर बार जब वे "नए" चौराहे पर या एक अलग रास्ते से फिर से अपने ज्ञात चौराहे पर ठोकर खाते हुए अद्यतन होते रहते हैं।


-2

मूल पीएसी-मैन ने पथ-खोज या फैंसी एआई का उपयोग नहीं किया। यह सिर्फ गेमर्स का मानना ​​है कि वास्तव में यह था की तुलना में अधिक गहराई है, लेकिन वास्तव में यह यादृच्छिक था। जैसा कि गेम्स / इयान मिलिंगटन, जॉन फंज के लिए आर्टिफिशियल इंटेलिजेंस में कहा गया है।

यकीन नहीं है कि यह सच है या नहीं, लेकिन यह मेरे लिए बहुत मायने रखता है। ईमानदारी से, मैं इन व्यवहारों को नहीं देखता जिनके बारे में लोग बात कर रहे हैं। पूर्व के लिए रेड / ब्लिंक हर समय खिलाड़ी का अनुसरण नहीं कर रहे हैं, जैसा कि वे कहते हैं। कोई भी खिलाड़ी लगातार, उद्देश्य के बाद नहीं लगता है। मौका है कि वे का पालन करेंगे आप मुझे यादृच्छिक लगता है। और यह यादृच्छिकता में व्यवहार को देखने के लिए बहुत ही आकर्षक है, खासकर जब पीछा करने की संभावना बहुत अधिक है, एक छोटे से स्थान में 4 दुश्मनों और बहुत सीमित मोड़ के साथ। कम से कम इसके प्रारंभिक कार्यान्वयन में, खेल बेहद सरल था। पुस्तक देखें, यह पहले अध्यायों में से एक है।


हाँ, इसने कुछ AI का उपयोग किया। और हाँ ब्लिंकी, जब वह पीछा मोड में है (समय-समय पर यह करने के लिए स्विच) pacman इस प्रकार है तो यह की ऐ सब ठीक
जीन फ़्राँस्वा Fabre
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.