Языки программирования — Клёвый код https://coolcode.ru Скриптописание и кодинг Mon, 13 Mar 2017 10:13:56 +0000 ru-RU hourly 1 https://wordpress.org/?v=5.8.10 https://coolcode.ru/wp-content/uploads/2015/10/YO1-150x150.png Языки программирования — Клёвый код https://coolcode.ru 32 32 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
CodeCombat. Гора Порвитучу. Библиотечный тактик. (Library Tactician) https://coolcode.ru/codecombat-gora-porvituchu-bibliotechnyiy-taktik-library-tactician/ https://coolcode.ru/codecombat-gora-porvituchu-bibliotechnyiy-taktik-library-tactician/#comments Tue, 09 Aug 2016 04:31:30 +0000 http://coolcode.ru/?p=9526

 ccCloudripMountain18

Тема:

Арифметика

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

Функции

Булевая логика

Математические операции

Алгоритмы

Цели:

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

Совет 1:

Функции могут «возвращать» значение.

На этом уровне , у вас есть функция ‘findStrongerTarget()’ которая находит и указывает (или как говорят программисты «возвращает») местонахождение противника с самым высоким уровнем здоровья.

Когда функция возвращает значение, Вы можете присвоить это значение переменной при вызове функции. Например: ‘archerTarget = findStrongestTarget ()’ (форма может измениться в зависимости от языка, который Вы используете, но идея остается неизменной).

Награда:

379xccXP 175xccCrystal 

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

Python:

# Hushbaum попал в засаду огров!
# Она занята исцелением своих солдат. Вам следуют отдать им приказ сражаться!
# Огры могут вызвать подкрепление, если посчитают, что смогут добраться до Hushbaum'а или ваших лучников. Поэтому держите их в оборонительном кольце!

# Солдаты формируют круг и защищаются.
def commandSoldier(soldier, soldierIndex, numSoldiers):
    angle = Math.PI * 2 * soldierIndex / numSoldiers
    defendPos = {"x": 41, "y": 40}
    defendPos.x += 10 * Math.cos(angle)
    defendPos.y += 10 * Math.sin(angle)
    hero.command(soldier, "defend", defendPos);

# Найдите самую крепкую цель (больше всего здоровья)
# Эта функция что-то возвращает! Когда Вы вызываете функцию, то получаете от неё какое-то значение.
def findStrongestTarget():
    mostHealth = 0
    bestTarget = None
    enemies = hero.findEnemies()
    # Определите, у какого из врагов больше всего уровень здоровья и направьте метод bestTarget на этого врага.
    for enemie in enemies:
        if bestTarget:
            if enemie.health>bestTarget.health:
                bestTarget=enemie
        else:
            bestTarget=enemie
    # Концентрируйте огонь лучников на одного противника только в том случае, когда нападает большой огр.
    if bestTarget and bestTarget.health > 15:
        return bestTarget
    else:
        return None


# Если у врага, определенного как strongestTarget больше 15 единиц здоровья, атакуйте его. Иначе, атакуйте ближайшего врага.
def commandArcher(archer):
    nearest = archer.findNearestEnemy()
    if archerTarget:
        hero.command(archer, "attack", archerTarget)
    elif nearest:
        hero.command(archer, "attack", nearest)

archerTarget = None

while True:
    # Если враг, определенный как archerTarget мертв или не существует, найдите нового.
    if not archerTarget or archerTarget.health <= 0:
        # Установите целью (или "аргументом") функции archerTarget, значение, возвращенное функцией findStrongestTarget().
        archerTarget = findStrongestTarget()

    friends = hero.findFriends()
    soldiers = hero.findByType("soldier")
    # Create a variable containing your archers.
    archers = hero.findByType("archer")
    
    for i in range(len(soldiers)):
        soldier = soldiers[i]
        commandSoldier(soldier, i, len(soldiers));

    # Используйте функцию commandArcher() для управления своими лучниками.
    for i in range(len(archers)):
        archer = archers[i]
        commandArcher(archer)

JavaScript:

// Hushbaum попал в засаду огров!
// Она занята исцелением своих солдат. Вам следуют отдать им приказ сражаться!
// Огры могут вызвать подкрепление, если посчитают, что смогут добраться до Hushbaum'а или ваших лучников. Поэтому держите их в оборонительном кольце!

// Солдаты формируют круг и защищаются.
hero.commandSoldier = function(soldier, soldierIndex, numSoldiers) {
    var angle = Math.PI * 2 * soldierIndex / numSoldiers;
    var defendPos = {x: 41, y: 40};
    defendPos.x += 10 * Math.cos(angle);
    defendPos.y += 10 * Math.sin(angle);
    hero.command(soldier, "defend", defendPos);
};

// Найдите самую крепкую цель (больше всего здоровья)
// Эта функция что-то возвращает! Когда Вы вызываете функцию, то получаете от неё какое-то значение.
hero.findStrongestTarget = function() {
    var mostHealth = 0;
    var bestTarget = null;
    var enemies = hero.findEnemies();
    // Определите, у какого из врагов больше всего уровень здоровья и направьте метод bestTarget на этого врага.
    for(var i=0; i < enemies.length; i++) {
        var enemie=enemies[i];
        if (bestTarget){
            if (enemie.health>bestTarget.health){
                bestTarget=enemie;
            }
        } else {
            bestTarget=enemie;
        }        
    }
    // Концентрируйте огонь лучников на одного противника только в том случае, когда нападает большой огр.
    if (bestTarget && bestTarget.health > 15) {
        return bestTarget;
    } else {
        return null;
    }
};


// Если у врага, определенного как strongestTarget больше 15 единиц здоровья, атакуйте его. Иначе, атакуйте ближайшего врага.
hero.commandArcher = function(archer) {
    var nearest = archer.findNearestEnemy();
    if(archerTarget) {
        hero.command(archer, "attack", archerTarget);
    } else if(nearest) {
        hero.command(archer, "attack", nearest);
    }
};

var archerTarget = null;
while(true) {
    // Если враг, определенный как archerTarget мертв или не существует, найдите нового.
    if(!archerTarget || archerTarget.health <= 0) {
        // Установите целью (или "аргументом") функции archerTarget, значение, возвращенное функцией findStrongestTarget().
        archerTarget = hero.findStrongestTarget();
    }
    var friends = hero.findFriends();
    var soldiers = hero.findByType("soldier");
    // Create a variable containing your archers.
    var archers = hero.findByType("archer");
    
    for(var i=0; i < soldiers.length; i++) {
        var soldier = soldiers[i];
        hero.commandSoldier(soldier, i, soldiers.length);
    }
    // Используйте функцию commandArcher() для управления своими лучниками.
    for(var i=0; i < archers.length; i++) {
        var archer = archers[i];
        hero.commandArcher(archer);
    }
}

CoffeScript:

##

Clojure:

;;

LUA:

-- Hushbaum попал в засаду огров!
-- Она занята исцелением своих солдат. Вам следуют отдать им приказ сражаться!
-- Огры могут вызвать подкрепление, если посчитают, что смогут добраться до Hushbaum'а или ваших лучников. Поэтому держите их в оборонительном кольце!

-- Солдаты формируют круг и защищаются.
function self.commandSoldier(soldier, soldierIndex, numSoldiers)
    local angle = Math.PI * 2 * soldierIndex / numSoldiers
    local defendPos = {"x"= 41, "y"= 40}
    defendPos.x = defendPos.x + 10 * Math.cos(angle)
    defendPos.y = defendPos.y + 10 * Math.sin(angle)
    self:command(soldier, "defend", defendPos)
end

-- Найдите самую крепкую цель (больше всего здоровья)
-- Эта функция что-то возвращает! Когда Вы вызываете функцию, то получаете от неё какое-то значение.
function self.findStrongestTarget()
    local mostHealth = 0
    local bestTarget = nil
    local enemies = self:findEnemies()
    -- Определите, у какого из врагов больше всего уровень здоровья и направьте метод bestTarget на этого врага.
    for enemieIndex=1, #enemies do
        if bestTarget then
            if enemies[enemieIndex].health> bestTarget.health then
                bestTarget=enemies[enemieIndex]
            end
        else
            bestTarget=enemies[enemieIndex]
        end 
    end 
    -- Концентрируйте огонь лучников на одного противника только в том случае, когда нападает большой огр.
    if bestTarget and bestTarget.health > 15 then
        return bestTarget
    else
        return nil
    end
end

-- Если у врага, определенного как strongestTarget больше 15 единиц здоровья, атакуйте его. Иначе, атакуйте ближайшего врага.
function self.commandArcher(archer)
    --local nearest = archer:findNearest(archer:findEnemies())
    local nearest = archer:findNearestEnemy()
    if archerTarget then
        self:command(archer, "attack", archerTarget)
    elseif nearest then
        self:command(archer, "attack", nearest)
    end
end

local archerTarget = nil
local soldiers = self:findByType("soldier")
-- Create a variable containing your archers.
local archers = self:findByType("archer")

loop
    -- Если враг, определенный как archerTarget мертв или не существует, найдите нового.
    if not archerTarget then 
        archerTarget = self.findStrongestTarget()
    end
    if archerTarget then
        if archerTarget.health <= 0 then 
            -- Установите целью (или "аргументом") функции archerTarget, значение, возвращенное функцией findStrongestTarget().
            archerTarget = self.findStrongestTarget()
        end
    end

    for i, soldier in pairs(soldiers) do
        self.commandSoldier(soldier, i, #soldiers)
    end

    -- Используйте функцию commandArcher() для управления своими лучниками.
    for archerIndex=1, #archers do    
        self.commandArcher(archers[archerIndex])
    end

end

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

]]>
https://coolcode.ru/codecombat-gora-porvituchu-bibliotechnyiy-taktik-library-tactician/feed/ 1
CodeCombat. Гора Порвитучу. Шпион среди нас. (The Spy Among Us) https://coolcode.ru/codecombat-gora-porvituchu-shpion-sredi-nas-the-spy-among-us/ https://coolcode.ru/codecombat-gora-porvituchu-shpion-sredi-nas-the-spy-among-us/#respond Fri, 03 Jun 2016 09:07:18 +0000 http://coolcode.ru/?p=8703

 ccCloudripMountain16

Тема:

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

Строки

Переменные

Массивы

Циклы «for»

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

Цели:

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

Введение:

Шпион среди нас!

Найди союзника с буквой z, что бы найти шпиона!

Заметки:

Строки похожи на массивы. Они имеют длину и  могут иметь индекс (ссылку на элемент), так же как массивы.

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

Награда:

249xccXP 116xccCrystal

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

Python:

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

# Эта функция делает проверку содержится ли в массиве некий number:
def numberInArray(array, number):
    for i in range(len(array)):
        if array[i] == numb:
            return True
    return False

# Эта функция должна проверять, содержит ли строка определенный символ:
def letterInWord(word, letter):
    # Перебрать каждый индекс строки и проверить, соответствует ли символ букве:
    for i in range(len(word)):
        if word[i] == letter:
            return True
    return False

spyLetter = "z"
friends = hero.findFriends()

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

JavaScript:

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

// Эта функция делает проверку содержится ли в массиве некий number:
function numberInArray(array, numb) {
    for (var i = 0; i < array.length; i++) {
        if (array[i] === numb) {
            return true;
        }
    }
    return false;
}

// Эта функция должна проверять, содержит ли строка определенный символ:
function letterInWord(word, letter) {
    // Перебрать каждый индекс строки и проверить, соответствует ли символ букве:
    for (var i = 0; i < word.length; i++) {
        if (word[i] === letter) {
            return true;
        }
    }
    return false;
}

var spyLetter = "z";
var friends = hero.findFriends();

for (var j = 0; j < friends.length; j++) {
    var friendName = friends[j].id;
    if (letterInWord(friendName, spyLetter)) {
        // Выявить шпиона!
        hero.say(friendName + " is a spy!!!");
   // } else {
    //    hero.say(friendName + " is a friend."); // ∆ Удалите эту строку после вызова функции letterInWord
    }
}

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-shpion-sredi-nas-the-spy-among-us/feed/ 0
CodeCombat. Гора Порвитучу. Геометрия цветов. (The Geometry of Flowers) https://coolcode.ru/codecombat-gora-porvituchu-geometriya-tsvetov-the-geometry-of-flowers/ https://coolcode.ru/codecombat-gora-porvituchu-geometriya-tsvetov-the-geometry-of-flowers/#respond Thu, 02 Jun 2016 11:23:13 +0000 http://coolcode.ru/?p=8628

 ccCloudripMountain13

Тема:

Циклы

Арифметика

Массивы

Функции

Математические операции

Графика

Цели:

Нарисуй круг на красной метке.

Нарисуй квадрат на белой метке.

Развлекайся, рисуя всё что угодно!

Заметки:

В коде содержатся функции

drawCircle
(рисуй круг) и
drawSquare
(рисуй квадрат).

Чтобы пройти уровень, тебе нужно нарисовать круг размером

10
и с координатами точки
redX
(красный Х) и квадрат размером
10
и с координатами точки
whiteX
(белый Х).

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

Награда:

371xccXP 172xccCrystal ссBossStarII

Геометрия цветов, прохождение:

Python:

# Теперь у тебя есть Кольца Цветов! Ты можешь:
# toggleFlowers(true/false) - включить или выключить.
# setFlowerColor("random") - также можно выбрать "pink", "red", "blue", "purple", "yellow", или "white".

# Вот некоторые функции для рисования фигур:
# х, у - центр фигуры
# size - размер фигуры (radius, side length)
def drawCircle(x, y, size):
    angle = 0
    hero.toggleFlowers(False)
    while angle <= Math.PI * 2:
        newX = x + (size * Math.cos(angle))
        newY = y + (size * Math.sin(angle))
        hero.moveXY(newX, newY)
        hero.toggleFlowers(True)
        angle += 0.2

def drawSquare(x, y, size):
    hero.toggleFlowers(False)
    cornerOffset = size / 2
    hero.moveXY(x - cornerOffset, y - cornerOffset)
    hero.toggleFlowers(True)
    hero.moveXY(x + cornerOffset, y - cornerOffset)
    hero.moveXY(x + cornerOffset, y + cornerOffset)
    hero.moveXY(x - cornerOffset, y + cornerOffset)
    hero.moveXY(x - cornerOffset, y - cornerOffset)


redX = {"x": 28, "y": 36}
whiteX = {"x": 44, "y": 36}

# Выбери цвет.
hero.setFlowerColor("red")
# Нарисуй круг размером 10 на красной метке.
drawCircle(redX.x, redX.y, 10)
# Измени цвет!
hero.setFlowerColor("white")
# Нарисуй квадрат размером 10 на белой метке.
drawSquare(whiteX.x, whiteX.y, 10)
# Теперь экспериментируй, рисуя все что угодно!

JavaScript:

// Теперь у тебя есть Кольца Цветов! Ты можешь:
// toggleFlowers(true/false) - включить или выключить.
// setFlowerColor("random") - также можно выбрать "pink", "red", "blue", "purple", "yellow", или "white".

// Вот некоторые функции для рисования фигур:
// х, у - центр фигуры
// size - размер фигуры (radius, side length)
hero.drawCircle = function(x, y, size) {
    var angle = 0;
    hero.toggleFlowers(false);
    while (angle <= Math.PI * 2) {
        var newX = x + (size * Math.cos(angle));
        var newY = y + (size * Math.sin(angle));
        hero.moveXY(newX, newY);
        hero.toggleFlowers(true);
        angle += 0.2;
    }
};

hero.drawSquare = function(x, y, size) {
    hero.toggleFlowers(false);
    var cornerOffset = size / 2;
    hero.moveXY(x - cornerOffset, y - cornerOffset);
    hero.toggleFlowers(true);
    hero.moveXY(x + cornerOffset, y - cornerOffset);
    hero.moveXY(x + cornerOffset, y + cornerOffset);
    hero.moveXY(x - cornerOffset, y + cornerOffset);
    hero.moveXY(x - cornerOffset, y - cornerOffset);
};

var redX = {x: 28, y: 36};
var whiteX = {x: 44, y: 36};

// Выбери цвет.
hero.setFlowerColor("red");
// Нарисуй круг размером 10 на красной метке.
hero.drawCircle(redX.x, redX.y, 10);
// Измени цвет!
hero.setFlowerColor("white");
// Нарисуй квадрат размером 10 на белой метке.
hero.drawSquare(whiteX.x, whiteX.y, 10);
// Теперь экспериментируй, рисуя все что угодно!

CoffeScript:

# Теперь у тебя есть Кольца Цветов! Ты можешь:
# toggleFlowers(true/false) - включить или выключить.
# setFlowerColor("random") - также можно выбрать "pink", "red", "blue", "purple", "yellow", или "white".

# Вот некоторые функции для рисования фигур:
# х, у - центр фигуры
# size - размер фигуры (radius, side length)
@drawCircle = (x, y, size) ->
  angle = 0
  @toggleFlowers false
  while angle <= Math.PI * 2
    newX = x + size * Math.cos(angle)
    newY = y + size * Math.sin(angle)
    @moveXY newX, newY
    @toggleFlowers true
    angle += 0.2
  return

@drawSquare = (x, y, size) ->
  @toggleFlowers false
  cornerOffset = size / 2
  @moveXY(x - cornerOffset, y - cornerOffset)
  @toggleFlowers true
  @moveXY x + cornerOffset, y - cornerOffset
  @moveXY x + cornerOffset, y + cornerOffset
  @moveXY x - cornerOffset, y + cornerOffset
  @moveXY x - cornerOffset, y - cornerOffset
  return

redX = {x: 28, y: 36}
whiteX = {x: 44, y: 36}

# Выбери цвет.
@setFlowerColor("red")
# Нарисуй круг размером 10 на красной метке.
@drawCircle(redX.x, redX.y, 10)
# Измени цвет!
@setFlowerColor("white")
# Нарисуй квадрат размером 10 на белой метке.
@drawSquare(whiteX.x, whiteX.y, 10)
# Теперь экспериментируй, рисуя все что угодно!

Clojure:

;;

LUA:

-- Теперь у тебя есть Кольца Цветов! Ты можешь:
-- toggleFlowers(true/false) - включить или выключить.
-- setFlowerColor("random") - также можно выбрать "pink", "red", "blue", "purple", "yellow", или "white".

-- Вот некоторые функции для рисования фигур:
-- х, у - центр фигуры
-- size - размер фигуры (radius, side length)
function self.drawCircle (x, y, size)
    local angle = 0
    local newX = 0
    local newY = 0
    self:toggleFlowers(false)
    while angle <= Math.PI * 2 do
        local newX = x + (size * Math.cos(angle))
        local newY = y + (size * Math.sin(angle))
        self:moveXY(newX, newY)        
        self:toggleFlowers(true)
        angle = angle + 0.2
    end
end

function self.drawSquare (x, y, size)
    self:toggleFlowers(false)
    local cornerOffset = size / 2
    self:moveXY(x - cornerOffset, y - cornerOffset)
    self:toggleFlowers(true)
    self:moveXY(x + cornerOffset, y - cornerOffset)
    self:moveXY(x + cornerOffset, y + cornerOffset)
    self:moveXY(x - cornerOffset, y + cornerOffset)
    self:moveXY(x - cornerOffset, y - cornerOffset)
end

local redX = {x=28, y=36}
local whiteX = {x=44, y=36}

-- Выбери цвет.
self:setFlowerColor("red")
-- Нарисуй круг размером 10 на красной метке.
self.drawCircle(redX.x, redX.y, 10)
-- Измени цвет!
self:setFlowerColor("white")
-- Нарисуй квадрат размером 10 на белой метке.
self.drawSquare(whiteX.x, whiteX.y, 10)
-- Теперь экспериментируй, рисуя все что угодно!

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

]]>
https://coolcode.ru/codecombat-gora-porvituchu-geometriya-tsvetov-the-geometry-of-flowers/feed/ 0
CodeCombat. Гора Порвитучу. Охотники и добыча. (Hunters and Prey) https://coolcode.ru/codecombat-gora-porvituchu-ohotniki-i-dobyicha-hunters-and-prey/ https://coolcode.ru/codecombat-gora-porvituchu-ohotniki-i-dobyicha-hunters-and-prey/#respond Thu, 02 Jun 2016 05:10:18 +0000 http://coolcode.ru/?p=8697

 ccCloudripMountain15

Тема:

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

Циклы

Булевая Логика

Циклы «for»

Функции

Аргументы

 

Цели:

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

 

Бонус: Ни один из ваших союзников не умрёт.

Заметки:

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

Для того что бы это сделать, вам придётся отдавать лучникам команды command(archer, «move», archer.pos), это означает «стой там где ты находишься». Это необходимо делать, так как по умолчанию ваши лучники будут приследовать врага, если не получают ни каких команд.

Если враг будет находится в зоне атаки лучника (25 метров), ваш лучник сможет атаковать врага.

Награда:

249xccXP 116xccCrystal

123xccXP 57xccCrystal

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

Python:

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

def pickUpCoin():
    # Соберите монеты.
    hero.move((hero.findNearest(hero.findItems())).pos)    

def summonTroops():
    # Призовите солдат если у Вас есть золото.    
    if hero.gold>hero.costOf("soldier"):
        hero.summon("soldier")
    
# У этой функции есть аргумент названный солдатом.
# Аргументы похожи на переменные.
# Стоимость аргумента определена, когда вызвана функцуя.
def commandSoldier(soldier):
    # Солдаты должны атаковать противника.
    if soldier.health>50:    
        enemy = soldier.findNearestEnemy()
        if enemy:
            hero.command(soldier, "attack", enemy)
    else:
        hero.command(soldier, "move", {"x":26,"y":26})
# Напишите функцию commandArcher что бы сказать своим лучникам что делать!
# Она должна принимать один аргумент, который будет представлять лучника переданного функции при вызове.
# Лучники должны атаковать врагов, только если они ближе 25 метров, иначе, ждать на своих позициях.
def commandArcher(archer):
    hero.command(archer, "move", archer.pos)
    

while True:
    pickUpCoin()
    summonTroops()
    friends = hero.findFriends()
    for friend in friends:
        if friend.type == "soldier":
            # This friend will be assigned to the variable soldier in commandSoldier
            commandSoldier(friend)
        elif friend.type == "archer":
            # Уверенно командуйте Вашими лучниками.
            commandArcher(friend)

JavaScript:

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

hero.pickUpCoin = function() {
    // Соберите монеты.
    hero.move((hero.findNearest(hero.findItems())).pos);
};

hero.summonTroops = function() {
    // Призовите солдат если у Вас есть золото.
    if (hero.gold>hero.costOf("soldier")){
        hero.summon("soldier");
    }
};

// У этой функции есть аргумент названный солдатом.
// Аргументы похожи на переменные.
// Стоимость аргумента определена, когда вызвана функцуя.
hero.commandSoldier = function(soldier) {
    // Солдаты должны атаковать противника.
    if (soldier.health>50){
        var enemy = soldier.findNearestEnemy();
        if (enemy){
            hero.command(soldier, "attack", enemy);
        }
    } else {
        hero.command(soldier, "move", {x:26,y:26});
    }    
};

// Напишите функцию commandArcher что бы сказать своим лучникам что делать!
// Она должна принимать один аргумент, который будет представлять лучника переданного функции при вызове.
// Лучники должны атаковать врагов, только если они ближе 25 метров, иначе, ждать на своих позициях.
hero.commandArcher = function(archer) {
    hero.command(archer, "move", archer.pos);
};

while(true) {
    hero.pickUpCoin();
    hero.summonTroops();
    var friends = hero.findFriends();
    for(var i=0; i < friends.length; i++) {
        var friend = friends[i];
        if(friend.type == "soldier") {
            // This friend will be assigned to the variable soldier in commandSoldier
            hero.commandSoldier(friend);
        } else if(friend.type == "archer") {
            // Уверенно командуйте Вашими лучниками.
            hero.commandArcher(friend);
        }
    }
}

CoffeScript:

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

@pickUpCoin = ->
    # Соберите монеты.
    @move (@findNearest(@findItems())).pos
	#@say "I should collect coins!"
@summonTroops = ->
    # Призовите солдат если у Вас есть золото.
    if @gold>@costOf "soldier"
        @summon "soldier"
    #@say "I should summon soldiers!"
# У этой функции есть аргумент названный солдатом.
# Аргументы похожи на переменные.
# Стоимость аргумента определена, когда вызвана функцуя.
@commandSoldier = (soldier) ->
    # Солдаты должны атаковать противника.
    if soldier.health>50
        enemy = soldier.findNearestEnemy()
        if enemy
            @command soldier, "attack", enemy
    else
        @command soldier, "move", {x:26,y:26}
	#@say "I should command soldiers!"
# Напишите функцию commandArcher что бы сказать своим лучникам что делать!
# Она должна принимать один аргумент, который будет представлять лучника переданного функции при вызове.
# Лучники должны атаковать врагов, только если они ближе 25 метров, иначе, ждать на своих позициях.
@commandArcher = (archer) ->
    @command archer, "move", archer.pos
    
loop
    @pickUpCoin()
    @summonTroops()
    friends = @findFriends()
    for friend in friends
        if friend.type is "soldier"
            # This friend will be assigned to the variable soldier in commandSoldier
            @commandSoldier friend
        else if friend.type is "archer"
            # Уверенно командуйте Вашими лучниками.
            @commandArcher friend
            #@say "I should command archers!"

Clojure:

;;

LUA:

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

function self.pickUpCoin()
    -- Соберите монеты.
    self:move((self:findNearest(self:findItems())).pos)
	--self:say("I should collect coins!")
end

function self.summonTroops()
    -- Призовите солдат если у Вас есть золото.
    if self.gold>self:costOf("soldier") then
        self:summon("soldier")
    end
	--self:say("I should summon soldiers!")
end
    
-- У этой функции есть аргумент названный солдатом.
-- Аргументы похожи на переменные.
-- Стоимость аргумента определена, когда вызвана функцуя.
function self.commandSoldier(soldier)
    -- Солдаты должны атаковать противника.
    if soldier.health>50 then
        local enemy = soldier:findNearestEnemy()
        if enemy then
            self:command(soldier, "attack", enemy)
        end
    else
        self:command(soldier, "move", {x=26,y=26})
    end
	--self:say("I should command soldiers!")
end

-- Напишите функцию commandArcher что бы сказать своим лучникам что делать!
-- Она должна принимать один аргумент, который будет представлять лучника переданного функции при вызове.
-- Лучники должны атаковать врагов, только если они ближе 25 метров, иначе, ждать на своих позициях.
function self.commandArcher(archer)
    self:command(archer, "move", archer.pos)
end

loop
    self.pickUpCoin()
    self.summonTroops()
    local friends = self:findFriends()
    for friendIndex=1, #friends do
        if friends[friendIndex].type == "soldier" then
            -- This friend will be assigned to the variable soldier in commandSoldier
            self.commandSoldier(friends[friendIndex])
        elseif friends[friendIndex].type == "archer" then
            -- Уверенно командуйте Вашими лучниками.
            self.commandArcher(friends[friendIndex])
        end
    end
end

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

]]>
https://coolcode.ru/codecombat-gora-porvituchu-ohotniki-i-dobyicha-hunters-and-prey/feed/ 0
CodeCombat. Гора Порвитучу. Эти Два Цветка. (The Two Flowers) https://coolcode.ru/codecombat-gora-porvituchu-eti-dva-tsvetka-the-two-flowers/ https://coolcode.ru/codecombat-gora-porvituchu-eti-dva-tsvetka-the-two-flowers/#respond Wed, 01 Jun 2016 07:32:17 +0000 http://coolcode.ru/?p=8617

 ccCloudripMountain12

Тема:

Строки

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

Циклы

Массивы

Циклы «for»

Функции

Цели:

Цветы должны вырасти до полного размера.

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

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

Заметки

На этом уровне с крестьянином связаны два цветка.

Если крестьянин получает повреждения, то два цветка уменьшаются в размерах.

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

Чтобы преуспеть, вы должны написать тело двух функций

commandSoldiers
и
pickUpNearestCoin
. Мы дали вам функцию
summonSoldiers
, как пример определения функций.

