शूट-अप-अप में एक बुद्धिमान दुश्मन को कैसे लागू किया जाए?


13

एक बहुत ही सरल शूट-इम-अप की कल्पना करें, जो हम सभी जानते हैं:

गोली मारना em-up १

आप खिलाड़ी (हरे) हैं। आपका आंदोलन Xअक्ष पर सीमित है । हमारा दुश्मन (या दुश्मन) स्क्रीन के शीर्ष पर है, उनका आंदोलन भी Xधुरी तक ही सीमित है । खिलाड़ी दुश्मन पर गोलियां (पीला) फायर करता है।

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

वेटेड शूट-एम-अप

दो वज़न हैं: "बुलेट-वेट" (ग्रे) एक बुलेट द्वारा लगाया गया खतरा है। शत्रु के करीब गोली जितनी अधिक होती है, उतना ही "बुलेट-वेट" ( 0..1, जहाँ 1 सबसे अधिक खतरा होता है)। एक गोली के बिना लैंस का वजन 0. है दूसरा वजन "दूरी-वजन" (चूना-हरा) है। हर लेन के लिए मैं 0.2मूवमेंट कॉस्ट जोड़ता हूं (यह मूल्य अब मनमाना है और इसे ट्वीक किया जा सकता है)।

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

तो मैं यहाँ देख रहा हूँ:

शूट-ए-अप कुल विनाश

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

तो आप इससे कैसे निपटेंगे? इस शैली के अन्य खेलों के विपरीत, मैं केवल कुछ, लेकिन बहुत "कुशल" दुश्मनों के बजाय गूंगा दुश्मनों का सामना करना चाहता हूं।


2
क्या आपने स्टीयरिंग व्यवहार जैसी किसी चीज़ का उपयोग करने पर विचार किया है? : वहाँ बाधा निवारण विशेष रूप से के लिए एक है red3d.com/cwr/steer/Obstacle.html
Tetrad

@ टेट्राद मैंने स्टीयरिंग बिहेवियर के बारे में सोचा है .. इसलिए भी कि उन्हें अच्छी तरह से स्विच किया जा सकता है, जैसे "खिलाड़ी को शूट करने की कोशिश" और जब खतरा "स्विच" के लिए आगे होता है। मुझे डर है कि 1 डी (जो मैं मूल रूप से काम कर रहा हूं) से बचने का संस्करण भी अच्छा निर्णय लेने के लिए बहुत गूंगा होगा। हो सकता है मैं गलत हूं।
बंमज़ैक

जवाबों:


8

मुझे लगता है कि आपका मूल विचार ध्वनि है, लेकिन यह एनालॉग नहीं है। आपको स्क्रीन पर चलने वाले मान का एक एनालॉग फ़ील्ड चाहिए। तो, 1D प्रसार ढाल, जिसमें से आप उस लाइन पर एक सटीक बिंदु पर, मक्खी पर एक मूल्य प्राप्त कर सकते हैं। डिफ्यूजन ग्रेडिएंट सस्ते होते हैं और एक साथ कई दुश्मनों द्वारा उपयोग किए जा सकते हैं, जैसा कि वे पर्यावरण का वर्णन करते हैं, न कि इकाई का दृष्टिकोण (थोड़ा सा प्रकाशिकीय प्रकाश जैसा) - शायद इसलिए आपने अपने प्रश्न में दृष्टिकोण का विकल्प चुना है। । यह ढाल अपेक्षाकृत चिकनी होनी चाहिए, ताकि दुश्मन से जैविक आंदोलन को उकसाया जा सके, और जाहिर है कि आपके गेमस्टैट के रूप में अपडेट होता है। शायद चलती औसत ?

ढाल को गठबंधन करना चाहिए:

  • निकटता
  • वेग
  • गोली की चौड़ाई
  • (वैकल्पिक रूप से) लक्ष्यों की स्थिति (खिलाड़ी)

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

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

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

IRL, मैं एक प्रक्षेप्य को चकमा देने तक परेशान नहीं करूंगा जब तक कि यह एक दूरी के भीतर नहीं है, जो मुझे पता है, मेरी शीर्ष चकमा देने की गति से, बचने के लिए मुश्किल हो रहा है। पहले हाथ का अनुभव एक पत्थर के रूप में पत्थर फेंकने से। वेग y पर यात्रा करने वाली x दूरी पर एक गोली 2y पर यात्रा करने वाली 2x दूरी पर गोली के समान खतरे की रेटिंग है। इसलिए इसे सही तरीके से समझने की जरूरत है।

दुश्मन की कठिनाई के लिए एल्गोरिथ्म को ट्विक करने के तरीके शामिल हैं

  • ग्राफ के अपडेट पर एक विलंबता का परिचय (बोर्न टू स्लो)
  • ग्राफ में यादृच्छिक, स्थानीय innaccuracies शुरू करना
  • बस दुश्मनों का पालन नहीं करना है कि ग्राफ उन्हें क्या बताता है, अपडेट के एक क्रम पर (1 से 10 फ्रेम कहो) सरासर एआई आलस्य के कारण।

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


