Clojure — Клёвый код https://coolcode.ru Скриптописание и кодинг Thu, 16 Mar 2017 11:09:03 +0000 ru-RU hourly 1 https://wordpress.org/?v=5.8.10 https://coolcode.ru/wp-content/uploads/2015/10/YO1-150x150.png Clojure — Клёвый код https://coolcode.ru 32 32 CodeCombat. Лес Темнодрев. Друг и враг (Friend and Foe) https://coolcode.ru/codecombat-les-temnodrev-drug-i-vrag-friend-and-foe/ https://coolcode.ru/codecombat-les-temnodrev-drug-i-vrag-friend-and-foe/#respond Mon, 20 Mar 2017 11:04:38 +0000 http://coolcode.ru/?p=13026

Тема:

Базовый синтаксис

Условные операторы

Доступ к свойствам

Строки

Переменные

Циклы «while»

Цели:

Огры должны умереть.

Руководство:

Совет 1:

Ты можешь соединять строки с помощью оператора +.

Это называется соединение строк.

Python:
hero.say("To battle, " + "Sally!")

JavaScript:
hero.say("To battle, " + "Sally!");

CoffeScript:

Clojure:

LUA:

hero:say("To battle, " .. "Sally!")

Таким образом герой скажет: «To battle, Sally!».

Также можно соединять строки, которые хранятся в переменных:

Python:
hero.say("To battle, " + peasant.id)

JavaScript:
hero.say("To battle, " + peasant.id);

CoffeScript:

Clojure:

LUA:

hero:say("To battle, " .. peasant.id)

Совет 2:

Используйте hero.findNearestEnemy для сохранения ближайшего врага в переменной.

Python:

enemy = hero.findNearestEnemy()

JavaScript:
var enemy = hero.findNearestEnemy();

CoffeScript:

Clojure:

LUA:

local enemy = hero:findNearestEnemy()

Совет 3:

Используйте if-statement, чтобы проверить, содержит ли переменная врага:

Python:

if enemy:

JavaScript:
if(enemy) {

}

CoffeScript:

Clojure:

LUA:

if enemy then

end

Совет 4:

Если враг существует, соедините имя врага, используя свойство id и другую строку!

Совет 5:

Как числа можно складывать с помощью  +,  так и строки могут использовать сложение с помощью оператора +.

Если есть две строк «foo» и «bar», что в итоге получится в результате «foo» + «bar»?

Это просто на самом деле, и «foo» + «bar» это тоже самое что и «foobar»! Данная операция соединяет две строки в одну.

На этом уровне тебе нужно приказать крестьянам готовится к битве и батракам уходить прочь используя соединение их id с другими строками.

Приказ крестьянам будет выглядеть так:

Python:

hero.say("To battle, " + peasant.id + "!")
# В результате будет что-то вроде: "To battle, Sally!"

JavaScript:
hero.say("To battle, " + peasant.id + "!");
// В результате будет что-то вроде: "To battle, Sally!"

CoffeScript:

Clojure:

LUA:

hero:say("To battle, " .. peasant.id .. "!")
-- В результате будет что-то вроде: "To battle, Sally!"

Обрати внимание — крестьяне и батраки не любят когда ты просто называешь их имена! Обязательно нужно добавить (присоединить) другую строку, чтобы они поняли.

Награда:

66xccXP 71xccCrystal

Друг и враг, прохождение:

Python:

# Крестьяне и батраки собираются в лесу.
# Прикажи крестьянам готовится к бою и батракам уходить прочь!

while True:
    friend = hero.findNearestFriend()
    if friend:
        hero.say("To battle, " + friend.id + "!")
    # Теперь найди ближайшего врага и сказать ему чтобы уходил (go away).
    enemy = hero.findNearestEnemy()
    if enemy:
        hero.say("go away, " + enemy.id+"!")

JavaScript:

// Крестьяне и батраки собираются в лесу.
// Прикажи крестьянам готовится к бою и батракам уходить прочь!

while(true) {
    var friend = hero.findNearestFriend();
    if(friend) {
        hero.say("To battle, " + friend.id + "!");
    }
    // Теперь найди ближайшего врага и сказать ему чтобы уходил (go away).
    var enemy = hero.findNearestEnemy();
    if(enemy){
        hero.say("go away, " + enemy.id+"!");
    }
    
}

CoffeScript:

# Крестьяне и батраки собираются в лесу.
# Прикажи крестьянам готовится к бою и батракам уходить прочь!

while true
    friend = @findNearestFriend()
    if friend
        @say "To battle, " + friend.id + "!"
    # Теперь найди ближайшего врага и сказать ему чтобы уходил (go away).
    enemy = @findNearestEnemy()
    if enemy
        @say "go away, " + enemy.id+"!"

Clojure:

LUA:

-- Крестьяне и батраки собираются в лесу.
-- Прикажи крестьянам готовится к бою и батракам уходить прочь!

while true do
    local friend = self:findNearestFriend()
    if friend then
        hero:say("To battle, " + friend.id + "!")
    end    
    -- Теперь найди ближайшего врага и сказать ему чтобы уходил (go away).
    local enemy = self:findNearestEnemy()
    if enemy then
        hero:say("go away, " + enemy.id+"!")
    end
end

Прохождение Code Combat

]]>
https://coolcode.ru/codecombat-les-temnodrev-drug-i-vrag-friend-and-foe/feed/ 0
CodeCombat. Лес Темнодрев. Деревенский бродяга (Village Rover) https://coolcode.ru/codecombat-les-temnodrev-derevenskiy-brodyaga-village-rover/ https://coolcode.ru/codecombat-les-temnodrev-derevenskiy-brodyaga-village-rover/#respond Sat, 18 Mar 2017 06:02:11 +0000 http://coolcode.ru/?p=12996

Тема:

Аргументы

Базовый синтаксис

Функции

Условные операторы

Переменные

Циклы «while»

Цели:

Останови всех огров.

Спаси всех крестьян.

Руководство:

Совет 1:

Патрулирование деревни может быть скучным и повторяющимся.

Использование функций упрощает эту задачу. Ты можешь превратить множество строк кода всего лишь в одну!

Python:
# Определим функцию
def findAndAttackEnemy():
  enemy = hero.findNearest(hero.findEnemies())
  if enemy:
    hero.attack(enemy)
    
# Теперь всего одной строки будет достаточно
findAndAttackEnemy()

JavaScript:
// Определим функцию
hero.findAndAttackEnemy = function() {
  var enemy = hero.findNearestEnemy();
  if (enemy) {
    hero.attack(enemy);
  }
};

// Теперь всего одной строки будет достаточно
hero.findAndAttackEnemy();

CoffeScript:
@findAndAttackEnemy = ->
    enemy = @findNearestEnemy()
    if enemy
        @attack(enemy)

# Теперь всего одной строки будет достаточно
@findAndAttackEnemy()

Clojure:

LUA:

local function findAndAttackEnemy()
    local enemy = hero:findNearestEnemy()
    if enemy then
        hero:attack(enemy)
    end
end

-- Теперь всего одной строки будет достаточно
findAndAttackEnemy()

 

Совет 2:

Функции являются важной частью программирования.

Ты использовал функции всё это время, каждый раз при написании такого кода:

Python:
hero.attack(enemy)

JavaScript:
hero.attack(enemy);

CoffeScript:
@attack(enemy)

Clojure:
(.attack this enemy)

LUA:
self:attack(enemy)

…ты «вызываешь» функцию с названием attack.

Фактический код, который выполняется при вызове attack, выглядит длинным и сложным. Представь, что тебе пришлось бы писать 25 строк кода всякий раз, когда захотелось бы по размахивать своим мечем!

Это первое преимущество функций: они уменьшают целую кучу строк кода до одной.

Это не только избавляет тебя от необходимости печатать один и тот же код много раз, но и делает его проще для понимания. Ведь в нём может быть скрыта действительно сложная логика («Хорошо, я хочу атаковать. Есть ли у меня оружие? Я достаточно близок, чтобы им ударить? Сколько времени на его использование потребуется? Я попал? Какой урон нанёс?»), которая сводится к легко воспринимаемой идее: атаковать.

Теперь ты будешь не только вызывать функции, но и будешь определять собственные функции!

В определении функции есть две части: название и тело.

Название ты будешь использовать, чтобы вызывать функцию позже, например, attack.

Тело — это код, который будет выполняться при вызове функции.

Иногда встречаются аргументы (например врага в attack(enemy)), но их мы рассмотрим в будущих уровнях.

Награда:

79xccXP 45xccCrystal

Деревенский бродяга, прохождение:

Python:

# Это определяет функцию с именем `findAndAttackEnemy`
def findAndAttackEnemy():
    enemy = hero.findNearestEnemy()
    if enemy:
        hero.attack(enemy)

# Этот код не является частью функции.
while True:
    # Теперь ты можешь патрулировать деревню, используя `findAndAttackEnemy`
    hero.moveXY(35, 34)
    findAndAttackEnemy()
    
    # Теперь иди к правому входу.
    hero.moveXY(60, 31)
    # Используй `findAndAttackEnemy`
    findAndAttackEnemy()

JavaScript:

// Это определяет функцию с именем `findAndAttackEnemy`
function findAndAttackEnemy() {
    var enemy = hero.findNearestEnemy();
    if (enemy) {
        hero.attack(enemy);
    }
}

// Этот код не является частью функции.
while(true) {
    // Теперь ты можешь патрулировать деревню, используя `findAndAttackEnemy`
    hero.moveXY(35, 34);
    findAndAttackEnemy();
    
    // Теперь иди к правому входу.
    hero.moveXY(60, 31);
    // Используй `findAndAttackEnemy`
    findAndAttackEnemy();
}

CoffeScript:

# Это определяет функцию с именем `findAndAttackEnemy`
@findAndAttackEnemy = ->
    enemy = @findNearestEnemy()
    if enemy
        @attack(enemy)

# Этот код не является частью функции.
while true
    # Теперь ты можешь патрулировать деревню, используя `findAndAttackEnemy`
    @moveXY(35, 34)
    @findAndAttackEnemy()
    
    # Теперь иди к правому входу.
    @moveXY(60, 31)
    # Используй `findAndAttackEnemy`
    @findAndAttackEnemy()

Clojure:

LUA:

-- Это определяет функцию с именем `findAndAttackEnemy`
local function findAndAttackEnemy()
    local enemy = hero:findNearestEnemy()
    if enemy then
        hero:attack(enemy)
    end
end

-- Этот код не является частью функции.
while true do
    -- Теперь ты можешь патрулировать деревню, используя `findAndAttackEnemy`
    hero:moveXY(35, 34)
    findAndAttackEnemy()
    -- Теперь иди к правому входу.
    hero:moveXY(60, 31)
    -- Используй `findAndAttackEnemy`
    findAndAttackEnemy()
end

Прохождение Code Combat

]]>
https://coolcode.ru/codecombat-les-temnodrev-derevenskiy-brodyaga-village-rover/feed/ 0
CodeCombat. Лес Темнодрев. Лесные закоулки (Woodland Cubbies) https://coolcode.ru/codecombat-les-temnodrev-lesnyie-zakoulki-woodland-cubbies/ https://coolcode.ru/codecombat-les-temnodrev-lesnyie-zakoulki-woodland-cubbies/#respond Thu, 16 Mar 2017 03:57:15 +0000 http://coolcode.ru/?p=12988

Тема:

Аргументы

Базовый синтаксис

Условные операторы

Переменные

Цели:

Победи огров.

Проверь каждый уголок.

Руководство:

Совет 1:

Проверь лесные закоулки на наличие врагов, но аккуратнее! Не везде есть враг, которого надо атаковать.

Используй выражение if, чтобы проверить существование врага.

Python:
enemy = hero.findNearestEnemy()
if enemy:
    # Attack!

JavaScript:
var enemy = hero.findNearestEnemy();
if(enemy) {
    // Attack!

CoffeScript:

Clojure:

LUA:

local enemy = hero:findNearestEnemy()
if enemy then
    -- Attack!
end

 

Совет 2:

Выражения if (если)

Выражения if используются, чтобы управлять ходом программы. Они используются для проверки определённого условия на истинность (true).

Выражения if похожи на while, но блок внутри выполняется только один раз.

Часто if используется для проверки существования юнита.

Примеры:

Python:
enemy = hero.findNearestEnemy()
if enemy:
    # Враг существует.
    # Стоит его атаковать!
# А это выполнится в любом случае!

JavaScript:
var enemy = hero.findNearestEnemy();
if(enemy) {
    // Враг существует.
    // Стоит его атаковать!
}
// А это выполнится в любом случае!

CoffeScript:

Clojure:

LUA:

local enemy = hero:findNearestEnemy()
if enemy then
    -- Враг существует.
    -- Стоит его атаковать!
end
-- А это выполнится в любом случае!

 

Награда:

47xccXP 31xccCrystal

Лесные закоулки, прохождение:

Python:

# Пройди через лес, но будь начеку!
# Эти лесные закоулки могут быть полны огров!

hero.moveXY(19, 33)
enemy = hero.findNearestEnemy()
# Выражение `if` проверит, является ли переменная огром.
if enemy:
    hero.attack(enemy)
    hero.attack(enemy)

hero.moveXY(49, 51)
enemy = hero.findNearestEnemy()
if enemy:
    # Атакуй противника здесь:
    hero.attack(enemy)
    hero.attack(enemy)
    
    # `pass` ничего не делает, просто закрывает выражение `if`
    pass

hero.moveXY(58, 14)
enemy = hero.findNearestEnemy()
# Используй выражение `if`, чтобы проверить существование врага
if enemy:    
    # Если враг здесь, атакуй его:
    hero.attack(enemy)
    hero.attack(enemy)

JavaScript:

// Пройди через лес, но будь начеку!
// Эти лесные закоулки могут быть полны огров!

hero.moveXY(19, 33);
var enemy = hero.findNearestEnemy();
// Выражение `if` проверит, является ли переменная огром.
if(enemy) {
    hero.attack(enemy);
    hero.attack(enemy);
}

hero.moveXY(49, 51);
var enemy = hero.findNearestEnemy();
if(enemy) {
    // Атакуй противника здесь:
    hero.attack(enemy);
    hero.attack(enemy);
}

hero.moveXY(58, 14);
var enemy = hero.findNearestEnemy();
// Используй выражение `if`, чтобы проверить существование врага
if(enemy) {
    // Если враг здесь, атакуй его:
    hero.attack(enemy);
    hero.attack(enemy);
}

CoffeScript:

# Пройди через лес, но будь начеку!
# Эти лесные закоулки могут быть полны огров!

@moveXY 19, 33 
enemy = @findNearestEnemy()
# Выражение `if` проверит, является ли переменная огром.
if enemy
    @attack enemy
    @attack enemy

@moveXY 49, 51
enemy = @findNearestEnemy()
if enemy
    # Атакуй противника здесь:
    @attack enemy
    @attack enemy
    
    # Remove this say once you've added code!
    #hero.say "I should do something else."

@moveXY 58, 14
enemy = @findNearestEnemy()
# Используй выражение `if`, чтобы проверить существование врага
if enemy
    # Если враг здесь, атакуй его:
    @attack enemy
    @attack enemy

Clojure:

LUA:

-- Пройди через лес, но будь начеку!
-- Эти лесные закоулки могут быть полны огров!
hero:moveXY(19, 33)
local enemy = hero:findNearestEnemy()
-- Выражение `if` проверит, является ли переменная огром.
if enemy then
    hero:attack(enemy)
    hero:attack(enemy)
end

hero:moveXY(49, 51)
local enemy2 = hero:findNearestEnemy()
if enemy2 then
    -- Атакуй противника здесь: 
    hero:attack(enemy2)
    hero:attack(enemy2)
end 

hero:moveXY(58, 14) 
local enemy3 = hero:findNearestEnemy() 
-- Используй выражение `if`, чтобы проверить существование врага 
if enemy3 then
    -- Если враг здесь, атакуй его:
    hero:attack(enemy3)
    hero:attack(enemy3)
end

Прохождение Code Combat

]]>
https://coolcode.ru/codecombat-les-temnodrev-lesnyie-zakoulki-woodland-cubbies/feed/ 0
CodeCombat. Лес Темнодрев. Манчкины-маньяки (Maniac Munchkins) https://coolcode.ru/codecombat-les-temnodrev-manchkinyi-manyaki-maniac-munchkins/ https://coolcode.ru/codecombat-les-temnodrev-manchkinyi-manyaki-maniac-munchkins/#respond Wed, 15 Mar 2017 03:56:17 +0000 http://coolcode.ru/?p=12972

Тема:

Условные операторы «if/else»

Условные операторы

Вложенные условные операторы

Строки

Переменные

Цели:

Взломай сундук.

Выживи

Руководство:

Совет 1:

Взломай сундук, пока тебя атакуют группы манчкинов и некоторые, особенно злые манчкины.

Совет 2:

На этом уровне манчкины периодически атакуют без поддержки своих товарищей!

Используйте ‘cleave’, чтобы победить любые группы манчкинов, которые приближаются. Но используйте его только в тому случае, когда удар готов!

Python:
If hero.isReady ("cleave"):
    # Это произойдет, только когда «cleave» готов к использованию

JavaScript:
if(hero.isReady("cleave")) {
  // Это произойдет, только когда «cleave» готов к использованию
}

CoffeScript:

Clojure:

LUA:

if hero:isReady("cleave") then
    --Это произойдет, только когда «cleave» готов к использованию
end

Проверьте, чтобы манчкины были в пределах удара с помощью метода distanceTo. Помните, что distanceTo находит числовое значение между героем и аргументом.

Обратите внимание: знак «меньше чем» или «<» полезен только при сравнении двух чисел! hero.findNearestEnemy() возвращает врага, а не числа!

hero.isReady() возвращает значения true или false, а не число! Обязательно используйте ‘<‘ только при сравнении чисел, таких как 5 или hero.distanceTo(enemy).

Python:
distance = hero.distanceTo(enemy)
if hero.isReady("cleave"):
# elif специальный оператор! Он сообщает герою, не выполнять следующую часть, если первое условие было Итинным, и второй блок программы выполняется только если первое условие было ложным.
elif distance < 5:
    # Это произойдёт, только когда враг окажеться ближе 5 метров, а cleave не готов.

JavaScript:
var enemy = hero.findNearestEnemy()
var distance = hero.distanceTo(enemy)
if(hero.isReady("cleave") {
// else if специальный термин! Он сообщает герою, не выполнять следующую часть, если первое условие было Итинным, и второй блок программы выполняется только если первое условие было ложным.
} else if(distance < 5) {
    // Это произойдёт, только когда враг окажеться ближе 5 метров, а cleave не готов.

CoffeScript:

Clojure:

LUA:

local distance = hero:distanceTo(enemy)
if hero:isReady("cleave") then
-- elif специальный оператор! Он сообщает герою, не выполнять следующую часть, если первое условие было Итинным, и второй блок программы выполняется только если первое условие было ложным.
elseif distance < 5 then
    -- Это произойдёт, только когда враг окажеться ближе 5 метров, а cleave не готов.
end

 

Наконец, если раскол не готов, и ближайший манчкин находится на расстоянии более 5 метров, вы можете атаковать сундук!

Python:
#Помните, что код в блоке else выполняется, только тогда, когда другие условия в if были ложны.
else {
    # Это произойдёт, когда враг будет ближе чем 5 метров, а cleave ещё не готов.
}

JavaScript:
// Помните, что код в блоке else выполняется, только тогда, когда другие условия в if были ложны.
else {
    // Это произойдёт, когда враг будет ближе чем 5 метров, а cleave ещё не готов.
}

CoffeScript:

Clojure:

LUA:

-- Помните, что код в блоке else выполняется, только тогда, когда другие условия в if были ложны.
else 
    -- Это произойдёт, когда враг будет ближе чем 5 метров, а cleave ещё не готов.
end

Но осторожней! В этом лесу живут мирные жители.

Награда:

77xccXP 44xccCrystal

Манчкины-маньяки, прохождение:

Python:

# Еще один сундук на поле ждет тебя!
# Атакуй сундук, чтобы взломать его.
# Некоторые манчкины не будут спокойно ждать, пока ты атакуешь его!
# Защищай себя, если манчкин подберется слишком близко.

while True:
    enemy = hero.findNearestEnemy()
    distance = hero.distanceTo(enemy)
    if hero.isReady("cleave"):
        # В первую очередь атакуем с помощью cleave если данная атака готова.
        hero.cleave(enemy)
        pass
    elif distance < 5:
        # Атакуй ближайшего манчкина, который подберется к тебе:
        hero.attack(enemy)
        pass
    else:
        # В противном случае, пытайтесь взломать сундук.
        hero.attack("Chest")
        pass

JavaScript:

// Еще один сундук на поле ждет тебя!
// Атакуй сундук, чтобы взломать его.
// Некоторые манчкины не будут спокойно ждать, пока ты атакуешь его!
// Защищай себя, если манчкин подберется слишком близко.

while(true) {
    var enemy = hero.findNearestEnemy();
    var distance = hero.distanceTo(enemy);
    if(hero.isReady("cleave")) {
        //  В первую очередь атакуем с помощью cleave если данная атака готова.
        hero.cleave(enemy);
    } else if(distance < 5) {
        // Атакуй ближайшего манчкина, который подберется к тебе:
        hero.attack(enemy);
    } else {
        // В противном случае, пытайтесь взломать сундук.
        hero.attack("Chest");
    }
}

CoffeScript:

# Еще один сундук на поле ждет тебя!
# Атакуй сундук, чтобы взломать его.
# Некоторые манчкины не будут спокойно ждать, пока ты атакуешь его!
# Защищай себя, если манчкин подберется слишком близко.

while true
    enemy = @findNearestEnemy()
    distance = @distanceTo enemy
    if hero.isReady("cleave")
        # В первую очередь атакуем с помощью cleave если данная атака готова.
        @cleave enemy
        # Remove this say once you've filled the if-statement:
        # @say "Cleave is ready!"
    else if distance < 5
        # Атакуй ближайшего манчкина, который подберется к тебе:
        @attack enemy
        # Remove this say once you've filled the if-statement:
        # @say "A munchkin is close!"
    else
        # В противном случае, пытайтесь взломать сундук.
        @attack "Chest"
        # Remove this say once you've filled the if-statement:
        # @say "I'm safe to attack the chest!"

Clojure:

LUA:

-- Еще один сундук на поле ждет тебя!
-- Атакуй сундук, чтобы взломать его.
-- Некоторые манчкины не будут спокойно ждать, пока ты атакуешь его!
-- Защищай себя, если манчкин подберется слишком близко.

while true do
    local enemy = hero:findNearestEnemy()
    local distance = hero:distanceTo(enemy)
    if hero:isReady("cleave") then
        -- В первую очередь атакуем с помощью cleave если данная атака готова.
        hero:cleave(enemy)
    elseif distance < 5 then
        -- Атакуй ближайшего манчкина, который подберется к тебе:
        hero:attack(enemy)
    else
        -- В противном случае, пытайтесь взломать сундук.
        hero:attack("Chest")
    end
end

Прохождение Code Combat

]]>
https://coolcode.ru/codecombat-les-temnodrev-manchkinyi-manyaki-maniac-munchkins/feed/ 0
CodeCombat. Лес Темнодрев. Дальномер (Range Finder) https://coolcode.ru/codecombat-les-temnodrev-dalnomer-range-finder/ https://coolcode.ru/codecombat-les-temnodrev-dalnomer-range-finder/#respond Tue, 14 Mar 2017 09:29:18 +0000 http://coolcode.ru/?p=12966

Тема:

Базовый синтаксис

Аргументы

Строки

Переменные

Цели:

Победи огров.

Руководство:

Информация

Используй distanceTo(), чтобы определить расстояние до каждого врага, а затем say(), чтобы передать это расстояние артиллерии.

Теперь откинься на спинку кресла и наблюдай за фейерверком.

Совет 2:

‘distanceTo’ можно использовать, для того чтобы найти расстояние (число) между двумя подразделениями. Помните, что вы должны вызвать ‘distanceTo’ из одного подразделения и в аргументе написать другое подразделение!

Не путайте вывод ‘distanceTo’ для объекта типа findNearestEnemy! ‘distanceTo’ возвращает числа, такие как ‘3’ или ‘1.55’ или ‘49494’!

Python:
friend = hero.findNearestFriend()
distance = hero.distanceTo(friend)
hero.say(distance) # This is a number like 10, or 999, or 0.23!

JavaScript:
var friend = hero.findNearestFriend();
var distance = hero.distanceTo(friend);
hero.say(distance); // This is a number like 10, or 999, or 0.23!

CoffeScript:
friend = @findNearestFriend()
distance = @distanceTo friend
@say distance

Clojure:

LUA:

local friend = self:findNearestFriend()
local distance = self:distanceTo(friend)
self:say(distance)

Совет 3:

Тебя попросили протестировать новые очки, с помощью которых можно смотреть сквозь деревья!  На этот раз не нужно выбегать и лично разбираться с ограми.

Твоя артиллерия не видит из-за деревьев, так что используй distanceTo() и say() для определения дистанции до цели.

Но осторожней! В этом лесу живут мирные жители.

Награда:

70xccXP 39xccCrystal

Дальномер, прохождение:

Python:

# Огры шныряют по лесу!
# Используй метод `distanceTo`, чтобы определить, где находятся враги.
# Скажи расстояние до каждого врага своей артиллерии!

enemy1 = "Gort"
distance1 = hero.distanceTo(enemy1)
hero.say(distance1)

enemy2 = "Smasher"
distance2 = hero.distanceTo(enemy2)
# Скажи переменную `distance2`!
hero.say(distance2)
# Определи и передай расстояние до остальных врагов:
# Не стреляй в друзей!
enemy3 = "Charles"

enemy4 = "Gorgnub"
distance4 = hero.distanceTo(enemy4)
hero.say(distance4)

JavaScript:

// Огры шныряют по лесу!
// Используй метод `distanceTo`, чтобы определить, где находятся враги.
// Скажи расстояние до каждого врага своей артиллерии!

var enemy1 = "Gort";
var distance1 = hero.distanceTo(enemy1);
hero.say(distance1);

var enemy2 = "Smasher";
var distance2 = hero.distanceTo(enemy2);
// Скажи переменную `distance2`!
hero.say(distance2);
// Определи и передай расстояние до остальных врагов:
// Не стреляй в друзей!
var enemy3 = "Charles";

var enemy4 = "Gorgnub";
var distance4 = hero.distanceTo(enemy4);
hero.say(distance4);

CoffeScript:

Clojure:

LUA:

-- Огры шныряют по лесу!
-- Используй метод `distanceTo`, чтобы определить, где находятся враги.
-- Скажи расстояние до каждого врага своей артиллерии!

local enemy1 = "Gort"
local distance1 = self:distanceTo(enemy1)
self:say(distance1)

local enemy2 = "Smasher"
local distance2 = self:distanceTo(enemy2)
-- Скажи переменную `distance2`!
self:say(distance2)

-- Определи и передай расстояние до остальных врагов:
-- Не стреляй в друзей!
local enemy3 = "Charles"

local enemy4 = "Gorgnub"
local distance4 = self:distanceTo(enemy4)
self:say(distance4)

Прохождение Code Combat

]]>
https://coolcode.ru/codecombat-les-temnodrev-dalnomer-range-finder/feed/ 0
CodeCombat. Гора Порвитучу. Игра в Салки. (Crag Tag) https://coolcode.ru/codecombat-gora-porvituchu-igra-v-salki-crag-tag/ https://coolcode.ru/codecombat-gora-porvituchu-igra-v-salki-crag-tag/#respond Sun, 22 May 2016 07:27:13 +0000 http://coolcode.ru/?p=8379

ccCloudripMountain1

Тема:

Базовый синтаксис

Аргументы

Переменные

Условные операторы

Циклы

Массивы

Цели:

Догони Пендер Проклинательницу.

Руководство:

Вступление:

ccCloudripMountain1b

move отличается от moveXY!

move(pos) имеет один аргумент pos, вместо двух у moveXY(x, y).

Вы можете использовать move, что бы переместиться на позицию монетки move(coin.pos), вместо moveXY(coin.pos.x,coin.pos.y).

И наконец moveXY перемещает юнита, пока он не достигнит пункта назначения. move же делает только один шаг в сторону пункта назначения. Теперь вы можете совершать действия во время движения.

Описание:

moveXY против move

Данный уровень показывает различие между старым способом передвижения moveXY и новым move.

(x, y) против (pos)

C move,  вы указываете позицию перемещения.

Позиция объекта имеет свойства x и y. Вы использовали их с moveXY, как:
Python:

self.moveXY(coin.pos.x, coin.pos.y)

JavaScript:

this.moveXY(coin.pos.x, coin.pos.y);

CoffeScript:
@moveXY(coin.pos.x, coin.pos.y)

LUA:
self:moveXY(coin.pos.x, coin.pos.y)

но с move вы моежете просто передать pos объекта, как параметр, например:

Python:

self.move (coin.pos)

JavaScript:

this.move(coin.pos);

CoffeScript:
@move(coin.pos)

LUA:
self:findEnemies()

Блок на выполнение или продолжать обработку?

С moveXY ваша программа прекратит выполнение, пока ваш герой не достигнет указанного местороложения (x, y).

С move ваш герой будет двигаться в сторону pos которое вы передадите, но ваша программа будет продолжать выполнятся.

Это означает, что ваш герой будет делать шаги в направлении pos, но ваша программа будет продолжать работать, так что вы сможете прервать данное движение с следующем витке цикла вашего кода.

От себя:

Пришлось купить ботинки. Купил ботинки скачков.

Награда:

322xccXP 160xccCrystal

Игра в Салки, прохождение:

Python:

# Поймай Пендер Проклинательницу чтобы узнать её секреты.

loop:
    # Пендер единственный друг на уровне, поэтому она всегда ближайшая.
    pender = hero.findNearest(hero.findFriends())

    if pender:
        # moveXY()  переместит тебя в место где была Пендер, 
        # но она постоянно будет убегать при твоем приближении.
        #self.moveXY(pender.pos.x, pender.pos.y)
        
        # move()  передвигает тебя лишь на шаг в единицу времени, 
        # поэтому ты сможешь преследовать свою цель.
        hero.move(pender.pos)

JavaScript:

// Поймай Пендер Проклинательницу чтобы узнать её секреты.

loop {
    // Пендер единственный друг на уровне, поэтому она всегда ближайшая.
    pender = hero.findNearest(hero.findFriends());

    if (pender) {
        // moveXY()  переместит тебя в место где была Пендер, 
        // но она постоянно будет убегать при твоем приближении.
        //hero.moveXY(pender.pos.x, pender.pos.y);
        
        // move()  передвигает тебя лишь на шаг в единицу времени, 
        // поэтому ты сможешь преследовать свою цель.
        hero.move(pender.pos);
    }
}

CoffeScript:

# Поймай Пендер Проклинательницу чтобы узнать её секреты.

loop
    # Пендер единственный друг на уровне, поэтому она всегда ближайшая.
    pender = @findNearest @findFriends()

    if pender
        # moveXY()  переместит тебя в место где была Пендер, 
        # но она постоянно будет убегать при твоем приближении.
        #@moveXY pender.pos.x, pender.pos.y
        
        # move()  передвигает тебя лишь на шаг в единицу времени, 
        # поэтому ты сможешь преследовать свою цель.
        @move pender.pos

    else
        @say "... where'd you go?"Q

Clojure:

;;

LUA:

-- Поймай Пендер Проклинательницу чтобы узнать её секреты.

loop
    -- Пендер единственный друг на уровне, поэтому она всегда ближайшая.
    local pender = self:findNearest(self:findFriends())

    if pender then
        -- moveXY()  переместит тебя в место где была Пендер, 
        -- но она постоянно будет убегать при твоем приближении.
        -- self:moveXY(pender.pos.x, pender.pos.y)
        
        -- move()  передвигает тебя лишь на шаг в единицу времени, 
        -- поэтому ты сможешь преследовать свою цель.
        self:move(pender.pos)
    end
end

Прохождение Code Combat

]]>
https://coolcode.ru/codecombat-gora-porvituchu-igra-v-salki-crag-tag/feed/ 0
CodeCombat. Пустыня Сарвена. Столкновение клонов (Clash of Clones) https://coolcode.ru/codecombat-pustyinya-sarvena-stolknovenie-klonov-clash-of-clones/ https://coolcode.ru/codecombat-pustyinya-sarvena-stolknovenie-klonov-clash-of-clones/#comments Sat, 21 May 2016 16:25:26 +0000 http://coolcode.ru/?p=8033

ссDungeonsOfKithgard28

Тема:

Переменные

Строки

Условные операторы

Арифметика

Циклы

Массивы

Цели:

Победи клонов и огров Токтара.

Ваш герой должен выжить.

Руководство:

Заметки

Токтар сильнее вас, так что для победы над его отрядом клонов и огров потребуется сообразительность.

Вам следует применить все навыки полученные в Пустыне (массивы и while-циклы), чтобы с умом выбирать цели.

От себя:

после покупки Меч ЗабытыхccSwordofForgottenпрошёл на грани.

Награда:

301xccXP 152xccCrystal portrait

Столкновение клонов, прохождение:

Python:

self.moveXY(65, 66)

while True:
    enemies = self.findEnemies()      
    enemy = self.findNearest(enemies)    
    if enemy.type=="soldier" or enemy.type=="knight" or enemy.type=="scout":
        if enemy:    
            if self.isReady("bash"):
                self.bash(enemy)
                self.wait(1);
            else:
                self.attack(enemy)
    else:
        if self.health>self.maxHealth/4:
            self.shield()             
        else:
            self.moveXY(42, 77)

JavaScript:

// Вам необходима хорошая стратегия и подходящее снаряжение, чтобы победить.
this.moveXY(65, 66);

while (true) {
    var enemies = this.findEnemies();
    var nearest = this.findNearest(enemies);
    if (nearest.type=="soldier" || nearest.type=="knight"){
        if (this.isReady("bash")){
            this.bash(nearest);
            this.wait(1);
        } else {
            this.attack(nearest);
        }     
    } else {
        if (this.health>this.maxHealth/4){
            this.shield();
        } else {
            this.moveXY(42, 77);
        }
    }
}

CoffeScript:

# Вам необходима хорошая стратегия и подходящее снаряжение, чтобы победить.
@moveXY 65, 66

while true
    enemies = @findEnemies()
    nearest = @findNearest enemies
    if nearest.type == "soldier" or nearest.type == "knight"
        if @isReady "bash"
            @bash nearest
            @wait 1
        else
            @attack nearest
    else
        if @health>@maxHealth/4
            @shield()
        else
            @moveXY 42, 77

Clojure:

;; Вам необходима хорошая стратегия и подходящее снаряжение, чтобы победить.
(.moveXY this 65 66)
(while true
       (def enemies (.findEnemies this))
       (def nearest (.findNearest this enemies))
       (if (or (= (.type nearest) "soldier") (= (.type nearest) "knight"))
           (if (.isReady this "bash")
               (when true
                    (.bash this nearest)
                    (.wait this 1))
                (.attack this nearest))
            (if (> (.health this) (/ (.maxHealth this) 4))
                (.shield this)
                (.moveXY this 42 77))
       )
)

LUA:

-- Вам необходима хорошая стратегия и подходящее снаряжение, чтобы победить.
self:moveXY(65, 66)

while true do
    enemies = self:findEnemies()
    nearest = self:findNearest(enemies)
    if nearest.type == "soldier" or nearest.type == "knight" then
        if self:isReady("bash") then
            self:bash(nearest)
            self:wait(1)
        else
            self:attack(nearest)
        end
    else
        if self.health>self.maxHealth/4 then
            self:shield()            
        else
            self:moveXY(42, 77)            
        end
    end
        
end

Прохождение Code Combat

]]>
https://coolcode.ru/codecombat-pustyinya-sarvena-stolknovenie-klonov-clash-of-clones/feed/ 16
CodeCombat. Лес Темнодрев. Сокровища Темнолесья https://coolcode.ru/codecombat-les-temnodrev-sokrovishha-temnolesya/ https://coolcode.ru/codecombat-les-temnodrev-sokrovishha-temnolesya/#respond Thu, 19 May 2016 07:46:10 +0000 http://coolcode.ru/?p=8077

 ccForest31

Цели:

 

Собери 100 золотых.

Руководство:

Награда:

лвл 1:

122xccXP 119xccCrystal

Защити фермера, прохождение:

Python:

# Собери 100 золота с двух или трех рощ.
# С каждой победой становится все сложнее и сложнее (но и вознаграждение больше)
# Если проиграешь - будешь ждать сутки до следующей попытки
# Запомни:  местность меняется каждый раз.   
def attackenemy():
    enemys=self.findEnemies()
    if self.distanceTo(self.findNearest(enemys)) < 30:        
        IndexEnemys=0
        besideEnemy=0
        bigenemy=0
        smallenemy=0
        while IndexEnemys<len(enemys):
            if enemys[IndexEnemys].type!="sand-yak":
                if self.distanceTo(enemys[IndexEnemys])<10:
                    besideEnemy +=1
                if self.distanceTo(enemys[IndexEnemys])<30 and ((enemys[IndexEnemys]).health > bigenemy.health or bigenemy == 0):
                    bigenemy = enemys[IndexEnemys]
                if self.distanceTo(enemys[IndexEnemys])<30 and ((enemys[IndexEnemys]).health < smallenemy.health or smallenemy == 0):
                    smallenemy = enemys[IndexEnemys]
            IndexEnemys+=1
        enemy = self.findNearest(enemys)
        
        if self.isReady("cleave") and besideEnemy>3:
            self.cleave()
        else if self.isReady("bash") and bigenemy.health>20:
            self.bash(bigenemy)
        else if smallenemy:
            self.attack(smallenemy)
            
def pickUpCoin():    
    coins = self.findItems()
    
    coinItem=1
    maxWeight = 0
    MaxCoin =0
    
    while coinItem<=len(coins):
        coin =coins[coinItem]
        if coin:                            
            if self.distanceTo(coins[coinItem])<50:
                weight = (coins[coinItem]).value/self.distanceTo(coins[coinItem])
                if weight>maxWeight:
                    maxWeight=weight
                    MaxCoin = coins[coinItem]
        coinItem+=1
    if MaxCoin!=0:
        self.moveXY(MaxCoin.pos.x, MaxCoin.pos.y)        

        
loop:
	enemy = self.findNearest(self.findEnemies())
	if enemy:
		attackenemy()
	else:
	    pickUpCoin()

Прохождение Code Combat

]]>
https://coolcode.ru/codecombat-les-temnodrev-sokrovishha-temnolesya/feed/ 0
CodeCombat. Пустыня Сарвена. Бренная земля (Harrowland) https://coolcode.ru/codecombat-pustyinya-sarvena-brennaya-zemlya-harrowland/ https://coolcode.ru/codecombat-pustyinya-sarvena-brennaya-zemlya-harrowland/#respond Wed, 18 May 2016 06:11:02 +0000 http://coolcode.ru/?p=8025

ссDungeonsOfKithgard26

Цели:

Победи вражеского героя.

Герой должен выжить.

Награда:

405xccXP 153xccCrystal

Бренная земля, прохождение:

Python:

# Используй свои умнейшние программные трюки, чтобы победить оппонента!
def attackenemy():
    enemys=self.findEnemies()
    if self.distanceTo(self.findNearest(enemys)) < 30:        
        IndexEnemys=0
        besideEnemy=0
        bigenemy=0
        smallenemy=0
        while IndexEnemys<len(enemys):
            if enemys[IndexEnemys].type!="sand-yak":
                if self.distanceTo(enemys[IndexEnemys])<10:
                    besideEnemy +=1
                if self.distanceTo(enemys[IndexEnemys])<30 and ((enemys[IndexEnemys]).health > bigenemy.health or bigenemy == 0):
                    bigenemy = enemys[IndexEnemys]
                if self.distanceTo(enemys[IndexEnemys])<30 and ((enemys[IndexEnemys]).health < smallenemy.health or smallenemy == 0):
                    smallenemy = enemys[IndexEnemys]
            IndexEnemys+=1
        enemy = self.findNearest(enemys)
        
        if self.isReady("cleave") and besideEnemy>3:
            self.cleave()
        else if self.isReady("bash") and bigenemy.health>20:
            self.bash(bigenemy)
        else if smallenemy:
            self.attack(smallenemy)
                

loop:
    enemy = self.findNearest(self.findEnemies())
    flag = self.findFlag("green")
    if self.health<self.maxHealth/3:
       batl=self.findNearest(self.findItems())
       if batl:
           self.moveXY(batl.pos.x, batl.pos.y)
    if flag:
        self.pickUpFlag(flag)
    if enemy:
        attackenemy()

Прохождение Code Combat

]]>
https://coolcode.ru/codecombat-pustyinya-sarvena-brennaya-zemlya-harrowland/feed/ 0
CodeCombat. Пустыня Сарвена. Безумный Максер (Mad Maxer) https://coolcode.ru/codecombat-pustyinya-sarvena-bezumnyiy-makser-mad-maxer/ https://coolcode.ru/codecombat-pustyinya-sarvena-bezumnyiy-makser-mad-maxer/#respond Tue, 17 May 2016 06:06:32 +0000 http://coolcode.ru/?p=8019

 ссDungeonsOfKithgard25

Тема:

Аргументы

Переменные

Условные операторы

Арифметика

Циклы

Массивы

Цели:

Огры должны умереть.

Руководство:

Вступление:

ссDungeonsOfKithgard25b

Отвлекающие манки будут путать ваши настройки прицеливания.

Найдите сначала самых дальних врагов, так как манки будут роиться вокруг вас.

Дальний враг один с наибольшей distanceTo.

Обзор:

Цель этого уровня, в первую очередь выследить самых дальних врагов, поскольку именно эти враги могут убить вашего героя, пока обманки роятся вблизи и отвлекают врагов по ближе.

Образец кода показывает, как этот сделать: необходимо использовать цикл «while», для того чтобы условие проверяло всех врагов.

Создайте переменную

maxDistance
и присвойте ей значение 0. Таким образом, первый же враг в массиве будет находиться на расстоянии больше, чем значение переменной.

Потом, для каждого действительного врага в массиве, сравнивайте расстояние до него с нашей переменной

maxDistance
и если расстояние больше, присваивайте это расстояние переменной 
maxDistance
и назначайте этого врага на переменную
farthest
.

Когда пройдете по всему массиву врагов,

farthest
будет содержать указатель на врага, находящегося на самом дальнем расстоянии от Вашего героя.

Далее, опять таки используйте цикл «while» для того, чтобы атаковать выбранного врага до тех пор, пока уровень его здоровья будет больше нуля.

Награда:

256xccXP 191xccCrystal

Песчаные змеи, прохождение:

Python:

# Первыми убивай самых дальних врагов.

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:

// Первыми убивай самых дальних врагов.

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:

# Первыми убивай самых дальних врагов.

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:

;; Первыми убивай самых дальних врагов.

(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:

-- Первыми убивай самых дальних врагов.

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

Прохождение Code Combat

]]>
https://coolcode.ru/codecombat-pustyinya-sarvena-bezumnyiy-makser-mad-maxer/feed/ 0