Javascript — Клёвый код 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 Javascript — Клёвый код 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. Лес Темнодрев. Если враг не сдаётся (If-stravaganza) https://coolcode.ru/codecombat-les-temnodrev-esli-vrag-ne-sdayotsya-if-stravaganza/ https://coolcode.ru/codecombat-les-temnodrev-esli-vrag-ne-sdayotsya-if-stravaganza/#respond Fri, 17 Mar 2017 05:07:56 +0000 http://coolcode.ru/?p=12991

Тема:

Аргументы

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

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

Переменные

Циклы «while»

Цели:

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

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

Совет 1:

Защищайся от огров с помощью выражения ‘if’, чтобы проверить, нет ли поблизости огра!

Не атакуй, если никого нет рядом, а то запутаешь героя.

Совет 2:

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

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

Python:
if conditional:
    # Этот код выполняется, если условие истинно.

JavaScript:
if(conditional) {
    // Этот код выполняется, если условие истинно.
}

CoffeScript:

Clojure:

LUA:

if conditional then
    -- Этот код выполняется, если условие истинно.
end

Условие может использовать для проверки существования юнита, типа юнита или расстояния до него.

На этом уровне тебе потребуется проверить при поиске, существует ли враг, и атаковать его при выполнении условия.

Python:
tree = hero.findNearestTree()
fruit = hero.pluckFruit(tree) # На дереве не всегда есть фрукт.
# Переменная `fruit` может указывать на фрукт с этого дерева.
if fruit:
    # Если переменная указывает на фрукт, то условие истинно, и этот код будет выполнен.
    hero.eat(fruit)

JavaScript:
var tree = hero.findNearestTree();
var fruit = hero.pluckFruit(tree); // На дереве не всегда есть фрукт.
// Переменная `fruit` может указывать на фрукт с этого дерева.
if(fruit) {
    // Если переменная указывает на фрукт, то условие истинно, и этот код будет выполнен.
    hero.eat(fruit);
}

CoffeScript:

Clojure:

LUA:

local tree = hero:findNearestTree()
local fruit = hero:pluckFruit(tree) -- На дереве не всегда есть фрукт.
-- Переменная `fruit` может указывать на фрукт этого дерева.
if fruit then
    -- Если переменная указывает на фрукт, то условие истинно, и этот код будет выполнен.
    hero:eat(fruit)
end

Награда:

53xccXP 33xccCrystal

Если враг не сдаётся, прохождение:

Python:

# Победи огров в их собственном лагере!

while True:
    enemy = hero.findNearestEnemy()
    # Используй выражение `if`, чтобы проверить наличие врага:
    if enemy:
        # Атакуй, если рядом враг:
        hero.attack(enemy)
        hero.attack(enemy)

JavaScript:

// Победи огров в их собственном лагере!

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

CoffeScript:

# Победи огров в их собственном лагере!

while true
    enemy = @findNearestEnemy()
    # Используй выражение `if`, чтобы проверить наличие врага:
    if enemy
        # Атакуй, если рядом враг:
        @attack enemy
        @attack enemy

Clojure:

LUA:

-- Победи огров в их собственном лагере!

while true do
    local enemy = hero:findNearestEnemy();
    -- Используй выражение `if`, чтобы проверить наличие врага:
    if enemy then
        -- Атакуй, если рядом враг:
        hero:attack(enemy)
        hero:attack(enemy)
    end
end

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

]]>
https://coolcode.ru/codecombat-les-temnodrev-esli-vrag-ne-sdayotsya-if-stravaganza/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. Гора Порвитучу. Горцы. (Highlanders) https://coolcode.ru/codecombat-gora-porvituchu-gortsyi-highlanders/ https://coolcode.ru/codecombat-gora-porvituchu-gortsyi-highlanders/#respond Wed, 19 Oct 2016 09:04:02 +0000 http://coolcode.ru/?p=8715

 ccCloudripMountain17

Тема:

Параметры

Аргументы

Продвинутые строки

Функции

Строки

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

Цели:

Найди шпиона.

Введение:

Эти странные статуи возле ворот содержат чёрную магию!

Если пройдёте через неё без защиты, вы потеряете солдат.

Посылайте только горцев которые имеют иммунитет к волшебству! Сделайте поиск по именам ваших союзников, чтобы выяснить, кто из них являются горцами.

Заметки:

Поиск .по строкам сложная работа,  но разберите каждую частью шаг за шагом!

Python:

haystack = "Hello, world!"
needle = "o, w"
needleIndex = 0
for i in range(len(haystack)):
    letter = haystack[i]
    # Проверяем буква в переменной letter соответствует букве в текущем индексе в needle
    if letter == needle[needleIndex]:
        # Увеличиваем индекс на единицу для следующей итерации for-цикла
        # Предыдущая проверка if с сравнением двух символов всё ещё значима.
        needleIndex += 1
        # Проверка needleIndex привысил ли он длины needle.
        if needleIndex >= len(needle):
            # Так как мы прошли все needle нашей строки, мы знаем, что содержится! 
            hero.say("Да! " + needle + " содержится в " + haystack + "!");
            break
    else:
        # Сбрасываем индекс, так как подстрока не соответствует.
        needleIndex = 0

JavaScript:

var haystack = "Hello, world!";
var needle = "o, w";
var needleIndex = 0;
for(var i = 0; i < haystack.length; i++) {
    var letter = haystack[i];
    // Проверяем буква в переменной letter соответствует букве в текущем индексе в needle
    if(letter === needle[needleIndex]) {
        // Увеличиваем индекс на единицу для следующей итерации for-цикла
        // Предыдущая проверка if с сравнением двух символов всё ещё значима.
        needleIndex += 1;
        // Проверка needleIndex привысил ли он длины needle.
        if(needleIndex >= needle.length) {
            // Так как мы прошли все needle нашей строки, мы знаем, что содержится! 
            hero.say("Yep! " + needle + " is in " + haystack + "!");
            break;
        }
    } else {
        // Сбрасываем индекс, так как подстрока не соответствует.
        needleIndex = 0;
    }
}

CoffeScript:

haystack = "Hello, world!"
needle = "o, w"
needleIndex = 0

for i in [0..haystack.length-1]
    letter = haystack[i]    
    # Проверяем буква в переменной letter соответствует букве в текущем индексе в needle
    if letter == needle[needleIndex]
        # Увеличиваем индекс на единицу для следующей итерации for-цикла
        # Предыдущая проверка if с сравнением двух символов всё ещё значима.
        needleIndex += 1
        # Проверка needleIndex привысил ли он длины needle.
        if needleIndex >= needle.length
            # Так как мы прошли все needle нашей строки, мы знаем, что содержится!
            @say "Yep! " + needle + " is in " + haystack + "!"
            break
    else
        # Сбрасываем индекс, так как подстрока не соответствует.
        needleIndex = 0
@say "All ok"

Clojure:

;;

LUA:

local haystack = "Hello, world!"
local needle = "o, w"
local needleIndex = 0

for i=1, #haystack do
    local letter = haystack[i]
    -- Проверяем буква в переменной letter соответствует букве в текущем индексе в needle
    if letter = needle[needleIndex] then
        -- Увеличиваем индекс на единицу для следующей итерации for-цикла
        -- Предыдущая проверка if с сравнением двух символов всё ещё значима.
        needleIndex = needleIndex +1
        -- Проверка needleIndex привысил ли он длины needle.
        if needleIndex >= #needle then
            -- Так как мы прошли все needle нашей строки, мы знаем, что содержится! 
            self:say("Yep! " + needle + " is in " + haystack + "!")
            break
        end
    else
        -- Сбрасываем индекс, так как подстрока не соответствует.
        needleIndex = 1
    end
end

От себя:

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

например в строке haystack = «lalala mmacla»

подстроку needle = «mac»

этот алгоритм не найдёт.

Так на восьмом шаге мы увидим символ m и счётчик needleIndex увеличиться на 1.

