Тема:
Булевая логика
Строки
Массивы
Циклы
Циклы «for»
Литералы объектов
Цели:
Огры должны умереть.
Призови четырёх солдат.
Защити клетку.
Руководство:
Вступление:
Не позволяй людоедам открывать коробку!
Используй команду defend, чтобы держать своих солдат на месте и нападать автоматически.
Обзор:
Этот уровень показывает как можно использовать последоватеьности чисел совместно с циклами «for» для доступа к нескольким связанным массивам.
Также ты увидишь как приказать солдату защищать определенную позицию.
Собирая монеты, ты можешь остановиться на 80, так как каждый солдат стоит 20.
Пройдоха в ущелье Огров, прохождение:
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 29 30 31 32 |
# Защити клетку. # Поставь солдата на каждый Х. points = [] points[0] = {"x": 33, "y": 42} points[1] = {"x": 47, "y": 42} points[2] = {"x": 33, "y": 26} points[3] = {"x": 47, "y": 26} # Собери 80 золота. while hero.gold<80: items = hero.findItems() nearest = hero.findNearest(items) hero.move(nearest.pos) # Призови четырех солдат. for i in range(4): hero.summon("soldier") # Отправь своих солдат на позиции. while True: friends = hero.findFriends() for j in range(len(friends)): point = points[j] friend = friends[j] enemy = friend.findNearestEnemy() if enemy and enemy.team == "ogres" and friend.distanceTo(enemy) < 5: # Прикажи войскам атаковать. #pass hero.command(friend, "attack", enemy) else: # Прикажи войскам двигаться на точку. #pass hero.command(friend, "move", point) |
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 |
// Защити клетку. // Поставь солдата на каждый Х. var points = []; points[0] = {x: 33, y: 42}; points[1] = {x: 47, y: 42}; points[2] = {x: 33, y: 26}; points[3] = {x: 47, y: 26}; // Собери 80 золота. while (hero.gold<80) { var nearest = hero.findNearest(hero.findItems()); hero.move(nearest.pos); } // Призови четырех солдат. for(var i=0; i < 4; i++) { hero.summon("soldier"); } // Отправь своих солдат на позиции. while(true) { var friends = hero.findFriends(); for(var j=0; j < friends.length; j++) { var point = points[j]; var friend = friends[j]; var enemy = friend.findNearestEnemy(); if(enemy && enemy.team == "ogres" && friend.distanceTo(enemy) < 5) { // Прикажи войскам атаковать. hero.command(friend, "attack", enemy); } else { // Прикажи войскам двигаться на точку. hero.command(friend, "move", point); } } } |
CoffeScript:
1 |
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 34 35 |
-- Защити клетку. -- Поставь солдата на каждый Х. local points = {} points[1] = {x=33, y=42} points[2] = {x=47, y=42} points[3] = {x=33, y=26} points[4] = {x=47, y=26} -- Собери 80 золота. while self.gold<80 do local nearest = self:findNearest(self:findItems()) self:move(nearest.pos) end -- Призови четырех солдат. for i=1,4 do self:summon("soldier") end -- Отправь своих солдат на позиции. loop local friends = self:findFriends() for j=1,#friends do local point = points[j] local friend = friends[j] local enemy = friend:findNearestEnemy() if enemy and enemy.team == "ogres" and friend:distanceTo(enemy) < 5 then -- Прикажи войскам атаковать. self:command(friend, "attack", enemy) else -- Прикажи войскам двигаться на точку. self:command(friend, "move", point) end end end |
Комментарии: