2011-11-15 16 views
8

मैं वर्तमान में जावा में एक pacman खेल बना रहा हूं। हालांकि भूत के बारे में मेरा कोई सवाल है।Pacman भूत ऐ

मैं समझता हूं कि भूत के पास हमले की एक ही शैली नहीं है। मैं सबसे पहले भूत को पॅकमैन के बाद जाने के मूल बातें पर काम करना चाहता हूं और अभी तक मतभेदों के बारे में चिंता न करें।

मेरे लिए सवाल यह है कि भूत लोगों को यह सवाल है कि भूत को पॅकमैन का पीछा करने का सबसे अच्छा तरीका क्या होगा लेकिन कभी-कभी यादृच्छिक रूप से मार्गों को बदलना। मैं वर्तमान में 21 से 21 2 डी सरणी का उपयोग कर कह रहा हूं कि दीवारें कहां हैं और ऐसा इसलिए मैं सोच रहा था कि इसे पॅकमैन के वर्तमान ग्रिड स्थान के लिए और अधिक प्रयास करें और सिर बनाएं। (उदाहरण के लिए 10,14 पर जाएं) बेशक, पॅकमैन जैसी दीवारों से गुजरने से बचें। मैं सोच रहा हूं कि मैं इसे कैसे कर सकता हूं और भूत कभी-कभी रोकते हैं और दूसरी दिशा या कुछ भी जाते हैं ताकि यह हमेशा एक निरंतर पीछा न हो और पॅकमैन को दूर जाने का मौका मिले। हो सकता है कि आप में से कुछ ने एक पॅकमैन गेम प्रोग्राम किया हो या बस इसके लिए एक अच्छा तरीका जानें। किसी भी तरह की सहायता का स्वागत किया जाएगा।

(कृपया ध्यान दें मैं एक ग्रेड 11 कंप्यूटर विज्ञान पाठ्यक्रम में और आधे रास्ते सीखा जावा का कभी पहले सेमेस्टर के माध्यम से वर्तमान में कर रहा हूँ।)

+0

ग्रेड 11 क्या है, हम में से उन लोगों के लिए जो Anglosaxoborg द्वारा आत्मसमर्पण का विरोध करते हैं? –

+0

@ लार्समैन हाई स्कूल में यह तीसरा साल का कोर्स है हालांकि मैं हाई स्कूल के अपने दूसरे वर्ष में हूं, मैं कोर्स लेने के लिए इंतजार नहीं कर सका। – ComputerLocus

+0

मैं देख सकता था कि आपकी उपयोगकर्ता प्रोफ़ाइल पर, ज़ाहिर है :) –

उत्तर

6

तुम सिर्फ सभी एक ही व्यवहार करने के लिए भूत चाहते हैं, जब भी एक चौराहे सामना करते हैं, अपने निर्णय कुछ उचित पीछा डिफ़ॉल्ट के एक यादृच्छिक मिश्रण (जैसे Pacman के कम से कम दूरी के साथ जिस तरह से जारी के रूप में बनाने के - उपयोग Dijkstra's algorithm सभी उत्तराधिकारी पर सर्वश्रेष्ठ चुनने के लिए) और एक यादृच्छिक विकल्प।

+0

तो आपकी कहानियां उन्हें छेड़छाड़ से यादृच्छिक मोड़ चुनती हैं, फिर भी यह संभवतः अधिक संभव है कि वे दिशा में जा रहे हैं pacman जा रहा है? – ComputerLocus

+1

@ बिल्कुल सही। वे मूल्य जो भूत को एक साथ चिपकने से रोकते हैं लेकिन गेम को दिलचस्प रखते हैं, प्रयोगों (भूलभुलैया के आकार के आधार पर) द्वारा निर्धारित किया जाना चाहिए, लेकिन मुझे लगता है कि 50% यादृच्छिक विकल्प - 50% सबसे छोटा रास्ता स्वीकार्य परिणाम देगा। –

+0

ठीक है मुझे विचार पसंद है और अधिकतर इस या @ लार्समैन के जवाब के साथ कुछ उपयोग करेंगे। – ComputerLocus

4

मैं बहुत उपयोगी इस लेख पाया: Understanding Pac-Man Ghost Behavior, के रूप में यह बताते हैं तो आप सिर्फ क्या जरूरत है ।

+0

हां, मुझे पता है कि प्रत्येक भूत का अपना व्यवहार होता है, लेकिन इस पाठ्यक्रम में मुझे उम्मीद नहीं है कि मैं इस तरह की जटिलता का एक गेम प्रोग्राम कर रहा हूं। मैं बस मूलभूत पीछा प्रणाली को जोड़ना चाहता हूं न कि अभी तक इस विधियों के उन्नत। – ComputerLocus

4

यहां एक संभावना है: भूत के सभी कदमों के लिए, गणना करें कि क्या यह कदम इसे पैकमैन के करीब लाएगा। यही कारण है कि Manhattan distance है, जो एक 2 डी ग्रिड में सिर्फ x दूरी है + y दूरी के साथ किया जा सकता है। फिर यादृच्छिक रूप से एक कदम उठाएं, उन चरणों को सौंपी गई उच्च संभावना के साथ जो वास्तव में इसे करीब ले जाएगा।

आप पहली बार n_closing_in चरण हैं, जो भूत Pacman के करीब ले जाएगा का प्रतिनिधित्व चरणों के साथ एक सरणी steps है, तो आप उन prob_closing_in की कुल संभावना

double total_probility = 1.; 
for (int i=0; i<n_closing_in; i++) { 
    step_prob[i] = prob_closing_in/n_closing_in; 
    total_probability -= prob_closing_in/n_closing_in; 
} 

साथ फिर इसी तरह वितरित क्या बचा है प्रदान कर सकते हैं total_probability में उन चरणों में जो भूत को पैकमैन से दूर ले जाएंगे।

Step random_step(Step[] possible_steps, double[] step_prob) { 
    double r = Math.random(); 

    int i; 
    for (i=0; i<possible_steps.length(); i++) { 
     if (r < step_prob[i]) 
      break; 
     r -= step_prob[i]; 
    } 
    return possible_steps[i]; 
} 

भूलभुलैया जटिल नहीं है और में बंद की संभावना >.5 है, भूत Pacman के बाद का पीछा करने दिखाई देते हैं, लेकिन एक बेतरतीब तरीके से होगा।

prob_closing_in1. की ओर बढ़ाना खेल को और अधिक कठिन बना देगा।

(ऊपर कोड के सभी अपरीक्षित है और बग हो सकते हैं। मैं जावा में बहुत अच्छा नहीं हूँ।)

+0

ठीक है तुमने मुझे वहां खो दिया। मैंने पहले कदमों के बारे में कभी नहीं सीखा है। – ComputerLocus

+0

@ सबसे बढ़िया: मैं 'एनम चरण {बाएं, दाएं, यूपी, नीचे}' के साथ सोच रहा था। –

+0

अभी भी समझ में नहीं आता है ... – ComputerLocus

1

मेरे कॉलेज स्तर ऐ पाठ्यक्रम के लिए, मैं Pacman भूत के एक पुराने संस्करण के साथ कुछ काम किया एआई ढांचा। ऐसा लगता है कि वर्तमान संस्करण http://www.pacman-vs-ghosts.net/software (Now DEAD) पाया जा सकता है। इसमें आप एजेंट या उपयोगकर्ता नियंत्रित Pacman को आज़माने और कैप्चर करने के लिए अपने स्वयं के भूत एजेंट विकसित करेंगे।

यह अलग ऐ तकनीक के साथ चारों ओर खेलने में बहुत उपयोगी था।

आपके प्रश्न के मुताबिक, उस ढांचे में स्तर वास्तव में ग्राफ से बने हैं और 2 डी सरणी नहीं हैं। आप यह देखने के लिए कोड देख सकते हैं कि वे इसे कैसे करते हैं।

मूल लिंक मर चुका है और अभी तक एक आधिकारिक दर्पण नहीं मिला है। हालांकि, नीचे शायद मदद की हो जाएगा:

Understanding Pac Man Ghost Behavior Ms Pac Man Vs Ghost AI (GitHub) PacMan_v6.2 (GitHub)

+0

इसे देखेंगे लेकिन मेरे कौशल स्तर पर विचार करें। – ComputerLocus

+0

खुद को चुनौती दें! ;-) – Casey

+0

वह लिंक पुराना है। – jumpnett

0

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

सारांश: मैनहट्टन दूरी के साथ बीएफएस दूरी हेरिस्टिक।

यदि आप फैनसीयर प्राप्त करना चाहते हैं, और अपने भूत को शिकार में और भी अधिक कुशल बनाते हैं, तो आप एक गेम स्टेट हेरिस्टिक (भूत से पीएसी-मैन की दूरी पर आधारित, और अब तक कितने डॉट्स पीएसी-मैन ने खाया है , उदाहरण के लिए) जब भूत को चुनना है कि कौन सा अगला कदम उठाना है। इस मामले में रनटाइम को छोटा करने के लिए आप pruning techniques का उपयोग कर सकते हैं।