Следующий шаг алгоритма, мы будем сравнивать вторую «m» из массива haystack с «a» из массива needle. Они не равны и счётчик needleIndex сброситься, но повторно символ m проверяться не будет. И перейдёт к следующей букве массива haystack тоесть к «a».

Так мы пропустили  «mac»

Награда:

249xccXP 116xccCrystal

Шпион среди нас, прохождение:

Python:

# Вы должны победить огров
# Но они исопльзуют чёрную магию!
# Только солдаты горцы обладают иммунитетом.
# Найди горцев. Их имена всегда содержат "mac"

highlanderName = "mac"

# Эта функция ищет подстроку в строке
def wordInString(string, word):
    lenString = len(string)
    lenWord = len(word)
    # Пройди индексом (i) от 0 до (lenString - lenWord)    
    for i in range(lenString-lenWord):
        # Для каждого из индеска пройдись индексом (j) до конца длины слова
        for j in range(lenWord):
            # Если [i + j] я буква строки не равна [j] й букве слова, разорви (break) цикл    
            if string[i+j] != word[j]:
                break
            # Если [j] это последняя буква слова (j == lenWord - 1), return True
            if j==lenWord-1:
                
                return True
                
    # Если цикл закончился, то слова внутри строки нет. return False
    return False
    #return True # ∆ Удалите это, когда функция будет написана

# Посмотрите на ваших солдат и выбирете только горцев.
soldiers = hero.findFriends()
for soldier in soldiers:
    if wordInString(soldier.id, highlanderName):
        hero.say(soldier.id + " be ready.")
        
# 
hero.say("ATTACK!!!")

JavaScript:

// Вы должны победить огров
// Но они исопльзуют чёрную магию!
// Только солдаты горцы обладают иммунитетом.
// Найди горцев. Их имена всегда содержат "mac"

var highlanderName = "mac";

// Эта функция ищет подстроку в строке
function wordInString(string, word) {
    var lenString = string.length;
    var lenWord = word.length;
    // Пройди индексом (i) от 0 до (lenString - lenWord)
    for (var i = 0; i<lenString - lenWord;i ++){
        // Для каждого из индеска пройдись индексом (j) до конца длины слова
        for (var j = 0; j<lenWord; j ++){
            // Если [i + j] я буква строки не равна [j] й букве слова, разорви (break) цикл
            if (string[i+j] != word[j]){
                break;
            }
            // Если [j] это последняя буква слова (j == lenWord - 1), return True
            if (j == lenWord-1){
                return true;
            }
        }
    }
    // Если цикл закончился, то слова внутри строки нет. return False
    return false;
    //return true; // ∆ Удалите это, когда функция будет написана
}

// Посмотрите на ваших солдат и выбирете только горцев.
var soldiers = hero.findFriends();
for (var i = 0; i < soldiers.length; i++) {
    var soldier = soldiers[i];
    if (wordInString(soldier.id, highlanderName)) {
        hero.say(soldier.id + " be ready.");
    }
}

// 
hero.say("ATTACK!!!");

CoffeScript:

# Внутренние двери могут задержать огров на очень длительное время.
# Но один из крестьян орг-шпион!
# У нас есть подсказка: имя шпиона содержит букву "z"

# Эта функция делает проверку содержится ли в массиве некий number:
@numberInArray = (array, numb) ->
    # Перебрать каждый индекс строки и проверить, соответствует ли символ букве:
    for i in [0..array.length-1]
        if array[i] == numb
            return true
    return false

# Эта функция должна проверять, содержит ли строка определенный символ:     
@letterInWord = (word, letter) ->
    for i in [0..word.length-1]
        if word[i] == letter
            return true
    return false   

spyLetter = "z"
friends = @findFriends()

for j in [0..friends.length-1]
    friendName = friends[j].id
    if @letterInWord friendName, spyLetter
        # Выявить шпиона!
        @say friendName + " is a spy!"
    #else
    #    @say friendName + " is a friend."# ∆ Удалите эту строку после вызова функции letterInWord
