अपूर्ण पोंग ए.आई.


19

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

यह जानते हुए कि गेंद कहाँ से टकराएगी, काफी तुच्छ लगती है, और एक एआई बनाना जो गेंद को हमेशा हिट करता है, ऐसा करने के लिए एक आसान बात लगती है, लेकिन मैं चाहता हूं कि खेल जीता जा सके, इसलिए मैं हमेशा आईए को हिट नहीं कर सकता गेंद।

तो यहाँ मेरा सवाल है, मुझे इसे एआई में मानव जैसी खामियों को जोड़ने के लिए कैसे कोड करना चाहिए। क्या मुझे बेतरतीब ढंग से तय करना चाहिए कि क्या AI किसी दिए गए बिंदु पर विफल हो रहा है? या यहां कोई होशियार (या शायद सिर्फ स्पष्ट) बात मुझे याद आ रही है?

आपका बहुत बहुत धन्यवाद।


5
आम तौर पर आप एआई बल्ला बनाते हैं केवल एक निश्चित गति से चलते हैं ताकि गेंद अच्छी तरह से उस खिलाड़ी द्वारा रखी जाए जो एआई तक नहीं पहुंच सके ..

4
मैं उस गति को सीमित करके शुरू करूँगा जिस पर AI पैडल को स्थानांतरित कर सकता है, और / या बेतरतीब (कम) अंतराल में बिल्डिंग से पहले AI हिट करने के लिए प्रतिक्रिया देना शुरू कर देता है।


4
@ बाइट 56 मैं वास्तव में इसे उस सवाल का एक हिस्सा नहीं कहूंगा। ऐसा लगता है कि यहां दिया गया उदाहरण blog.stackoverflow.com/2011/01/… "के तहत" यदि आप किसी उपयोगकर्ता के प्रश्न को एक डुप्लिकेट के रूप में बंद करने जा रहे हैं, तो उसे वास्तविक डुप्लिकेट होना चाहिए "। यह प्रश्न एक अच्छा संसाधन है (और कोई व्यक्ति शायद उस प्रश्न का उपयोग स्वयं किसी सामग्री को दिए गए उत्तर को प्राप्त करने के लिए कर सकता है), लेकिन यह वास्तव में इस प्रश्न की बारीकियों का जवाब नहीं देता है, मुझे नहीं लगता।
टेट्राद

1
@Tetrad मुझे लगता है कि उत्तर बहुत समान हैं, लेकिन, आप सही हैं, प्रश्न अलग हैं। मुझे लगता है कि यह प्रश्न लिंक किए गए प्रश्न का अधिक विशिष्ट संस्करण है। अगर ओपी पहले दूसरे को देखता, तो मुझे यकीन नहीं होता कि यह सवाल पूछा जाता। जब मैंने मतदान किया, तो मैं अनिर्दिष्ट था, इसलिए मैंने प्रश्न और उत्तर दोनों को दोहराया और एक डुप्लिकेट के रूप में मतदान किया। यह मेरे लिए किसी भी तरह से जा सकता है।
MichaelHouse

जवाबों:


20

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

अदृश्य गेंद ए.आई.

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

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

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

सेटिंग्स : आप अदृश्य गेंद की गति को भी मोड़ सकते हैं, क्योंकि यह निर्धारित करेगा कि AI कितनी आगे की योजना बनाएगा। अदृश्य गेंद जितनी तेज़ होगी, पैडल को ब्लॉक करने के लिए उतने ही अधिक समय के लिए और बेहतर खिलाड़ी को निशाना बनाना होगा।


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

यह मेरे सेटअप के लिए पूरी तरह से काम करता है क्योंकि मेरे पास कुछ विशेष चालों के आधार पर चर कोण, वेग और त्वरण है, इसलिए गेंद संभवतः सभी जगह हो सकती है। AI स्वामित्व में था, लेकिन अब यह बहुत बेहतर है। मैं देख सकता हूं कि लॉक स्पीड और 45 डीजी कोण के लिए यह तरीका सबसे अच्छा क्यों नहीं है, लेकिन यह मेरा खेल बिल्कुल भी नहीं है।
जैक्रगाइल

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

यदि आप अधिक निष्ठा चाहते हैं, तो आप प्रति फ्रेम दो बार ट्रेसर बॉल की स्थिति को पुनर्गणना कर सकते हैं और प्रत्येक गणना के लिए गति को आधा कर सकते हैं।
DDR

22

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


