Тема:
Аргументы
Строки
Циклы
Условные операторы
Переменные
Обработка ввода
Цели:
Убей огров.
Руководство:
Информация
Обзор
Ранее вы использовали distanceTo для атаки только ближайших врагов, а флаги для перемещения.
Мы будем делать то же самое. Но "зеленый" флаг мы будем использовать, чтобы двигаться к (или убежать от) врагов, а "черный" флаг что бы заставить нашего героя «рассекать».
Таким образом, мы можем приберечь cleave для подходящего момента, когда поблизости соберется много врагов.
Совет: Используйте cleave без аргументов. Рассекайте врага там, где стоите, вместо того, чтобы преследовать врага и рассекать.
.
Награда:
Cвязист (Signal Corpse), прохождение (2 кода):
Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# Вы можете использовать флаги, чтобы применять различные тактики. # На этом уровне, зеленый флаг означает, что вы хотите, двигаться к флагу. # Черный флаг означает, что на его месте нужно рассекать ('cleave') врагов. # Целитель вылечит вас, если вы встанете на место красного крестика. loop: green = self.findFlag("green") black = self.findFlag("black") nearest = self.findNearestEnemy() if green: self.pickUpFlag(green) elif black and self.isReady("cleave"): self.pickUpFlag(black) # Рассеките! self.cleave() elif nearest and self.distanceTo(nearest) < 10: # Атакуйте! self.attack(enemy) #pass |
JavaScript:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
// Вы можете использовать флаги, чтобы применять различные тактики. // На этом уровне, зеленый флаг означает, что вы хотите, двигаться к флагу. // Черный флаг означает, что на его месте нужно рассекать ('cleave') врагов. // Целитель вылечит вас, если вы встанете на место красного крестика. loop { var green = this.findFlag("green"); var black = this.findFlag("black"); var nearest = this.findNearestEnemy(); if (green) { this.pickUpFlag(green); } else if (black && this.isReady("cleave")) { this.pickUpFlag(black); // Рассеките! this.cleave(); } else if (nearest && this.distanceTo(nearest) < 10) { // Атакуйте! this.attack(nearest); } } |
CoffeScript:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# Вы можете использовать флаги, чтобы применять различные тактики. # На этом уровне, зеленый флаг означает, что вы хотите, двигаться к флагу. # Черный флаг означает, что на его месте нужно рассекать ('cleave') врагов. # Целитель вылечит вас, если вы встанете на место красного крестика. loop green = @findFlag "green" black = @findFlag "black" nearest = @findNearestEnemy() if green @pickUpFlag green else if black and @isReady "cleave" @pickUpFlag black # Рассеките! @cleave() # pass else if nearest and @distanceTo(nearest) < 10 # Атакуйте! @attack nearest else @say "message" 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 |
;; Вы можете использовать флаги, чтобы применять различные тактики. ;; На этом уровне, зеленый флаг означает, что вы хотите, двигаться к флагу. ;; Черный флаг означает, что на его месте нужно рассекать ('cleave') врагов. ;; Целитель вылечит вас, если вы встанете на место красного крестика. (while true (def green (.findFlag this "green")) (def black (.findFlag this "black")) (def nearest (.findNearestEnemy this)) (if green (.pickUpFlag this green) (if (and black (.isReady this "cleave")) (when true (.pickUpFlag this black) ;; Рассеките! (.cleave this) ) (if (and nearest (< (.distanceTo this nearest) 10)) ;; Атакуйте! (.attack this nearestg) ) ) ) ) |
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 37 38 39 40 41 42 |
-- TODO: translate to lua -- Вы можете использовать флаги, чтобы применять различные тактики. -- На этом уровне, зеленый флаг означает, что вы хотите, двигаться к флагу. -- Черный флаг означает, что на его месте нужно рассекать ('cleave') врагов. -- Целитель вылечит вас, если вы встанете на место красного крестика. --loop: -- green = self.findFlag("green") -- black = self.findFlag("black") -- nearest = self.findNearestEnemy() -- if green: -- self.pickUpFlag(green) -- elif black and self.isReady("cleave"): -- self.pickUpFlag(black) -- Рассеките! -- elif nearest and self.distanceTo(nearest) < 10: -- Атакуйте! -- pass loop green = self:findFlag("green") black = self:findFlag("black") nearest = self:findNearestEnemy() if green then self:pickUpFlag(green) else if black and self:isReady("cleave") then self:pickUpFlag(black) -- Рассеките! self:cleave(nearest) else if nearest and self:distanceTo(nearest) < 10 then -- Атакуйте! self:attack(nearest) end end end end |
Решение 2:
Из за того, что всё время появляются новые вещи дороже старых, а я к тому же и жмот. То я прохожу уровни в том, что дают бесплатно. На этом уровне возник критический момент, что пришлось серьёзно изменить код, что бы пройти данный уровень. Суть в том, что собирать чёрный флаг это потеря времени поэтому мы его не берём а смотрим изменится позиция флага или нет… ещё изменена дистанция преследования зверушек, 10… да мы же мечники и герои… пока она сама не подойдёт нечего нам за ними бегать… ну или по особому приказу.
Соответственно после массового удара бежать лечиться. Если ударить массово не удалось, всё равно идти лечиться. Если любой из флагов оказался на левой половине идти лечиться.
Времени в обрез, но с 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 |
# Вы можете использовать флаги, чтобы применять различные тактики. # На этом уровне, зеленый флаг означает, что вы хотите, двигаться к флагу. # Черный флаг означает, что на его месте нужно рассекать ('cleave') врагов. # Целитель вылечит вас, если вы встанете на место красного крестика. loop: black = self.findFlag("black") if black: if black.pos.x!=blacktemp: blacktemp=black.pos.xgg if black.pos.x<35: self.moveXY(22, 30) else: if self.isReady("cleave"): self.cleave() self.moveXY(22, 30) green = self.findFlag("green") if green: if green.pos.x<35: self.moveXY(22, 30) self.pickUpFlag(green) nearest = self.findNearestEnemy() if nearest and self.distanceTo(nearest) < 6: # Атакуйте! self.attack(nearest) #pass |
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 36 |
// Вы можете использовать флаги, чтобы применять различные тактики. // На этом уровне, зеленый флаг означает, что вы хотите, двигаться к флагу. // Черный флаг означает, что на его месте нужно рассекать ('cleave') врагов. // Целитель вылечит вас, если вы встанете на место красного крестика. var blacktemp; loop { var black = this.findFlag("black"); if(black){ if (black.pos.x!=blacktemp){ blacktemp=black.pos.x; if (black.pos.x<35){ this.moveXY(22, 30); } else { if (this.isReady("cleave")){ this.cleave(); } this.moveXY(22, 30); } } } var green = this.findFlag("green"); if (green) { if (green.pos.x<35) { this.moveXY(22, 30); } this.pickUpFlag(green); } var nearest = this.findNearestEnemy(); if (nearest && this.distanceTo(nearest) < 6) { // Атакуйте! this.attack(nearest); } } |
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 |
# Вы можете использовать флаги, чтобы применять различные тактики. # На этом уровне, зеленый флаг означает, что вы хотите, двигаться к флагу. # Черный флаг означает, что на его месте нужно рассекать ('cleave') врагов. # Целитель вылечит вас, если вы встанете на место красного крестика. loop black = @findFlag "black" if black if black.pos.x!=blacktemp blacktemp=black.pos.x if black.pos.x<35 @moveXY 22, 30 else if @isReady "cleave" @cleave enemy @moveXY 22, 30 green = @findFlag "green" if green if green.pos.x<35 @moveXY 22, 30 @pickUpFlag(green) nearest = @findNearestEnemy() if nearest and @distanceTo(nearest) < 6 # Атакуйте! @attack nearest 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 36 |
;; Вы можете использовать флаги, чтобы применять различные тактики. ;; На этом уровне, зеленый флаг означает, что вы хотите, двигаться к флагу. ;; Черный флаг означает, что на его месте нужно рассекать ('cleave') врагов. ;; Целитель вылечит вас, если вы встанете на место красного крестика. (def blacktemp) (while true (def black (.findFlag this "black")) (when black (when (not (= (.x (.pos black)) blacktemp)) (def blacktemp (.x (.pos black))) (if (< (.x (.pos black)) 35) (.moveXY this 22 30) (when true (when (.isReady this "cleave") (.cleave this) ) (.moveXY this 22 30) ) ) ) ) (def green (.findFlag this "green")) (when green (when (< (.x (.pos green)) 35) (.moveXY this 22 30) ) (.pickUpFlag this green) ) (def nearest (.findNearestEnemy this)) (when (and nearest (< (.distanceTo this nearest) 6)) ;; Атакуйте! (.attack this nearest) ) ) |
Может кто знает как выглядит в Clojure оператор «не равно»?
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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
-- TODO: translate to lua -- Вы можете использовать флаги, чтобы применять различные тактики. -- На этом уровне, зеленый флаг означает, что вы хотите, двигаться к флагу. -- Черный флаг означает, что на его месте нужно рассекать ('cleave') врагов. -- Целитель вылечит вас, если вы встанете на место красного крестика. --loop: -- green = self.findFlag("green") -- black = self.findFlag("black") -- nearest = self.findNearestEnemy() -- if green: -- self.pickUpFlag(green) -- elif black and self.isReady("cleave"): -- self.pickUpFlag(black) -- Рассеките! -- elif nearest and self.distanceTo(nearest) < 10: -- Атакуйте! -- pass blacktemp=0 loop black = self:findFlag("black") if black then if black.pos.x ~= blacktemp then blacktemp=black.pos.x if black.pos.x<35 then self:moveXY(22, 30) else if self:isReady("cleave") then self:cleave() end self:moveXY(22, 30) end end end green = self:findFlag("green") if green then if green.pos.x<35 then self:moveXY(22, 30) end self:pickUpFlag(green) end nearest = self:findNearestEnemy() if nearest and self:distanceTo(nearest) < 6 then -- Атакуйте! self:attack(nearest) end end |
Комментарии: