Тема:
Аргументы
Переменные
Условные операторы
Арифметика
Циклы
Массивы
Цели:
Огры должны умереть.
Руководство:
Вступление:
Отвлекающие манки будут путать ваши настройки прицеливания.
Найдите сначала самых дальних врагов, так как манки будут роиться вокруг вас.
Дальний враг один с наибольшей distanceTo.
Обзор:
Цель этого уровня, в первую очередь выследить самых дальних врагов, поскольку именно эти враги могут убить вашего героя, пока обманки роятся вблизи и отвлекают врагов по ближе.
Образец кода показывает, как этот сделать: необходимо использовать цикл «while», для того чтобы условие проверяло всех врагов.
Создайте переменную maxDistance и присвойте ей значение 0. Таким образом, первый же враг в массиве будет находиться на расстоянии больше, чем значение переменной.
Потом, для каждого действительного врага в массиве, сравнивайте расстояние до него с нашей переменной maxDistance и если расстояние больше, присваивайте это расстояние переменной maxDistance и назначайте этого врага на переменную farthest.
Когда пройдете по всему массиву врагов, farthest будет содержать указатель на врага, находящегося на самом дальнем расстоянии от Вашего героя.
Далее, опять таки используйте цикл «while» для того, чтобы атаковать выбранного врага до тех пор, пока уровень его здоровья будет больше нуля.
Песчаные змеи, прохождение:
Python:
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 |
# Первыми убивай самых дальних врагов. loop: farthest = None maxDistance = 0 enemyIndex = 0 enemies = self.findEnemies() # Посмотри на всех врагов, чтобы определить, какие из них находятся дальше всех. while enemyIndex < len(enemies): target = enemies[enemyIndex] enemyIndex += 1 # Разве этот враг не дальше, чем самый дальний враг, которого мы видели вдалеке? distance = self.distanceTo(target) if distance > maxDistance: maxDistance = distance farthest = target if farthest: # Уничтожь самого дальнего врага! # Продолжай атаковать врага до тех пор, пока его здоровье больше 0. while farthest.health>=0: if self.isReady("bash"): self.bash(farthest) else self.attack(farthest) |
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 |
// Первыми убивай самых дальних врагов. loop { var farthest = null; var maxDistance = 0; var enemyIndex = 0; var enemies = this.findEnemies(); // Посмотри на всех врагов, чтобы определить, какие из них находятся дальше всех. while (enemyIndex < enemies.length) { var target = enemies[enemyIndex]; enemyIndex += 1; // Разве этот враг не дальше, чем самый дальний враг, которого мы видели вдалеке? var distance = this.distanceTo(target); if (distance > maxDistance) { maxDistance = distance; farthest = target; } } if (farthest) { // Уничтожь самого дальнего врага! // Продолжай атаковать врага до тех пор, пока его здоровье больше 0. while (farthest.health>=0) { if (this.isReady("cleave")) this.cleave(); else if (this.isReady("bash")){ this.bash(farthest); } else { this.attack(farthest); } } } } |
CoffeScript:
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 |
# Первыми убивай самых дальних врагов. loop farthest = null maxDistance = 0 enemyIndex = 0 enemies = @findEnemies() # Посмотри на всех врагов, чтобы определить, какие из них находятся дальше всех. while enemyIndex < enemies.length target = enemies[enemyIndex] enemyIndex += 1 # Разве этот враг не дальше, чем самый дальний враг, которого мы видели вдалеке? distance = @distanceTo target if distance > maxDistance maxDistance = distance farthest = target if farthest # Уничтожь самого дальнего врага! # Продолжай атаковать врага до тех пор, пока его здоровье больше 0. #null while farthest.health>=0 if @isReady "cleave" @cleave farthest if @isReady "bash" @bash farthest else @attack farthest # @say "Remove this line once your loop is finite." return |
Clojure:
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 |
;; Первыми убивай самых дальних врагов. (dotimes [n 1000] (def farthest nil) (def maxDistance 0) (def enemyIndex 0) (def enemies (.findEnemies this)) ;; Посмотри на всех врагов, чтобы определить, какие из них находятся дальше всех. (while (< enemyIndex (count enemies)) (def target (nth enemies enemyIndex)) (def enemyIndex (inc enemyIndex)) ;; Разве этот враг не дальше, чем самый дальний враг, которого мы видели вдалеке? (def distance (.distanceTo this target)) (when (> distance maxDistance) (def maxDistance distance) (def farthest target) ) ) (when farthest ;;Уничтожь самого дальнего врага! ;; Продолжай атаковать врага до тех пор, пока его здоровье больше 0. (while (>= (.health farthest) 0) (if (.isReady this "cleave") (.cleave this ) (if (.isReady this "bash") (.bash this farthest) (.attack this farthest) ) ) ) ) ) |
LUA:
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 |
-- Первыми убивай самых дальних врагов. loop local farthest = nil local maxDistance = 0 local enemyIndex = 1 local enemies = self:findEnemies() -- Посмотри на всех врагов, чтобы определить, какие из них находятся дальше всех. while enemyIndex <= #enemies do local target = enemies[enemyIndex] enemyIndex = enemyIndex + 1 -- Разве этот враг не дальше, чем самый дальний враг, которого мы видели вдалеке? local distance = self:distanceTo(target) if distance > maxDistance then maxDistance = distance farthest = target end end if farthest then -- Уничтожь самого дальнего врага! -- Продолжай атаковать врага до тех пор, пока его здоровье больше 0. while farthest.health>=0 do if self:isReady("cleave") then self:cleave(farthest) elseif self:isReady("bash") then self:bash(farthest) else self:attack(farthest) end end end end |
Комментарии: