Понимание ошибок времени выполнения

Понимание ошибок времени выполнения

> Учебник LeekScript

Вы программируете свой ИИ как благословенный. Строки прокручиваются, и имена... Нет, подождите, мы это уже видели. На этот раз больше никаких красных сообщений в редакторе, у компилятора больше нет секретов для вас. Пришло время дуэли! Вы наблюдаете за своим луком-пореем в его естественной среде, как Стив Ирвин в огороде. Они ходят, резвятся, стреляют друг в друга из пулемета и выглядят счастливыми!

Они не подозревают, что в тенях таятся грозные враги...

Слишком много операций выполнено для этого раунда

Ааа классика!! Это не обязательно ошибка ИИ, а превышение максимального количества операций (OPERATIONS_LIMIT установлено на уровне 20 миллионов операций). Подробную статью можно найти в учебниках Operations.

Мой ИИ крошечный! Как это возможно ?

В этом случае мы можем сделать ставку на цикл без условия остановки, который называется бесконечным циклом (см. Петли).

Маленький пример? Вот небольшой код для использования оружия против противника, пока у нас есть PT: ![](https://imgur.com/5dSsTJK.png)

Глупый да? Ну нет ! При выполнении появляется ошибка: «Базовый, строка 13 ▶ Прерывание ИИ: ошибка выполнения: слишком много операций выполнено для этого раунда»

В чем может быть проблема... Ну, проще говоря, пока условие getTP() > 0, цикл будет выполняться. Но что произойдет, когда мы не сможем использовать оружие? Что ж, мы не собираемся терять PT! И условие всегда будет истинным! Итак, у нас есть цикл, который будет работать до бесконечности.

Чтобы исправить этот случай, мы можем протестировать возврат функции useWeapon и проанализировать результат.

Возможное решение:

Мой ИИ не такой уж и маленький!

Важен не размер!

Не читая ваш ИИ, мне было бы трудно вас поправить... Мы все же можем привести несколько вариантов:

Неизвестная функция

Так что на этот раз я был осторожен, я указал правильное количество параметров в своей функции. Итак, да, но вы не можете поместить любой параметр в собственные функции. Эти функции требуют определенных типов ввода. Если вы попытаетесь использовать их с неправильными параметрами, вы получите аналогичный результат:

AI Basic, строка 14 ▶ Неизвестная функция: useWeapon(функция) AI Basic, строка 14 ▶ Неизвестная функция: useWeapon(null)

Здесь функция useWeapon принимает числовой аргумент (константа WEAPON_...), и мы пытаемся дать ей функцию или null. Очевидно генератор стонет на нас.

AI Basic, строка 11 ▶ Неизвестная функция: sort(number, null) sort ожидает массив в качестве первого параметра, и мы пытаемся присвоить ему число.

Базовый ИИ, строка 8 ▶ Неизвестная функция: getNearestEnemyTo(массив) getNearestEnemyTo принимает в качестве параметра идентификатор сущности, а не массив.

Эта ошибка также может произойти из-за отсутствия круглых скобок:

Здесь мы сохраняем функцию getNearestEnemy в переменной enemy, а не ее результат (см. Функции. Исправлено: var враг = getNearestEnemy();

--