Комментарии: CodeCombat. Гора Порвитучу. Библиотечный тактик. (Library Tactician) https://coolcode.ru/codecombat-gora-porvituchu-bibliotechnyiy-taktik-library-tactician/ Скриптописание и кодинг Tue, 13 Nov 2018 21:48:08 +0000 hourly 1 https://wordpress.org/?v=5.8.12 Автор: Павел https://coolcode.ru/codecombat-gora-porvituchu-bibliotechnyiy-taktik-library-tactician/#comment-2581 Tue, 13 Nov 2018 21:48:08 +0000 http://coolcode.ru/?p=9526#comment-2581 Приведенный выше код бесспорно правильный, но как ни странно не дает возможности победить — солдаты гибнут даже при фокусе огня лучников. Поэтому после долгих «страданий» родилось что-то подобное:
// Солдаты формируют круг и защищаются.
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);
}

}

]]>