Forstå kjøretidsfeil

Forstå kjøretidsfeil

> LeekScript-veiledning

Du koder AI-en din som en velsignet. Linjene ruller, og navnene på... Nei vent, det har vi allerede sett. Denne gangen, ingen flere røde meldinger i editoren, kompilatoren har ingen flere hemmeligheter for deg. Det er duell! Du observerer purren i deres naturlige miljø, som Steve Irwin i grønnsakshagen. De går rundt, de boltrer seg, de maskinpistoler hverandre, de ser glade ut!

De mistenker ikke at det lurer formidable fiender i skyggene...

For mange operasjoner utført for denne runden

Ahhh en klassiker!! Dette er ikke nødvendigvis en AI-feil, men en overskridelse av maksimalt antall operasjoner (OPERATIONS_LIMIT satt til 20 millioner operasjoner). Sjekk ut Operations-veiledningene for en detaljert artikkel.

Min AI er liten! Hvordan er det mulig?

I dette tilfellet kan vi satse på en loop uten en stoppbetingelse, som kalles en uendelig loop (se The Loops).

Et lite eksempel? Her er en liten kode for å bruke våpenet på motstanderen så lenge vi har PT: ![](https://imgur.com/5dSsTJK.png)

Dumt ikke sant? Vel nei ! En feil vises under utførelse: Grunnleggende, linje 13 ▶ AI-avbrudd: Utførelsesfeil: For mange operasjoner utført for denne runden

Hva kan være problemet... Vel, ganske enkelt, så lenge getTP()-betingelsen > 0 vil løkken kjøres. Men hva vil skje når vi ikke kan bruke våpenet? Vel, vi kommer ikke til å miste noen PT! Og tilstanden vil alltid være sann! Så vi har en sløyfe som vil kjøre ad infinitiiiiiiiiiiiiiiiiiii.

For å korrigere dette tilfellet, kan vi teste returen av 'useWeapon'-funksjonen og analysere resultatet.

Mulig løsning:

Min AI er ikke så liten!

Størrelse spiller ingen rolle!

Uten å lese AI-en din, ville jeg hatt vanskelig for å korrigere deg... Vi kan fortsatt sitere noen få muligheter:

Ukjent funksjon

Så denne gangen var jeg forsiktig, jeg la inn riktig antall parametere i funksjonen min. Så, ja, men du kan ikke sette hvilken som helst parameter i de opprinnelige funksjonene. Disse funksjonene krever visse inngangstyper. Hvis du prøver å bruke dem med feil parametere, vil du få et lignende resultat:

AI Basic, linje 14 ▶ Ukjent funksjon: useWeapon(function) AI Basic, linje 14 ▶ Ukjent funksjon: useWeapon(null)

Her tar funksjonen "bruk våpen" et tallargument (en konstant "WEAPON_...") og vi prøver å gi den en funksjon, eller en "null". Tydeligvis svir generatoren mot oss.

AI Basic, linje 11 ▶ Ukjent funksjon: sort(nummer, null) sort forventer en matrise som første parameter, og vi prøver å gi den et tall.

Basic AI, linje 8 ▶ Ukjent funksjon: getNearestEnemyTo(array) getNearestEnemyTo tar en enhets-ID som en parameter, ikke en matrise.

Denne feilen kan også oppstå på grunn av manglende parenteser:

Her lagrer vi «getNearestEnemy»-funksjonen i «fiende»-variabelen, i stedet for resultatet (se Functions. Fix: var enemy = getNearestEnemy();

--