@say "All ok"

Clojure:

;;

LUA:

-- Внутренние двери могут задержать огров на очень длительное время.
-- Но один из крестьян орг-шпион!
-- У нас есть подсказка: имя шпиона содержит букву "z"

-- Эта функция делает проверку содержится ли в массиве некий number:
function self.numberInArray(array, numb)
    for i=1, #array do
        if array[i] == numb then
            return true
        end
    end
    return false
end

-- Эта функция должна проверять, содержит ли строка определенный символ:
function self.letterInWord(word, letter)
    -- Перебрать каждый индекс строки и проверить, соответствует ли символ букве:
    for i=1, #word do
        if word[i] == letter then
            return true
        end
    end
    return false
end

local spyLetter = "z"

local friends = self:findFriends()

for j=1, #friends do
    local friendName = friends[j].id
    if self.letterInWord(friendName, spyLetter) then
        -- Выявить шпиона!
        self:say(friendName + " is a spy!")
    --else
        --self:say(friendName + " is a friend.") --  ∆ Удалите эту строку после вызова функции letterInWord
    end
end

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

]]>
https://coolcode.ru/codecombat-gora-porvituchu-gortsyi-highlanders/feed/ 0
CodeCombat. Гора Порвитучу. Ресурсы долин. (Resource Valleys) https://coolcode.ru/codecombat-gora-porvituchu-resursyi-dolin-resource-valleys/ https://coolcode.ru/codecombat-gora-porvituchu-resursyi-dolin-resource-valleys/#respond Fri, 12 Aug 2016 04:33:16 +0000 http://coolcode.ru/?p=9574

ccCloudripMountain21

Тема:

Аргументы

Циклы

Переменные

Литералы объектов

Функции

Циклы «for»

 

Цели:

 

Собери все монеты.

Люди должны выжить.

Совет 1:

На этом уровне герою необходимо будет отфильтровать монеты, так чтобы не было никакой путаницы среди крестьян!

Фильтрация это процесс сохранения или удаления определенных элементов. В частности, на этом уровне, герой должен от фильтровать каждую из монет в нужный массив, чтобы передать его соответствующему крестьянину.

Другой способ сделать то, что демонстрируется на уровне выглядит следующим образом:

Phyton:

# Берём массив с большим количеством элементов:
enemies = hero.findEnemies()
# Инициализируем новый массив, что бы поместить туда нужный тип объектов. 
throwers = []
# Перебираем все элементы нашего исходного массива.
for i in range(len(enemies)):
enemy = enemies[i]
# Проверяем, соответствует ли элемент нашему условию
if enemy.type == "thrower":
# Если это так, добавляем его в массив выборки
throwers.push(enemy)
# Теперь у нас есть массив всех метателей("thrower")!
throwers

JavaScript:

// Берём массив с большим количеством элементов:
var enemies = hero.findEnemies();
// Инициализируем новый массив, что бы поместить туда нужный тип объектов. 
var throwers = [];
// Перебираем все элементы нашего исходного массива.
for(var i = 0; i < enemies.length; i++) {
enemy = enemies[i];
// Проверяем, соответствует ли элемент нашему условию
if(enemy.type == "thrower") {
// Если это так, добавляем его в массив выборки
throwers.push(enemy);
}
}
// Теперь у нас есть массив всех метателей("thrower")!
throwers;

 

 

Награда:

255xccXP 117xccCrystal 

 

Ресурсы долин, прохождение:

Python:

# Соберите все монетки!
# Крестьяне не могут добыть монетки из других областей.
# Тем не менее, в каждой области появляется монеты только определенной ценности!
# Фильтруйте совершенно все items и отдавайте соответственные команды крестьянам.

def commandPeasant(peasant, coins):
    # Отдавайте команды крестьянам, что бы они нашли ближайшую монетку из своего массива.
    if coins[0]:
        coin=peasant.findNearest(coins)
        hero.command(peasant, "move", coin.pos)

friends = hero.findFriends()
peasants = {
    "Aurum": friends[0],
    "Argentum": friends[1],
    "Cuprum": friends[2]
}

while True:
    items = hero.findItems()
    goldCoins = []
    silverCoins = []
    bronzeCoins = []
    for i in range(len(items)):
        item = items[i]
        if item.value == 3:
            goldCoins.push(item)
        # Добавьте бронзовые и серебрянные монетки в соответствующий массив:
        if item.value == 2:
            silverCoins.push(item)
        if item.value == 1:
            bronzeCoins.push(item)
    
    commandPeasant(peasants.Aurum, goldCoins)
    commandPeasant(peasants.Argentum, silverCoins)
    commandPeasant(peasants.Cuprum, bronzeCoins)

JavaScript:

// Соберите все монетки!
// Крестьяне не могут добыть монетки из других областей.
// Тем не менее, в каждой области появляется монеты только определенной ценности!
// Фильтруйте совершенно все items и отдавайте соответственные команды крестьянам.

function commandPeasant(peasant, coins) {
    // Отдавайте команды крестьянам, что бы они нашли ближайшую монетку из своего массива.
    if (coins[0]) {
        var coin = peasant.findNearest(coins);
        hero.command(peasant, "move", coin.pos);
    }
}

var friends = hero.findFriends();
var peasants = {
    "Aurum":friends[0],
    "Argentum":friends[1],
    "Cuprum":friends[2]
};

while(true) {
    var items = hero.findItems();
    var goldCoins = [];
    var silverCoins = [];
    var bronzeCoins = [];
    for(var i = 0; i < items.length; i++) {
        var item = items[i];
        if(item.value == 3) {
            goldCoins.push(item);
        }
        // Добавьте бронзовые и серебрянные монетки в соответствующий массив:
        if(item.value == 2) {
            silverCoins.push(item);
        }
        if(item.value == 1) {
            bronzeCoins.push(item);
        }
    }
    commandPeasant(peasants.Aurum, goldCoins);
    commandPeasant(peasants.Argentum, silverCoins);
    commandPeasant(peasants.Cuprum, bronzeCoins);
}

CoffeScript:

#

Clojure:

;;

LUA:

--

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

]]>
https://coolcode.ru/codecombat-gora-porvituchu-resursyi-dolin-resource-valleys/feed/ 0
CodeCombat. Гора Порвитучу. Ущелье стальных когтей. (Steelclaw Gap) https://coolcode.ru/codecombat-gora-porvituchu-ushhele-stalnyih-kogtey-steelclaw-gap/ https://coolcode.ru/codecombat-gora-porvituchu-ushhele-stalnyih-kogtey-steelclaw-gap/#respond Thu, 11 Aug 2016 06:34:23 +0000 http://coolcode.ru/?p=9550

ccCloudripMountain20

Тема:

Циклы

Массивы

Функции

Циклы «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»

и т.д…

Награда:

255xccXP 117xccCrystal 

Бонус:

125xccXP 58xccCrystal 

Ущелье стальных когтей, прохождение:

Python:

# Этот уровень представляет % оператор, так же известный как оператор остатка от деления
# 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:

// Этот уровень представляет % оператор, так же известный как оператор остатка от деления
// 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:

# Этот уровень представляет % оператор, так же известный как оператор остатка от деления
# 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:

;;

LUA:

-- Этот уровень представляет % оператор, так же известный как оператор остатка от деления
-- 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

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

]]>
https://coolcode.ru/codecombat-gora-porvituchu-ushhele-stalnyih-kogtey-steelclaw-gap/feed/ 0
CodeCombat. Гора Порвитучу. В моем имени. (In My Name) https://coolcode.ru/codecombat-gora-porvituchu-v-moem-imeni-in-my-name/ https://coolcode.ru/codecombat-gora-porvituchu-v-moem-imeni-in-my-name/#respond Wed, 10 Aug 2016 03:37:37 +0000 http://coolcode.ru/?p=9541

ccCloudripMountain19

Тема:

Функции

Переменные

Строки

Пармаетры

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

Циклы «for»

Цели:

Найдите сокровище.

Совет 1:

Найдите сундук который содержит сокровища!

Имя Thoktar’а содержит тайну. Какой нибудь индекс имени Thoktar’a это ‘z’, это индекс сундуков к которым должен подойти игрок.

Повторите каждый элемент строкой с следующим кодом:

Python:

string = "Hello, World!"
for i in range(len(string)):
letter = string[i]
hero.say(letter) # Герой скажет каждую букву отдельно.

JavaScript:

var string = "Hello, World!";
for(var i = 0; i < string.length; i++) {
var letter = string[i];
hero.say(letter); // Герой скажет каждую букву отдельно.
}

LUA:
local string = "Hello World!"
for i=1, #string do
    local letter = string[i]
    hero:say(letter) -- Герой скажет каждую букву отдельно.
end;

Используйте это знание чтобы победить Thoktar’a!

Награда:

379xccXP 175xccCrystal 

Библиотечный тактик, прохождение:

Python:

# Вы должны найти сокровище.
# Используй имя Thoktar'а в качестве подсказки.
# Правильный сундук сокровищ - это есть то же самое число как индекс 'z' в имени Thoktar'a.


# Эта функция должна возвращать число, которой по счету буква находится в слове:
def letterIndex(word, letter):
    # Шаг по каждой букве есть индекс составления слова
    for i in range(len(word)):
    # Сравнивать буквы в слове с подставленной буквой
        if letter==word[i]:
    # Если требуется буква, тогда возвращаем текущий индекс
            return i      
    # Если не требуется, тогда возращаем значение по умолчанию
    return 0

ogreLetter = "z"
shaman = hero.findByType("thoktar")[0]

# Найдите индекс и используйте его для нахождения сокровища.
chestIndex = letterIndex(shaman.id, "z")
hero.moveXY(16 + chestIndex * 8, 36)

JavaScript:

// Вы должны найти сокровище.
// Используй имя Thoktar'а в качестве подсказки.
// Правильный сундук сокровищ - это есть то же самое число как индекс 'z' в имени Thoktar'a.


// Эта функция должна возвращать число, которой по счету буква находится в слове:
function letterIndex(word, letter) {
    // Шаг по каждой букве есть индекс составления слова
    for (var i=0; i<word.length; i++){
    // Сравнивать буквы в слове с подставленной буквой
        if (letter==word[i]) {
    // Если требуется буква, тогда возвращаем текущий индекс
            return i;
        }
    // Если не требуется, тогда возращаем значение по умолчанию
    }
    return 0;
}

var ogreLetter = "z";
var shaman = hero.findByType("thoktar")[0];

// Найдите индекс и используйте его для нахождения сокровища.
var chestIndex = letterIndex(shaman.id, "z");
hero.moveXY(16 + chestIndex * 8, 36);

CoffeScript:

##

Clojure:

;;

LUA:

-- Вы должны найти сокровище.
-- Используй имя Thoktar'а в качестве подсказки.
-- Правильный сундук сокровищ - это есть то же самое число как индекс 'z' в имени Thoktar'a.


-- Эта функция должна возвращать число, которой по счету буква находится в слове:
function hero.letterIndex(word, letter) 
    -- Шаг по каждой букве есть индекс составления слова
    for wordIndex=1, #word do
    -- Сравнивать буквы в слове с подставленной буквой
        if letter == word[wordIndex] then
    -- Если требуется буква, тогда возвращаем текущий индекс
            return wordIndex
        end 
    -- Если не требуется, тогда возращаем значение по умолчанию
    end
    return 0
end

local ogreLetter = "z";
local shaman = hero:findByType("thoktar")[1];
-- Найдите индекс и используйте его для нахождения сокровища.
local chestIndex = hero.letterIndex(shaman.id, "z");
hero:moveXY(16 + (chestIndex-1) * 8, 36);

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

]]>
https://coolcode.ru/codecombat-gora-porvituchu-v-moem-imeni-in-my-name/feed/ 0