Тема:
Аргументы
Переменные
Условные операторы
Арифметика
Циклы
Массивы
Цели:
Пройдите через пустыню.
Руководство:
Вступление:
findNearest не работает на этом уровне.
Используйте while-loop для перебора объектов в массиве, чтобы найти ближайшую монету!
Ближайшая монета с наименьшим distanceTo.
Обзор:
Этот уровень научит тебя перебирать массив с предметами и сравнивать элементы, чтобы найти ближайший.
Сначала мы получаем массив всех монет с помощью findItems. Потом перебираем монеты и отсеиваем их по двум параметрам: nearest и nearestDistance.
nearest — ссылка на ближайшие найденные монеты. Она начинается, как None или null (в зависимости от языка программирования).
nearestDistance — это расстояние до nearest монеты. Она начинается с большого числа, большего, чем любое возможное расстояние до какой-либо монеты.
Когда мы перебираем через цикл монеты, мы сравниваем расстояния до текущей монеты с nearestDistance. Если это расстояние меньше, то мы указываем как nearest текущую монету и nearestDistance — расстояние до нее.
К концу цикла, nearest будет монетой с наименьшим расстоянием.
В слудующих уровнях мы будем использовать подобную технику, чтобы найти определенные предметы, или врагов на основе другой информации, например, колличества здоровья или расстояния до него, или даже выбирать лучшие монеты на основе их ценности и расстояния!
Песчаные змеи, прохождение:
Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# Это поле покрыто огненными ловушках. К счастью, мы отправили разведчика вперед, чтобы найти путь. Он оставил монеты по пути, так что, если мы всегда будем идти к ближайшей монете, мы избежим ловушек. # Кажется этот каньон, мешает вашим очкам найти ближайший объект! # Вам нужно найти ближайшую монеты самостоятельно. loop: coins = self.findItems() coinIndex = 0 nearest = None nearestDistance = 9999 # Цикл бежит по всем монетам, чтобы найти ближайшую к вам. while coinIndex < len(coins): coin = coins[coinIndex] coinIndex += 1 distance = self.distanceTo(coin) # Если расстояние до этой монеты меньшее расстояния до nearestDistance if distance<nearestDistance: # Назначьте nearest coin nearest = coin # Установите nearestDistance как distance nearestDistance = distance # Если есть ближайшая монета, идите к её позиции. Вам нужно использовать moveXY так, чтобы вы не срезали углы и не попадали в ловушки. self.moveXY(nearest.pos.x, nearest.pos.y) |
JavaScript:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
// Это поле покрыто огненными ловушках. К счастью, мы отправили разведчика вперед, чтобы найти путь. Он оставил монеты по пути, так что, если мы всегда будем идти к ближайшей монете, мы избежим ловушек. // Кажется этот каньон, мешает вашим очкам найти ближайший объект! // Вам нужно найти ближайшую монеты самостоятельно. loop { var coins = this.findItems(); var coinIndex = 0; var nearest = null; var nearestDistance = 9999; // Цикл бежит по всем монетам, чтобы найти ближайшую к вам. while(coinIndex < coins.length) { var coin = coins[coinIndex]; coinIndex++; var distance = this.distanceTo(coin); // Если расстояние до этой монеты меньшее расстояния до nearestDistance if (distance<nearestDistance){ // Назначьте nearest coin nearest = coin; // Установите nearestDistance как distance nearestDistance = distance; } } // Если есть ближайшая монета, идите к её позиции. Вам нужно использовать moveXY так, чтобы вы не срезали углы и не попадали в ловушки. this.moveXY(nearest.pos.x, nearest.pos.y); } |
CoffeScript:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# Это поле покрыто огненными ловушках. К счастью, мы отправили разведчика вперед, чтобы найти путь. Он оставил монеты по пути, так что, если мы всегда будем идти к ближайшей монете, мы избежим ловушек. # Кажется этот каньон, мешает вашим очкам найти ближайший объект! # Вам нужно найти ближайшую монеты самостоятельно. loop coins = @findItems() coinIndex = 0 nearest = null nearestDistance = 9999 # Цикл бежит по всем монетам, чтобы найти ближайшую к вам. while coinIndex < coins.length coin = coins[coinIndex] coinIndex += 1 distance = @distanceTo coin # Если расстояние до этой монеты меньшее расстояния до nearestDistance if distance<nearestDistance # Назначьте nearest coin nearest = coin # Установите nearestDistance как distance nearestDistance = distance # Если есть ближайшая монета, идите к её позиции. Вам нужно использовать moveXY так, чтобы вы не срезали углы и не попадали в ловушки. @moveXY nearest.pos.x, nearest.pos.y #@say "I should find the nearest coin." |
Clojure:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
;; Это поле покрыто огненными ловушках. К счастью, мы отправили разведчика вперед, чтобы найти путь. Он оставил монеты по пути, так что, если мы всегда будем идти к ближайшей монете, мы избежим ловушек. ;; Кажется этот каньон, мешает вашим очкам найти ближайший объект! ;; Вам нужно найти ближайшую монеты самостоятельно. (dotimes [n 1000] (def coins (.findItems this)) (def coinIndex 0) (def nearest nil) (def nearestDistance 9999) ;; Цикл бежит по всем монетам, чтобы найти ближайшую к вам. (while (< coinIndex (count coins)) (def coin (nth coins coinIndex)) (def coinIndex (inc coinIndex)) (def distance (.distanceTo this coin)) ;; Если расстояние до этой монеты меньшее расстояния до nearestDistance (when (< distance nearestDistance) ;; Назначьте nearest coin (def nearest coin) ;; Установите nearestDistance как distance (def nearestDistance distance) )) ;; Если есть ближайшая монета, идите к её позиции. Вам нужно использовать moveXY так, чтобы вы не срезали углы и не попадали в ловушки. (.moveXY this (.x (.pos nearest)) (.y (.pos nearest))) ) |
LUA:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
-- Это поле покрыто огненными ловушках. К счастью, мы отправили разведчика вперед, чтобы найти путь. Он оставил монеты по пути, так что, если мы всегда будем идти к ближайшей монете, мы избежим ловушек. -- Кажется этот каньон, мешает вашим очкам найти ближайший объект! -- Вам нужно найти ближайшую монеты самостоятельно. loop local coins = self:findItems() local coinIndex = 1 local nearest = nil nearestDistance = 9999 -- Цикл бежит по всем монетам, чтобы найти ближайшую к вам. while coinIndex <= #coins do local coin = coins[coinIndex] coinIndex = coinIndex + 1 distance = self:distanceTo(coin) -- Если расстояние до этой монеты меньшее расстояния до nearestDistance if distance<nearestDistance then -- Назначьте nearest coin nearest = coin -- Установите nearestDistance как distance nearestDistance = distance end end -- Если есть ближайшая монета, идите к её позиции. Вам нужно использовать moveXY так, чтобы вы не срезали углы и не попадали в ловушки. self:moveXY(nearest.pos.x, nearest.pos.y) end |
Комментарии: