Zrozumienie błędów czasu wykonywania

Zrozumienie błędów czasu wykonywania

> LeekScript samouczek

Kodujesz swoją sztuczną inteligencję jak błogosławiony. Linie przewijają się, a imiona... Nie, czekaj, już to widzieliśmy. Tym razem żadnych czerwonych komunikatów w edytorze, kompilator nie ma już dla Ciebie żadnych tajemnic. Czas na pojedynek! Obserwujesz swoje pory w ich naturalnym środowisku, jak Steve Irwin w ogrodzie warzywnym. Chodzą, bawią się, strzelają do siebie z karabinu maszynowego, wyglądają na szczęśliwych!

Nie podejrzewają, że w cieniu czają się potężni wrogowie...

Wykonano zbyt wiele operacji w tej rundzie

Ahh klasyk!! Niekoniecznie jest to błąd AI, ale przekroczenie maksymalnej liczby operacji (OPERATIONS_LIMIT ustawionej na 20 milionów operacji). Zapoznaj się z samouczkami Operacje, aby zapoznać się ze szczegółowym artykułem.

Moja sztuczna inteligencja jest malutka! Jak to jest możliwe ?

W tym przypadku możemy postawić na pętlę bez warunku zatrzymania, którą nazywamy pętlą nieskończoną (patrz Pętle).

Mały przykład? Oto mały kod do użycia broni na przeciwniku, o ile mamy PT: ![](https://imgur.com/5dSsTJK.png)

Głupi co? Więc nie ! Podczas wykonywania pojawia się błąd: Basic, linia 13 ▶ AI Interrupt: Execution Error: Zbyt wiele operacji wykonanych w tej rundzie

W czym może być problem... Po prostu, dopóki warunek getTP() > 0, pętla się wykona. Ale co się stanie, gdy nie będziemy mogli użyć broni? Cóż, nie stracimy żadnego PT! A warunek zawsze będzie prawdziwy! Mamy więc pętlę, która będzie działać w nieskończonośćiiiiiiiiiiiiiiiiii.

Aby naprawić ten przypadek, możemy przetestować powrót funkcji useWeapon i przeanalizować wynik.

Możliwa poprawka:

Moja sztuczna inteligencja nie jest taka mała!

To nie rozmiar ma znaczenie!

Bez odczytania twojej sztucznej inteligencji trudno byłoby mi cię poprawić… Nadal możemy przytoczyć kilka możliwości:

Nieznana funkcja

Więc tym razem byłem ostrożny, umieściłem odpowiednią liczbę parametrów w mojej funkcji. Więc tak, ale nie możesz umieścić dowolnego parametru w funkcjach natywnych. Te funkcje wymagają określonych typów danych wejściowych. Jeśli spróbujesz użyć ich z niewłaściwymi parametrami, uzyskasz podobny wynik:

AI Basic, linia 14 ▶ Nieznana funkcja: useWeapon(function) AI Basic, linia 14 ▶ Nieznana funkcja: useWeapon(null)

Tutaj funkcja useWeapon przyjmuje argument liczbowy (stała WEAPON_...) i próbujemy nadać jej funkcję lub null. Najwyraźniej generator jęczy na nas.

AI Basic, linia 11 ▶ Nieznana funkcja: sort(liczba, null) sort oczekuje tablicy jako pierwszego parametru i próbujemy nadać jej liczbę.

Podstawowa sztuczna inteligencja, linia 8 ▶ Nieznana funkcja: getNearestEnemyTo(array) getNearestEnemyTo przyjmuje identyfikator jednostki jako parametr, a nie tablicę.

Ten błąd może również wystąpić z powodu brakujących nawiasów:

Tutaj przechowujemy funkcję getNearestEnemy w zmiennej enemy, a nie jej wynik (patrz Funkcje. Poprawka: var wróg = getNearestEnemy();

--