Тема:
Аргументы
Переменные
Строки
Массивы
Циклы «for»
Литералы объектов
Цели:
Огры должны умереть.
Защитите крестьян.
Руководство:
Вступление:
Циклы for аналогичны циклам while. Имеется больше установок, но цикл for может быть использован, чтоб выполнить тоже самое что и while.
Обзор:
На этом уровне будут представлены циклы for. Они могут значительно отличаться, в зависимости от языка программирования, который Вы используете. Поэтому, смотрите на комментарии в описании уровня.
Помните, что Вы управляете своими солдатами при помощи функций command(soldier, "attack", enemy) или command(soldier, "move", pos).
Вашему герою следует избегатsь битвы и сосредоточиться на сборе монет. Если Вы попытаетесь поучаствовать в битве лично, Вы можете привлечь внимание огров-убийц!
Пройдоха в ущелье Огров, прохождение:
Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
while True: # Собирай золото. items = hero.findItems() nearest = hero.findNearest (items) hero.move(nearest.pos) # Если золота достаточно, призывай солдат. if hero.gold>hero.costOf("soldier"): hero.summon("soldier") # При помощи for-цикла отдавай приказы каждому солдату. # For-циклы состоят из 2 частей: "for X in Y" # Y - массив в котором выполняется цикл. # Цикл выполняется один раз для каждого элемента Y, а X - определяет текущий элемент. for friend in hero.findFriends(): if friend.type == "soldier": enemy = friend.findNearestEnemy() # Если видишь врага прикажи атаковать. if enemy: hero.command(friend, "attack", enemy) # Если нет, прикажи следовать в правую часть карты. else: hero.command(friend, "move", {"x":97,"y":43}) |
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 |
while(true) { // Собирай золото. var items = hero.findItems(); var nearest = hero.findNearest(items); hero.move(nearest.pos); // Если золота достаточно, призывай солдат. if (hero.gold>hero.costOf("soldier")){ hero.summon("soldier"); } // При помощи for-цикла отдавай приказы каждому солдату. var friends = hero.findFriends(); // For-циклы состоят из 3 частей, разделенных точкой с запятой. // for(объявление;условие;выражение) // Объявление выполняется при первой итерации цикла. // Цикл выполняется пока верно условие. for(var friendIndex = 0; friendIndex < friends.length; friendIndex++) { var friend = friends[friendIndex]; if(friend.type == "soldier") { var enemy = friend.findNearestEnemy(); // Если видишь врага прикажи атаковать. if (enemy){ hero.command(friend, "attack", enemy); // Если нет, прикажи следовать в правую часть карты. } else { hero.command(friend, "move", {x:97,y:43}); } } } } |
CoffeScript:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
loop # Собирай золото. items = @findItems() nearest = @findNearest items @move nearest.pos # Если золота достаточно, призывай солдат. if @gold>@costOf "soldier" @summon "soldier" # При помощи for-цикла отдавай приказы каждому солдату. # For-циклы состоят из 2 частей: "for X in Y" # Y - массив в котором выполняется цикл. # Цикл выполняется один раз для каждого элемента Y, а X - определяет текущий элемент. for friend in @findFriends() if friend.type is "soldier" enemy = friend.findNearestEnemy() # Если видишь врага прикажи атаковать. if enemy @command friend, "attack", enemy # Если нет, прикажи следовать в правую часть карты. else @command friend, "move", {x:97, y:43} |
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 |
while true do -- Собирай золото. local nearest = self:findNearest(self:findItems()) self:move(nearest.pos) -- Если золота достаточно, призывай солдат. if self.gold>self:costOf("soldier") then self:summon("soldier") end -- При помощи for-цикла отдавай приказы каждому солдату. local friends = self:findFriends() -- Простые for-циклы состоят из 3 частей: for <счётчик>=<начало>,<конец> do -- <счётчик> - это переменная, хранящая значение индекса. -- Первый элемент цикла <начало> (здесь 1). -- Цикл будет выполняться до последнего элемента <конец> (#friends длина массива friends). for friendIndex=1,#friends do local friend = friends[friendIndex] if friend.type == "soldier" then local enemy = friend:findNearestEnemy() -- Если видишь врага прикажи атаковать. if enemy then self:command(friend, "attack", enemy) -- Если нет, прикажи следовать в правую часть карты. else self:command(friend, "move", {x=97,y=43}) end end end end |
Комментарии: