Play Home Contribute Github Join Us! Discourse Staff Members Github Contribution Guides Team

Испытания. Пустыня Сарвен. JavaScript

Не могу пройти уровень “Испытание” в пустыне Сарвен. Пишет, что проблема либо в слишком медленном коде или в бесконечном цикле. Не смог найти ошибок или бесконечный цикл. Поэтому прошу помощи

Извиняюсь, если напортачил с оформлением кода. Создаю тему в первые

Код:

Summary

// Этот уровень предназначен для продвинутых игроков. Решение получится довольно сложным с большим количеством передвижений. Для его прохождения понадобится много ручной работы и креативных приёмов.
// Проложи дорогу к первому испытанию (Оазис Марра), убивая врагов на своём пути. Достигнув его, собери все грибы, и начнётся испытание. Если переживёшь сражение, держи путь к следующему оазису за вторым испытанием, а затем - в Храм. Когда пройдёшь все испытания, то сразишься с главным боссом. Удачи!
// Совет: очки с высокой дальностью очень помогут на этом уровне, поэтому выбирай лучшее из того, что имеется.
// Совет: тип (‘type’) охранников оазиса равен ‘oasis-guardian’

Код:
function flagMove(flag){
hero.moveXY(flag.pos.x, flag.pos.y);
hero.pickUpFlag(flag);
}

// поднять все найденные предметы
// @param array массив найденный предметов
function giveItem(items){
var i = 0;
while (i < items.length) {
var item = items[i];
hero.moveXY(item.pos.x, item.pos.y);
i++;
}

}

// убить всех найденных противников
// @param array массив найденных противников
function bashAndAttack(enemies){
var i = 0;
while (i < enemies.length) {
// проверка на дистанцию из-за того, что однажды герой
// побежал к противнику, который находился через 50 метров
if(enemies[i] && hero.distanceTo(enemies[i]) < 30){
var target = enemies[i];
while (target.health > 0) {
if (target.health > 100 && hero.isReady(“bash”)) {
hero.bash(target);
} else if (target.health > 0) {
hero.attack(target);
}
}
i++;
}
}
}

// это единственный бесконечный цикл. Но ведь подобные циклы
// использовались до этого
while(true) {
var items = hero.findItems();
var enemies = hero.findEnemies();
var flag = hero.findFlag();

// Я был не уверен, что можно давать на проверку (if’у) массив (enemies || items),
// поэтому создал эти переменные
var kostilEnemy = hero.findNearestEnemy();
var kostilItem = hero.findNearestItem();

if (flag) {
    flagMove(flag);
} else if (kostilEnemy){
    bashAndAttack(enemies);
} else if (kostilItem){
    giveItem(items);
}

}