Тема:
Циклы
Массивы
Функции
Циклы «for»
Литералы объектов
Математические операции
Цели:
Призовите 16 юнитов.
Люди и укрепления должны продержаться 30 секунд.
Бонус: Люди и укрепления должны продержаться 60 секунд.
Совет 1:
Оператор % известен, как оператор остатка от деления.
a % b
возвращает остаток от деления а / b
, как целое число. Таким образом, 12 % 5 == 2
.
Это может быть использовано, чтобы пройти по массиву несколько раз, например:
Возьмём массив: summonTypes = ["soldier","archer","peasant","paladin"]
И переменную : type = summonTypes[ i % summonTypes.length ]
при i==0; 0 % 4 == 0; type == «soldier»
при i==1; 1 % 4 == 1; type == «archer»
при i==2; 2 % 4 == 2; type == «peasant»
при i==3; 3 % 4 == 3; type == «paladin»
при i==4; 4 % 4 == 0; type == «soldier»
при i==5; 5 % 4 == 1; type == «archer»
и т.д…
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 27 28 |
# Этот уровень представляет % оператор, так же известный как оператор остатка от деления # a % b возвращает остаток от деления a на b # Это может быть использовано для того, что бы заново идти по массиву, когда индекс привысит длину массива. defendPoints = [{"x": 35, "y": 63},{"x": 61, "y": 63},{"x": 32, "y": 26},{"x": 64, "y": 26},{"x": 37, "y": 63},{"x": 59, "y": 63},{"x": 34, "y": 28},{"x": 62, "y": 26}] summonTypes = ["soldier","soldier","soldier","soldier","archer","archer","archer","archer"] # Вы начинаете с 360 золотыми, создайте смесь из солдат и лучников. # self.built представляет собой массив из войнов которых вы призвали, живых и мертвых. # Здесь мы используем "this.built.length % summonTypes.length", чтобы пройтись заново по массиву summonTypes def summonTroops(): type = summonTypes[len(hero.built) % len(summonTypes)] if hero.gold >= hero.costOf(type): hero.summon(type) def commandTroops(): friends = hero.findFriends() for i in range(len(friends)): friend = friends[i] # Используйте %, чтобы несколько раз пройтись по defendPoints по индексу friendIndex defPoint = defendPoints[i % len(defendPoints)] # Командуйте своими приспешниками чтобы защитить defendPoint hero.command(friend, "defend", defPoint) while True: summonTroops() commandTroops() |
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 |
// Этот уровень представляет % оператор, так же известный как оператор остатка от деления // a % b возвращает остаток от деления a на b // Это может быть использовано для того, что бы заново идти по массиву, когда индекс привысит длину массива. var defendPoints = [{"x": 35, "y": 63},{"x": 61, "y": 63},{"x": 32, "y": 26},{"x": 64, "y": 26},{"x": 37, "y": 63},{"x": 59, "y": 63},{"x": 34, "y": 28},{"x": 62, "y": 26}]; var summonTypes = ["soldier","soldier","soldier","soldier","archer","archer","archer","archer"]; // Вы начинаете с 360 золотыми, создайте смесь из солдат и лучников. // this.built представляет собой массив из войнов которых вы призвали, живых и мертвых. // Здесь мы используем "this.built.length % summonTypes.length", чтобы пройтись заново по массиву summonTypes hero.summonTroops = function() { var type = summonTypes[hero.built.length % summonTypes.length]; if(hero.gold >= hero.costOf(type)) { hero.summon(type); } }; hero.commandTroops = function() { var friends = hero.findFriends(); for(var friendIndex=0; friendIndex < friends.length; friendIndex++) { var friend = friends[friendIndex]; // Используйте %, чтобы несколько раз пройтись по defendPoints по индексу friendIndex var defPoint = defendPoints [friendIndex % defendPoints.length]; // Командуйте своими приспешниками чтобы защитить defendPoint hero.command(friend, "defend", defPoint); } }; while(true) { hero.summonTroops(); hero.commandTroops(); } |
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 |
# Этот уровень представляет % оператор, так же известный как оператор остатка от деления # a % b возвращает остаток от деления a на b # Это может быть использовано для того, что бы заново идти по массиву, когда индекс привысит длину массива. defendPoints = [{"x": 35, "y": 63},{"x": 61, "y": 63},{"x": 32, "y": 26},{"x": 64, "y": 26},{"x": 37, "y": 63},{"x": 59, "y": 63},{"x": 34, "y": 28},{"x": 62, "y": 26}] summonTypes = ["soldier","soldier","soldier","soldier","archer","archer","archer","archer"] # Вы начинаете с 360 золотыми, создайте смесь из солдат и лучников. # self.built представляет собой массив из войнов которых вы призвали, живых и мертвых. # Здесь мы используем "this.built.length % summonTypes.length", чтобы пройтись заново по массиву summonTypes @summonTroops = -> type = summonTypes[@built.length % summonTypes.length] if @gold >= @costOf type @summon type @commandTroops = -> friends = @findFriends() for friendIndex in [0..friends.length] friend = friends[friendIndex] # Используйте %, чтобы несколько раз пройтись по defendPoints по индексу friendIndex defPoint = defendPoints[friendIndex % len(defendPoints)] # Командуйте своими приспешниками чтобы защитить defendPoint @command friend, "defend", defPoint loop @summonTroops() @commandTroops() |
Clojure:
1 |
;; |
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 |
-- Этот уровень представляет % оператор, так же известный как оператор остатка от деления -- a % b возвращает остаток от деления a на b -- Это может быть использовано для того, что бы заново идти по массиву, когда индекс привысит длину массива. local defendPoints = {{"x"=35, "y"=63},{"x"=61, "y"=63},{"x"=32, "y"=26},{"x"=64, "y"=26},{"x"=37, "y"=63},{"x"=59, "y"=63},{"x"=34, "y"=28},{"x"=62, "y"=26}} local summonTypes = {"soldier","soldier","soldier","soldier","archer","archer","archer","archer"} -- Вы начинаете с 360 золотыми, создайте смесь из солдат и лучников. -- self.built представляет собой массив из войнов которых вы призвали, живых и мертвых. -- Здесь мы используем "[#self.built % #summonTypes + 1", чтобы пройтись заново по массиву summonTypes function hero.summonTroops() local type = summonTypes[#self.built % #summonTypes + 1] if self.gold >= self:costOf(type) then self.summon(type) end end function hero.commandTroops() local friends = self:findFriends() for friendIndex=1, #friends do local friend = friends[friendIndex] -- Используйте %, чтобы несколько раз пройтись по defendPoints по индексу friendIndex local defPoint = defendPoints[friendIndex % (#defendPoints)+1] -- Командуйте своими приспешниками чтобы защитить defendPoint self:command(friend, "defend", defPoint) end end loop hero.summonTroops() hero.commandTroops() end |
Комментарии: