CodeCombat. Гора Порвитучу. Библиотечный тактик. (Library Tactician)

 ccCloudripMountain18

Тема:

Арифметика

Литералы объектов

Функции

Булевая логика

Математические операции

Алгоритмы

Цели:

Люди должны выжить.

Совет 1:

Функции могут «возвращать» значение.

На этом уровне , у вас есть функция ‘findStrongerTarget()’ которая находит и указывает (или как говорят программисты «возвращает») местонахождение противника с самым высоким уровнем здоровья.

Когда функция возвращает значение, Вы можете присвоить это значение переменной при вызове функции. Например: ‘archerTarget = findStrongestTarget ()’ (форма может измениться в зависимости от языка, который Вы используете, но идея остается неизменной).

Награда:

379xccXP 175xccCrystal 

Библиотечный тактик, прохождение:

Python:

JavaScript:

CoffeScript:

Clojure:

LUA:

Прохождение Code Combat

Комментарии:

Комментарии 1

  • Приведенный выше код бесспорно правильный, но как ни странно не дает возможности победить — солдаты гибнут даже при фокусе огня лучников. Поэтому после долгих «страданий» родилось что-то подобное:
    // Солдаты формируют круг и защищаются.
    function commandSoldier(soldier, soldierIndex, numSoldiers) {
    var angle = Math.PI * 2 * soldierIndex / numSoldiers;
    var defendPos = {x: 41, y: 40};
    defendPos.x += 10 * Math.cos(angle);
    defendPos.y += 10 * Math.sin(angle);
    hero.command(soldier, «defend», defendPos);

    }

    // Найди самого сильного врага (с наибольшим здоровьем)
    // Эта функция что-то возвращает! Когда ты её вызываешь, то получаешь назад некоторое значение.
    function findStrongestTarget() {
    var ogres = hero.findByType(«OGRE»);
    // Определи, у кого из врагов наибольший уровень здоровья, и присвой это значение переменной bestTarget.
    for (i = 0; i < ogres.length; i++){
    var ogre = ogres[i];
    if (ogre && ogre == "OGRE" ) {
    var bestTarget = ogre;
    return bestTarget;
    } else {
    return null;
    }
    }
    }

    // Если у врага strongestTarget больше 15 единиц здоровья, атакуй его. Иначе атакуй ближайшего врага.
    function commandArcher(archer) {
    var nearest = archer.findNearestEnemy();
    if(archerTarget) {
    hero.command(archer, "attack", archerTarget);
    } else if(nearest) {
    hero.command(archer, "attack", nearest);
    }
    }

    var archerTarget = null;
    while(true) {
    // Если враг archerTarget повержен или не существует, найди нового.
    if(!archerTarget || archerTarget.health <= 0) {
    // Установи в переменную archerTarget результат, который возвращает функция findStrongestTarget()
    archerTarget = findStrongestTarget();
    }
    var friends = hero.findFriends();
    var soldiers = hero.findByType("soldier");
    // Создай переменную, указывающую на твоих лучников.
    for(var i=0; i < soldiers.length; i++) {
    var soldier = soldiers[i];
    if (soldier.health < 50) {
    hero.command(soldier, 'move', {x:40, y:40});
    }
    else {
    commandSoldier(soldier, i, soldiers.length);
    }

    }
    // используй функцию commandArcher() для управления своими лучниками
    var archers = hero.findByType("archer");
    for(var i = 0; i < archers.length; i++) {
    var archer = archers[i];
    commandArcher(archer);
    }

    }

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *