रनटाइम त्रुटियों को समझना

रनटाइम त्रुटियों को समझना

> लीकस्क्रिप्ट ट्यूटोरियल

आप अपने एआई को एक धन्य की तरह कोड करते हैं। पंक्तियाँ स्क्रॉल करती हैं, और के नाम... रुको नहीं, हम पहले ही देख चुके हैं। इस बार, संपादक में और लाल संदेश नहीं हैं, संकलक के पास आपके लिए और कोई रहस्य नहीं है। यह द्वंद्व समय है! आप अपने गालों को उनके प्राकृतिक वातावरण में देखते हैं, जैसे स्टीव इरविन वनस्पति उद्यान में। वे इधर-उधर घूमते हैं, वे खिलखिलाते हैं, वे एक-दूसरे पर मशीनगन चलाते हैं, वे खुश दिखते हैं!

उन्हें संदेह नहीं है कि साये में दुर्जेय दुश्मन छिपे हुए हैं ...

इस दौर के लिए बहुत अधिक ऑपरेशन किए गए

अहह एक क्लासिक !! यह अनिवार्य रूप से एक एआई त्रुटि नहीं है, लेकिन संचालन की अधिकतम संख्या (OPERATIONS_LIMIT 20 मिलियन संचालन पर सेट) का एक ओवररन है। विस्तृत लेख के लिए ऑपरेशंस ट्यूटोरियल देखें।

मेरा AI छोटा है! यह कैसे संभव है ?

इस मामले में, हम बिना रुके एक लूप पर दांव लगा सकते हैं, जिसे अनंत लूप कहा जाता है (देखें द लूप्स)।

एक छोटा सा उदाहरण? जब तक हमारे पास पीटी है, प्रतिद्वंद्वी पर हथियार का उपयोग करने के लिए यहां एक छोटा सा कोड है: ![](https://imgur.com/5dSsTJK.png)

बेवकूफ हुह? अच्छा नहीं ! निष्पादन के दौरान एक त्रुटि प्रकट होती है: बेसिक, लाइन 13 ▶ एआई इंटरप्ट: एक्ज़ीक्यूशन एरर: इस राउंड के लिए बहुत सारे ऑपरेशन एक्जीक्यूट किए गए

समस्या क्या हो सकती है... बहुत सरलता से, जब तक getTP() कंडीशन > 0, लूप निष्पादित होगा। लेकिन तब क्या होगा जब हम हथियार का इस्तेमाल नहीं कर पाएंगे? वैसे हम कोई पीटी नहीं खोने जा रहे हैं! और हालत हमेशा सच होगी! तो हमारे पास एक लूप है जो विज्ञापन infinitiiiiiiiiiiiiiiii चलाएगा।

इस स्थिति को ठीक करने के लिए, हम useWeapon फ़ंक्शन के रिटर्न का परीक्षण कर सकते हैं और परिणाम का विश्लेषण कर सकते हैं।

संभावित सुधार:

मेरा एआई इतना छोटा नहीं है!

यह आकार नहीं है जो मायने रखता है!

आपके एआई को पढ़े बिना, मुझे आपको सही करने में मुश्किल होगी... हम अभी भी कुछ संभावनाएं बता सकते हैं:

अज्ञात समारोह

इसलिए इस बार मैं सावधान था, मैंने अपने फंक्शन में सही संख्या में पैरामीटर रखे। तो, हाँ, लेकिन आप मूल कार्यों में कोई पैरामीटर नहीं डाल सकते हैं। इन कार्यों के लिए कुछ इनपुट प्रकारों की आवश्यकता होती है। यदि आप उन्हें गलत मापदंडों के साथ उपयोग करने का प्रयास करते हैं, तो आपको एक समान परिणाम मिलेगा:

एआई बेसिक, लाइन 14 ▶ अज्ञात फ़ंक्शन: यूज़ वेपन (फ़ंक्शन) एआई बेसिक, लाइन 14 ▶ अज्ञात फ़ंक्शन: उपयोग हथियार (शून्य)

यहां, useWeapon फ़ंक्शन एक संख्या तर्क (एक WEAPON_... स्थिरांक) लेता है और हम इसे एक फ़ंक्शन, या एक शून्य देने का प्रयास करते हैं। जाहिर है जनरेटर हम पर कराहता है।

एआई बेसिक, लाइन 11 ▶ अज्ञात फ़ंक्शन: सॉर्ट (संख्या, शून्य) सॉर्ट पहले पैरामीटर के रूप में एक सरणी की अपेक्षा करता है, और हम इसे एक संख्या देने का प्रयास करते हैं।

बेसिक एआई, लाइन 8 ▶ अज्ञात फ़ंक्शन: getNearestEnemyTo(array) getNearestEnemyTo एक इकाई आईडी को पैरामीटर के रूप में लेता है, सरणी नहीं।

यह त्रुटि गुम कोष्ठकों के कारण भी हो सकती है:

यहां हम getNearestEnemy फ़ंक्शन को इसके परिणाम के बजाय दुश्मन चर में संग्रहीत करते हैं (देखें फ़ंक्शन। ठीक करें: 'वर दुश्मन = getNearestEnemy ();'

--