Это продолжение, начало см. тут.
А продолжаем мы рубиться в codecombat. С прошлого раза мне удалось раздобыть кое какие новые вещицы, которые повышают шансы выжить. Пришлось также изменить тактику. В сумме это позволило пройти локацию ещё трижды базовым персонажем.
Инвентарь
Для начала рассмотрим инвентарь. Существенным дополнением оказалось кольцо невидимости. Оно прячет героя от противников на 4 секунды. В течении которых можно сосредоточиться на задании — сборе денег.
Тактика
В прошлый раз я пытался совладать с толпой манчкинов и выжить в секторе с ограми. Но к 4 уровню манчкинов стало слишком много и даже, используя длинный меч со спец. ударом «cleave», разобраться с ними стало решительно невозможно. Либо не хватает времени, либо здоровья.
Потому я решил начинать в секторе со стрелками, а заканчивать сбор денег в секторе с ограми.
Вот какой получился текст программы (а я пишу на javascript).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
// Собери 100 золота с двух или трех рощ. // этот параметр будет учитывать режим невидимости // мы будем смотреть можно ли уже использовать атаку // или мы пока в режиме невидимости this.dontAttackBefore = 0; //ф-ция поиска денег this.searchMoney = function () { var item = this.findNearest(this.findItems()); //я исключаю из поиска сектор с манчкинами if (item && (item.pos.x < 40 || item.pos. y > 32)) { var D = this.distanceTo(item); if (D < 45) { if (D > 15 && this.isReady("jump")) this.jumpTo(item.pos); else this.move(item.pos); } } else { //денег рядом нет - двигаемся в другой сектор this.moveXY(43, 39); } }; //иногда надо кого то уничтожать, но только если враг не далеко //основная цель - сбор денег this.attackSomebody = function(distance) { //WITCH надо убивать в первую очередь //где бы она не находилась //т.к. она накладывает заклятие, замедляющее //нашего героя var W = this.findNearest(this.findByType("witch")); if (W) { if (this.distanceTo(W) > 15) { if (this.isReady("jump")) this.jumpTo(W); if (this.canCast("chain-lightning", W)) this.cast("chain-lightning", W); } this.attack(W); } else { var enemy = this.findNearest(this.findEnemies()); if (enemy && this.distanceTo(enemy) < distance && this.attackDamage >= enemy.health) { this.attack(enemy); } else return false; } return true; }; //идем в сектор со стрелками this.moveXY(22, 23); //основной цикл loop { //расчищаем путь while (this.dontAttackBefore < this.now()) { var enemy = this.findNearest(this.findEnemies()); if (!enemy) break; if (this.canCast("invisibility", this)) { this.cast("invisibility", this); this.dontAttackBefore = this.now() + this.spells.invisibility.duration; } else if (this.findEnemies().length >= 3 && this.canCast("chain-lightning") && this.distanceTo(enemy) < 25) { this.cast("chain-lightning", enemy); } else if (this.findByType("ogre").length + this.findByType("brawler").length + this.findByType("chieftain").length > 3) break; else if (!this.attackSomebody(10)) break; } //собираем бабки this.searchMoney(); } |
Результат
Хоть при запуске на 6й проход все пошло немного не так, но все же я протянул и собрал 100 монет.
Золото в секторе со стрелками быстро закончилось и вместо 70-75 монет я собрал только 45, после чего герой побежал в рощу с ограми. Золото скоро кончилось и там. Но в последний момент выпали ещё несколько монет и мне удалось их подобрать.
Скорее всего, на 7 уровне стоит подумать о тактике сразу в трех секторах, а пока результат вот такой:
P.S.
Не меняя алгоритма удалось проскочить и 7й уровень. 8й точно уже не пройти, используя этот алгоритм. Там кроме witch уже респаются warlock, которых надо как то учитывать.