Не забудьте раскомментировать вызовы функций внутри цикла, когда вы будете готовы!

Награда:

358xccXP 168xccCrystal ссRingFlowers

Эти Два Цветка, прохождение:

Python:

# Если крестьянин будет ранен, цветы высыхают!

def summonSoldiers():
    if hero.gold >= hero.costOf("soldier"):
        hero.summon("soldier")

# Определите функцию: commandSoldiers
def commandSoldiers():
    army = hero.findByType("soldier")
    for friend in army:           
        enemy = friend.findNearestEnemy()
        if enemy and friend.distanceTo(enemy)<5:            
            hero.command(friend, "attack", enemy)
        else:
            hero.command(friend, "move", peasant.pos)
# Определите функцию: pickUpNearestCoin
def pickUpNearestCoin():
    hero.move((hero.findNearest(hero.findItems())).pos)
    
peasant = hero.findByType("peasant")[0]

while True:
    summonSoldiers()
    commandSoldiers()
    pickUpNearestCoin()

JavaScript:

// Если крестьянин будет ранен, цветы высыхают!

hero.summonSoldiers = function() {
    if (hero.gold >= hero.costOf("soldier")) {
        hero.summon("soldier");
    }
};

// Определите функцию: commandSoldiers
hero.commandSoldiers = function() {
    var friends = hero.findByType("soldier");
    for(var i=0; i < friends.length; i++) {
        var friend = friends[i];
        var enemy = friend.findNearestEnemy();
        if(enemy && friend.distanceTo(enemy) < 5) {
            // Прикажи войскам атаковать.
            hero.command(friend, "attack", enemy);
        } else {
            // Прикажи войскам двигаться на точку.
            hero.command(friend, "move", peasant.pos);
        }
    }
};

// Определите функцию: pickUpNearestCoin
hero.pickUpNearestCoin = function() {    
    hero.move((hero.findNearest(hero.findItems())).pos);
};

var peasant = hero.findByType("peasant")[0];


while(true) {
    hero.summonSoldiers();
    hero.commandSoldiers();
    hero.pickUpNearestCoin();
    
}

CoffeScript:

# Если крестьянин будет ранен, цветы высыхают!

@summonSoldiers = ->
    if @gold >= @costOf "soldier"
        @summon "soldier"

# Определите функцию: commandSoldiers
@commandSoldiers = ->
    friends = @findByType "soldier"
    for friend in friends
        enemy = friend.findNearestEnemy();
        if enemy and friend.distanceTo(enemy)<5
            @command friend, "attack", enemy
        else
            @command friend, "move", peasant.pos

# Определите функцию: pickUpNearestCoin
@pickUpNearestCoin = ->
    @move((@findNearest(@findItems())).pos)
        
peasant = @findByType("peasant")[0]

loop
    @summonSoldiers()
    @commandSoldiers()
    @pickUpNearestCoin()

    #@say "Delete this line once your loop is finite."

Clojure:

;;

LUA:

-- Если крестьянин будет ранен, цветы высыхают!

function self.summonSoldiers ()
    if self.gold >= self:costOf("soldier") then
        self:summon("soldier")
    end
end

-- Определите функцию: commandSoldiers
function self.commandSoldiers()
    local friends = self:findByType("soldier")
    for j=1,#friends do        
        local friend = friends[j]
        local enemy = friend:findNearestEnemy()
        if enemy and friend:distanceTo(enemy) < 5 then
            -- Прикажи войскам атаковать.
            self:command(friend, "attack", enemy)
        else
            -- Прикажи войскам двигаться на точку.
            self:command(friend, "move", peasant.pos)
        end
    end
end
    
-- Определите функцию: pickUpNearestCoin
function self.pickUpNearestCoin()
    self:move((self:findNearest(self:findItems())).pos)
end

local peasant = self:findByType("peasant")[1]

loop
    self:summonSoldiers()
    self:commandSoldiers()
    self:pickUpNearestCoin()
end

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

]]>
https://coolcode.ru/codecombat-gora-porvituchu-eti-dva-tsvetka-the-two-flowers/feed/ 0