Förstå Runtime Errors

Förstå Runtime Errors

> LeekScript handledning

Du kodar din AI som en välsignad. Raderna rullar, och namnen på... Nej vänta, det har vi redan sett. Den här gången, inga fler röda meddelanden i editorn, kompilatorn har inga fler hemligheter för dig. Det är dags för duell! Du observerar din purjolök i deras naturliga miljö, som Steve Irwin i grönsaksträdgården. De går omkring, de leker, de kulsprutar varandra, de ser glada ut!

De misstänker inte att det i skuggorna lurar formidabla fiender...

För många operationer utförda för denna omgång

Åhh en klassiker!! Detta är inte nödvändigtvis ett AI-fel, utan ett överskridande av det maximala antalet operationer (OPERATIONS_LIMIT satt till 20 miljoner operationer). Kolla in Operations handledningarna för en detaljerad artikel.

Min AI är liten! Hur är det möjligt ?

I det här fallet kan vi satsa på en loop utan ett stoppvillkor, vilket kallas en oändlig loop (se The Loops).

Ett litet exempel? Här är en liten kod för att använda vapnet på motståndaren så länge vi har PT: ![](https://imgur.com/5dSsTJK.png)

Dumt va? Tja, nej ! Ett fel visas under körning: Basic, rad 13 ▶ AI-avbrott: Exekveringsfel: För många operationer utförda för den här omgången

Vad kan problemet vara... Tja, helt enkelt, så länge som getTP()-villkoret > 0 kommer loopen att köras. Men vad kommer att hända när vi inte kan använda vapnet? Nåväl, vi kommer inte att förlora någon PT! Och villkoret kommer alltid att vara sant! Så vi har en loop som kommer att köras ad infinitiiiiiiiiiiiiiiiiiii.

För att rätta till det här fallet kan vi testa återkomsten av funktionen "useWeapon" och analysera resultatet.

Möjlig åtgärd:

Min AI är inte så liten!

Det är inte storleken som spelar roll!

Utan att läsa din AI skulle jag ha svårt att rätta dig... Vi kan fortfarande citera några möjligheter:

Okänd funktion

Så den här gången var jag försiktig, jag satte rätt antal parametrar i min funktion. Så, ja, men du kan inte lägga vilken parameter som helst i de ursprungliga funktionerna. Dessa funktioner kräver vissa ingångstyper. Om du försöker använda dem med fel parametrar får du ett liknande resultat:

AI Basic, rad 14 ▶ Okänd funktion: useWeapon(function) AI Basic, rad 14 ▶ Okänd funktion: useWeapon(null)

Här tar useWeapon-funktionen ett talargument (en WEAPON_...-konstant) och vi försöker ge den en funktion, eller en null. Uppenbarligen stönar generatorn på oss.

AI Basic, rad 11 ▶ Okänd funktion: sort(nummer, null) sort förväntar sig en array som första parameter, och vi försöker ge den ett nummer.

Basic AI, rad 8 ▶ Okänd funktion: getNearestEnemyTo(array) getNearestEnemyTo tar ett enhets-id som en parameter, inte en array.

Det här felet kan också inträffa på grund av att parenteser saknas:

Här lagrar vi "getNearestEnemy"-funktionen i variabeln "enemy", snarare än dess resultat (se Funktioner. Fix: var enemy = getNearestEnemy();

--