इस। एआई को यह जानने में मदद नहीं करता है कि गेंद कहाँ से टकराएगी अगर यह केवल फ्रेम में कह सकता है, कह सकता है, प्रति फ्रेम 3 पीएक्स और इसे ऊपर से नीचे की ओर ले जाना है।
कीथ्स

14

जब मैंने अपने TI83 पर एक ओह-इतना भयानक लगभग पैक्मैन क्लोन बनाया? कैलकुलेटर, मैं सबसे बड़ी समस्या यह थी कि "भूत" बहुत तेज़ थे। मुझे उन्हें किसी तरह धीमा करना पड़ा। तो, मैं वहाँ एक बड़ा पुराना पाप (cos (tan (x-ordinate))) में डाल दिया। आसान स्तर उस गणना को कुछ बार करेगा, और कठिन स्तर केवल एक ही ऑपरेशन करेगा।

बिंदु है, प्रतिक्रिया समय। एक सामान्य मानव प्रतिक्रिया समय क्या है, इस पर शोध करें और इस पर 10ms जोड़ें। कि एक प्रारंभिक बिंदु के रूप में उपयोग करें। जैसा कि स्तर कठिन हो जाता है, प्रतिक्रिया समय से समय हटा दें ... जो Thread.sleep(time);एआई के लिए एक सरल हो सकता है । एआई बढ़ने से पहले उस समय की प्रतीक्षा करें।

आप यह भी नियंत्रित कर सकते हैं कि पैडल कितनी तेजी से चलता है, या, यदि आप वास्तव में जटिल होना चाहते हैं, तो यह निर्धारित करें कि जानकारी के अलग-अलग डिग्री के आधार पर गेंद कहाँ होगी ... वेक्टर के बजाय केवल 2 पिक्सेल कहें। एआई को पुनर्गणना के लिए मजबूर करते हुए, यादृच्छिकता की एक डिग्री जोड़ने के लिए दीवारों में कोण संशोधक जोड़ें।


2
क्या आप बता सकते हैं कि आपने वास्तव में क्यों इस्तेमाल किया sin(cos(tan(x)))?
अशक्त

5
क्योंकि मैं युवा था, बेवकूफ था, और एक TI83 पर, पाप (cos (tan (x))) ने AI में एक अच्छी इकाई बनाई। इसके अलावा, क्योंकि मेरी जानकारी के अनुसार, कैलकुलेटर में एक प्रतीक्षा आदेश नहीं था जो मिलीसेकंड का उपयोग कर सकता था। शायद कुछ स्पष्टता: मैंने असेंबली या माइक्रो स्क्रिप्ट या उस भाषा का उपयोग नहीं किया, जिसे आप उन चीजों पर चलाने के लिए संकलित कर सकते हैं। मैंने इन-फर्मवेयर प्रोग्रामिंग कोड (prgm बटन) का उपयोग किया। मेरे पास किसी भी समय स्क्रीन पर कोड की अधिकतम 8 लाइनें थीं। मैं कुछ समय के लिए और अधिक जटिल याद नहीं कर सका।
रसेल उहल

2
मैंने TI83 के इन-फ़र्मवेयर कोड पर प्रोग्राम करना सीखा। फिर मुझे C ++ में संरचित प्रोग्रामिंग को फिर से सीखना पड़ा। मैं कहूंगा कि TI83 ने मुझे सिखाया कि स्पेगेटी स्ट्रिंग कोड क्या है, और इसका बुरा क्यों है। मैंने तब से गोटो स्टेटमेंट का उपयोग नहीं किया है। हालांकि अच्छा समय है।
संदर्भस्विच

2
ओह गुड लॉर्ड, गोटो। मैं अब और फिर कोड को फिर से देखता हूं .... और जल्दी से हार मान लेता हूं। मुझे पता नहीं है कि मैं अपनी गणित कक्षाओं के दौरान कुछ हफ्तों तक इस चीज को कैसे प्रोग्राम कर पाया।
रसेल उहल

1
अपने ट्रिगर देरी के बारे में रक्षात्मक होने की आवश्यकता नहीं है। लूप में फ्लोटिंग पॉइंट मैथ कई दशकों पहले लिखे गए प्रोग्रामों में ठहराव का एक सामान्य तरीका था और आपके कैलकुलेटर का प्रदर्शन / क्षमताएं 80 के दशक के शुरुआती कंप्यूटर के अनुरूप हैं।
डैन नीली

6

यदि आप बस पैडल को धीमा कर देते हैं, तो किसी भी समय आप एक तीव्र कोण पर गेंद को मारते हैं (यानी सीधे दूसरी तरफ बहुत ऊपर और नीचे की ओर बढ़ते हुए), कंप्यूटर लगभग हमेशा याद रहेगा क्योंकि गेंद ऊपर / नीचे जा रही है चप्पू की तुलना में तेजी से क्षतिपूर्ति कर सकता है।

इसके बजाय, मैं क्या करूंगा पैडल की गति के साथ खेलता हूं, और जिस बिंदु पर एआई प्रतिक्रिया करता है। उदाहरण के लिए:

  • जब उपयोगकर्ता गेंद को हिट करता है
    • एआई तुरंत प्रतिक्रिया कर सकता है और जहां गेंद होगी, वहां जा सकता है। यदि यह काफी तेज है, तो यह समय में वहां पहुंच जाएगा
  • जब गेंद मैदान के बीच से गुजरती है
    • एआई को तब तक इंतजार करना चाहिए जब तक कि यह प्रतिक्रिया करने से पहले क्षेत्र के मध्य को पार न कर दे

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

इस प्रकार, प्रतिक्रिया के लिए एक अधिक मानवीय विधि हमेशा गेंद की ओर बढ़ना है। उदाहरण के लिए, यदि गेंद ऊपर जा रही है, तो चप्पू ऊपर जाता है। यदि पैडल काफी तेज है, तो यह ऊपर और नीचे उछाल की प्रतिक्रिया कर सकता है। यदि यह पैडल पर्याप्त तेज़ नहीं है, तो गेंद के ऊपर जाने पर यह ऊपर जाकर क्षतिपूर्ति करेगा, लेकिन फिर जब यह उछलता है, तो पैडल जल्दी से नीचे नहीं जा पाता है।

अंत में, आप कठिनाई को बढ़ाने / घटाने के लिए पैडल के आकार के साथ खेल सकते हैं।


2

विचार करने का एक कारक यादृच्छिकता है - मानव खिलाड़ियों के पास उनके खेलने में हमेशा कुछ हद तक भिन्नता होती है, इसलिए यदि आप चाहते हैं कि आपका एआई मानव की तरह दिखे तो आप भी चाहेंगे कि उनके नाटक में कुछ भिन्नता हो।

आप इसके लिए रेंज सेट कर सकते हैं:

  • प्रतिक्रिया समय (कितनी जल्दी AI चलना शुरू होता है)
  • गति (कितनी जल्दी AI पैडल चलाता है)
  • सटीकता (एआई के पास कैसे पहुंचेंगे जहां यह वास्तव में अपने पैडल को स्थानांतरित करना चाहता है, अंडरशूट या ओवरशूट करने का मौका देता है जहां वे होना चाहते हैं)

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


2

मैं एक और सामान्य समाधान का सुझाव देने जा रहा हूं जो केवल पोंग के लिए विशिष्ट नहीं है। मेरा मानना ​​है कि यह किसी भी खेल के लिए लागू हो सकता है - सिर्फ पोंग नहीं। आप मानव जैसा व्यवहार चाहते हैं, है ना? ताकि मानव महसूस कर सके कि वे एक मानव की भूमिका निभा रहे हैं ... और इसलिए विस्तार से जीतने की उम्मीद है। तो तुम क्या करते हो?

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

एक आसान ऐ में उच्चतर इनपुट लैग होगा और यादृच्छिक गलतियों को करने की अधिक प्रवृत्ति होगी - जहां मुश्किल के रूप में एआई को इन मापदंडों को मुश्किल होने के लिए तैयार किया जाएगा।

यह लगभग किसी भी खेल पर लागू किया जा सकता है - यहां तक ​​कि एक जैसे टिक टीएसी को पैर की अंगुली या इससे भी अधिक जटिल मॉडल। यह दृष्टिकोण अधिक जटिल परिदृश्यों में टूट जाता है, लेकिन यह काफी पर्याप्त है जहां खेल जिसमें पैरामीटर और दायरे की संख्या संकीर्ण है।


1

यहां कुछ विकल्पों की सूची दी गई है, जिनमें से कुछ पहले से ही शामिल हैं:

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

0

मैंने एक छोटा सा किया पोंग क्लोन भी किया (LUA में)।

मेरी एआई बहुत ही सरल है, लेकिन यह उतना बुरा नहीं है, इमो।

मैं सिर्फ गेंद की y स्थिति के लिए जाँच करता हूँ और यदि मैं नीचे पैडल को हिलाता हूँ, यदि उच्चतर मैं पैडल को ऊपर ले जाता हूँ।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.