1
प्रिय निक। मैं फ़्लैश में उस व्यवहार के एक छोटे परीक्षण-संस्करण को कार्यान्वित करता हुआ आगे बढ़ा और मैं परिणाम से बहुत खुश हूँ (गोलियां बेतरतीब ढंग से फैली हुई हैं)। मैं वर्तमान में 3 ग्रेडिएंट्स का उपयोग कर रहा हूं, एक खतरे के लिए, आंदोलन लागत और किनारों के लिए एक स्थिर (ताकि स्क्रीन के किनारों को कम वांछनीय हो)। उन्हें फ्लैश एप्लिकेशन में कल्पना की जाती है। मुझे लगता है कि कुछ ट्विकिंग के साथ मैं बहुत अच्छे परिणाम प्राप्त कर सकता हूं और शूटिंग की स्थिति जैसे अन्य वजन में भी कारक हो सकता हूं। बहुत बहुत धन्यवाद दोस्त।
बुमज़ैक

1
हे @bummzack, यह एक खुश साथी है, यह एक शांत थोड़ा डेमो है! समस्या का आपका दृष्टिकोण मेरे लिए नया था और दिलचस्प लग रहा था - मुझे खुशी है कि यह काम करता है! इसके साथ मदद करने के लिए खुशी है, और साझा करने के लिए धन्यवाद।
इंजीनियर

7

इसे पथ-प्रदर्शक समस्या के रूप में देखा जा सकता है। यह सोचने के बजाय कि बदमाशी गोलियों से कैसे बचती है, गोलियों की इमेजिंग स्थिर होती है और बैडी को स्क्रीन के नीचे तक यात्रा करनी चाहिए।

    E    
B  B**B
  B***B  B
 B***B   B
B**B** B 
 B**B**BB
B*****B B
      P

ई = दुश्मन
बी = बुलेट
पी = खिलाड़ी
* = स्क्रीन के नीचे करने के लिए पथ विकल्प

एक बार जब बदमाश ने एक सफल रास्ता तैयार कर लिया तो उसे हर बार अगला कदम उठाने की जरूरत होती है। पथ खोजने के लिए आस-पास पहले से ही कुछ अच्छे एल्गोरिदम हैं जैसे कि यह। यदि बैली उसी गति से चलती है जैसे कि एक उदाहरण एल्गोरिथ्म गोलियां हो सकती हैं;

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


1
दिलचस्प दृष्टिकोण। मुझे डर है कि यह थोड़े महँगा है, हालाँकि जैसे-जैसे वातावरण में तेज़ी से बदलाव आता है और आम रास्ता खोजने वाले एल्गोरिदम का उपयोग करना कठिन होता है क्योंकि वे असतत "मैप्स" के साथ सबसे अच्छा काम करते हैं।
बंमज़ैक

यह बहुत महंगा नहीं होना चाहिए, यह मत भूलो कि आपको केवल प्रत्येक पंक्ति के नीचे की पंक्ति की गणना करनी है, आपको पूरी बात याद नहीं करनी है।
क्वर्की

@bummzack पर्यावरण "तेज" नहीं है, कम से कम, कंप्यूटर के मामले में। गेम डेवलपर के लिए, आपको यह समझना चाहिए कि लगभग हर गेम स्टेप आधारित है, यह उस स्टेप के आकार के बारे में है। लेकिन, प्रत्येक चरण में, गणना की जा सकती है, इसलिए क्वर्की सॉल्यूशन वह चीज है जिसकी आपको आवश्यकता है।
डेले

दरअसल, मैं @bummzack से सहमत हूं। जबकि यह दृष्टिकोण तार्किक रूप से ठोस है, यह प्रश्न में प्रस्तावित 1 डी दृष्टिकोण की तुलना में अधिक महंगा होगा। समय से पहले अनुकूलन हो सकता है, लेकिन मुझे लगता है कि दृष्टिकोण कहीं अधिक सुरुचिपूर्ण है। उस पर विस्तार के लिए मेरा जवाब देखें।
इंजीनियर

2
यह शायद उचित उत्तर है, लेकिन वास्तव में यथार्थवादी नहीं है । समय में यह दुश्मन को एक पथ का काम करने के लिए ले जाता है, क्षेत्र में गोलियों का एक और सेट हो सकता है जो पूरी तरह से पथ को अमान्य करता है, जिसका अर्थ है कि पथ को पुन: परिकलित करना एक आवश्यक होगा। और पुनर्गणना एक कुतिया है । इसके अलावा, जहां यह सुरक्षित था, उस बिंदु पर बैकप्रोपैगेटिंग का आपका विचार इसे और भी महंगा बनाता है! @ निक विगिल मुझे नहीं लगता कि यह समय से पहले अनुकूलन है, यह सुनिश्चित करने के लिए सिर्फ अच्छा दूरदर्शिता है कि आप अपने आप को क्रॉच में न मारें।
रे डे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.