Тема:
Базовый синтаксис
Условные операторы
Аргументы
Циклы
Переменные
Цели:
Ваш герой должен выжить
Убейте 15 манчкинов
Руководство:
Информация
1 2 3 4 5 6 7 8 |
enemy = self.findNearestEnemy() if enemy: if enemy.type == "munchkin": self.say("I see a munchkin!") else: self.say("I see some other kind of enemy!") else: self.say("I don't see any enemies...") |
JavaScript:
1 2 3 4 5 6 7 8 9 10 |
var enemy = this.findNearestEnemy(); if(enemy) { if(enemy.type == "munchkin") { this.say("I see a munchkin!"); } else { this.say("I see some other kind of enemy!"); } } else { this.say("I don't see any enemies..."); } |
CoffeScript:
1 2 3 4 5 6 7 8 |
enemy = @findNearestEnemy() if enemy if enemy.type == "munchkin" @say("I see a munchkin!") else @say("I see some other kind of enemy!") else @say("I don't see any enemies...") |
Clojure:
1 2 3 4 5 6 7 8 9 10 |
(def enemy (.findNearestEnemy this)) (if enemy (when true (if (= (.type enemy) "munchkin") (.say this "I see a munchkin!") (.say this "I see some other kind of enemy!") ) ) (.say this "I don't see any enemies...") ) |
LUA:
1 2 3 4 5 6 7 8 9 10 |
local enemy = self:findNearestEnemy() if enemy then if enemy.type == "munchkin" then self:say("I see a munchkin!") else self:say("I see some other kind of enemy!") end else self:say("I don't see any enemies...") end |
Описание:
Работая с вложенными операторами if, Вам необходимо уделять пристальное внимание потоку действий, задаваемом вашей программой.
В языках Python или CoffeeScript, где отступы определяют, что включается блок каждого из операторов if, Вам необходимо быть очень внимательным с расстановкой выражений.
Если структуры выражений ваших операторов if очень сложны, частенько проще строить их по очереди, оставляя комментарий на месте будущего выражения. Например, на этом уровне мы можем начать писать код со следующего выражения:
Если есть противник, тогда…
1 |
# Делать что-нибудь |
JavaScript:
1 |
// Делать что-нибудь |
Clojure:
1 |
;; Делать что-нибудь |
LUA:
1 |
-- Делать что-нибудь |
1 |
# Отступить к позиции X |
JavaScript:
1 |
// Отступить к позиции X |
Clojure:
1 |
;; Отступить к позиции X |
LUA:
1 |
-- Отступить к позиции X |
1 2 3 4 5 6 7 |
# Если есть противник, тогда... if enemy: # Делать что-нибудь # Иначе (если противника нет)... else: # Отступить к позиции X self.moveXY(40, 34) |
JavaScript:
1 2 3 4 5 6 7 8 9 |
// Если есть противник, тогда... if (enemy){ // Делать что-нибудь } // Иначе (если противника нет)... else { // Отступить к позиции X self.moveXY(40, 34) } |
CoffeScript:
1 2 3 4 5 6 7 |
# Если есть противник, тогда... if enemy # Делать что-нибудь # Иначе (если противника нет)... else # Отступить к позиции X @moveXY 40, 34 |
Clojure:
1 2 3 4 5 6 7 8 9 |
;; Если есть противник, тогда... (if enemy (whet true ;; Делать что-нибудь ) ;; Иначе (если противника нет)... ;;Отступить к позиции X (.moveXY this 40 34) )) |
LUA:
1 2 3 4 5 6 7 8 |
-- Если есть противник, тогда... if enemy then --Делать что-нибудь -- Иначе (если противника нет)... else -- Отступить к позиции X self:moveXY(40, 34) end |
Если есть противник, тогда…
Python:
1 2 3 |
if enemy: # Если противник менее чем в 5 метрах, тогда атаковать # Иначе (если противник далеко), закрыться щитом - shield() |
JavaScript:
1 2 3 4 |
if (enemy){ // Если противник менее чем в 5 метрах, тогда атаковать // Иначе (если противник далеко), закрыться щитом - shield() } |
CoffeScript:
1 2 3 |
if enemy # Если противник менее чем в 5 метрах, тогда атаковать # Иначе (если противник далеко), закрыться щитом - shield() |
Clojure:
1 2 3 4 |
(if enemy ;; Если противник менее чем в 5 метрах, тогда атаковать ;; Иначе (если противник далеко), закрыться щитом - shield() ) |
LUA:
1 2 3 |
if enemy then -- Если противник менее чем в 5 метрах, тогда атаковать -- Иначе (если противник далеко), закрыться щитом - shield() |
Иначе (если противника нет)…
Python:
1 2 3 |
else: # Отступить к позиции X self.moveXY(40, 34) |
JavaScript:
1 2 3 4 |
else { //Отступить к позиции X this.moveXY(40, 34); } |
CoffeScript:
1 2 3 |
else # Отступить к позиции X self.moveXY(40, 34) |
Clojure:
1 2 |
;;Отступить к позиции X (.moveXY this 40 34) |
LUA:
1 2 3 |
else -- Отступить к позиции X self:moveXY(40, 34) |
И наконец, давайте заполним описание условия if/else реальным кодом, удостоверившись, что всё внесено верно:
1 2 3 4 5 6 7 8 9 10 11 12 |
# Если есть противник, тогда... if enemy: # Если противник менее чем в 5 метрах, тогда атаковать if self.distanceTo(enemy) < 5: self.attack(enemy) # Иначе (если противник далеко), закрыться щитом - shield() else: self.shield() # Иначе (если противника нет)... else: # Отступить к позиции X self.moveXY(40, 34) |
JavaScript:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
var enemy = this.findNearestEnemy(); //Если есть противник, тогда... if(enemy) { //Если противник менее чем в 5 метрах, тогда атаковать var distance = this.distanceTo(enemy); if (distance<5) { this.attack(enemy); //Иначе (если противник далеко), закрыться щитом - shield() } else { this.shield(); } //Иначе (если противника нет)... } else { //Отступить к позиции X this.moveXY(40, 34); } |
CoffeScript:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
enemy = @findNearestEnemy() # Если есть противник, тогда... if enemy # Если противник менее чем в 5 метрах, тогда атаковать distance = @distanceTo(enemy) if distance<5 @attack enemy # Иначе (если противник далеко), закрыться щитом - shield() else @shield() # Иначе (если противника нет)... else # Отступить к позиции X @moveXY 40, 34 |
Clojure:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
(def enemy (.findNearestEnemy this)) ;; Если есть противник, тогда... (if enemy (when true (def distance (.distanceTo this enemy)) ;; Если противник менее чем в 5 метрах, тогда атаковать (if (< distance 5) (.attack this enemy) ;;Иначе (если противник далеко), закрыться щитом - shield() (.shield this) ) ) ;;Отступить к позиции X (.moveXY this 40 34) )) |
LUA:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
local enemy = self:findNearestEnemy() -- Если есть противник, тогда... if enemy then distance = self:distanceTo(enemy) -- Если противник менее чем в 5 метрах, тогда атаковать if distance<5 then self:attack(enemy) -- Иначе (если противник далеко), закрыться щитом - shield() else self:shield() end else -- Отступить к позиции X self:moveXY(40, 34) end |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
loop: enemy = self.findNearestEnemy() # Если есть противник, тогда... if enemy: # Если противник менее чем в 5 метрах, тогда атаковать if self.distanceTo(enemy) < 5: self.attack(enemy) # Иначе (если противник далеко), закрыться щитом - shield() else: self.shield() # Иначе (если противника нет)... else: # Отступить к позиции X self.moveXY(40, 34) |
JavaScript:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
loop { var enemy = this.findNearestEnemy(); //Если есть противник, тогда... if(enemy) { //Если противник менее чем в 5 метрах, тогда атаковать var distance = this.distanceTo(enemy); if (distance<5) { this.attack(enemy); //Иначе (если противник далеко), закрыться щитом - shield() } else { this.shield(); } //Иначе (если противника нет)... } else { //Отступить к позиции X this.moveXY(40, 34); } } |
CoffeScript:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
loop enemy = @findNearestEnemy() # Если есть противник, тогда... if enemy # Если противник менее чем в 5 метрах, тогда атаковать distance = @distanceTo(enemy) if distance<5 @attack enemy # Иначе (если противник далеко), закрыться щитом - shield() else @shield() # Иначе (если противника нет)... else # Отступить к позиции X @moveXY 40, 34 |
Clojure:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
(dotimes [n 1000] (def enemy (.findNearestEnemy this)) ;; Если есть противник, тогда... (if enemy (when true (def distance (.distanceTo this enemy)) ;; Если противник менее чем в 5 метрах, тогда атаковать (if (< distance 5) (.attack this enemy) ;;Иначе (если противник далеко), закрыться щитом - shield() (.shield this) ) ) ;;Отступить к позиции X (.moveXY this 40 34) )) |
LUA:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
loop local enemy = self:findNearestEnemy() -- Если есть противник, тогда... if enemy then distance = self:distanceTo(enemy) -- Если противник менее чем в 5 метрах, тогда атаковать if distance<5 then self:attack(enemy) -- Иначе (если противник далеко), закрыться щитом - shield() else self:shield() end else -- Отступить к позиции X self:moveXY(40, 34) end end |
Непоколебимость в движении, прохождение:
Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# Вы можете вложить один оператор if в другой оператор if. # Однако, используя эту хитрость, Вы должны быть внимательны к тому, как операторы if взаимодействуют друг с другом. # Make sure the indentation is correct! # Полезно начать с одного внешнего оператора if, # используя комментарии в качестве "заполнителя" для внутреннего оператора if/else: loop: enemy = self.findNearestEnemy() # Если рядом есть враг, то... if enemy: # Создайте переменную для значения дистанции (с помощью DistanceTo) distance = self.distanceTo(enemy) if distance<5: # Если до врага меньше 5 метров, то атаковать (attack) self.attack(enemy) # В противном случае (если враг далеко), использовать щит (shield) else: self.shield() # Иначе (если нет врагов) else: # тогда двигаться обратно к Х self.moveXY(40, 34) |
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 |
// Вы можете вложить один оператор if в другой оператор if. // Однако, используя эту хитрость, Вы должны быть внимательны к тому, как операторы if взаимодействуют друг с другом. // Полезно начать с одного внешнего оператора if, // используя комментарии в качестве "заполнителя" для внутреннего оператора if/else: loop { var enemy = this.findNearestEnemy(); // Если рядом есть враг, то... if(enemy) { // Создайте переменную для значения дистанции (с помощью DistanceTo) var distance = this.distanceTo(enemy); // Если до врага меньше 5 метров, то атаковать (attack) if (distance<5) { this.attack(enemy); } else { this.shield(); } // В противном случае (если враг далеко), использовать щит (shield) // Иначе (если нет врагов) } else { // тогда двигаться обратно к Х this.moveXY(40, 34); } } |
CoffeScript:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# Вы можете вложить один оператор if в другой оператор if. # Однако, используя эту хитрость, Вы должны быть внимательны к тому, как операторы if взаимодействуют друг с другом. # Make sure the indentation is correct! # Полезно начать с одного внешнего оператора if, loop enemy = @findNearestEnemy() # Если рядом есть враг, то... if enemy # Создайте переменную для значения дистанции (с помощью DistanceTo) distance = @distanceTo(enemy) # Если до врага меньше 5 метров, то атаковать (attack) if distance<5 @attack enemy # В противном случае (если враг далеко), использовать щит (shield) else @shield() #@say "I should attack!" # Иначе (если нет врагов) else # тогда двигаться обратно к Х @moveXY 40, 34 |
Clojure:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
;; Вы можете вложить один оператор if в другой оператор if. ;; Однако, используя эту хитрость, Вы должны быть внимательны к тому, как операторы if взаимодействуют друг с другом. ;; Make sure the indentation is correct! ;; Полезно начать с одного внешнего оператора if, ;; используя комментарии в качестве "заполнителя" для внутреннего оператора if/else: (dotimes [n 1000] (def enemy (.findNearestEnemy this)) ;; Если рядом есть враг, то... (if enemy (when true ;; Создайте переменную для значения дистанции (с помощью DistanceTo) (def distance (.distanceTo this enemy)) (if (< distance 5) ;; Если до врага меньше 5 метров, то атаковать (attack) (.attack this enemy) ;; В противном случае (если враг далеко), использовать щит (shield) (.shield this) ) ) ;; Иначе (если нет врагов) ;; тогда двигаться обратно к Х (.moveXY this 40 34) )) |
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 |
-- Вы можете вложить один оператор if в другой оператор if. -- Однако, используя эту хитрость, Вы должны быть внимательны к тому, как операторы if взаимодействуют друг с другом. -- Make sure the indentation is correct! -- Полезно начать с одного внешнего оператора if, -- используя комментарии в качестве "заполнителя" для внутреннего оператора if/else: loop local enemy = self:findNearestEnemy() -- Если рядом есть враг, то... if enemy then -- Создайте переменную для значения дистанции (с помощью DistanceTo) distance = self:distanceTo(enemy) -- Если до врага меньше 5 метров, то атаковать (attack) if distance<5 then self:attack(enemy) -- В противном случае (если враг далеко), использовать щит (shield) else self:shield() end -- Иначе (если нет врагов) else -- тогда двигаться обратно к Х self:moveXY(40, 34) end end |
public class AI { public static void main(String[] args) { while(true) { var enemy = hero.findNearestEnemy(); // Если враг рядом, то... if(enemy){ // Создай переменную для расстояния с помощью `distanceTo`. float distance = hero.distanceTo(enemy); // Если до врага меньше 5 метров, атакуй. if(distance < 5) { hero.attack(enemy); }else{ // В противном случае (враг далеко) используй `shield`. hero.shield(); // Иначе (если нет врагов)... }else{ // ... тогда двигайся обратно к Х. hero.moveXY(40, 34); } } }}}
на java он не работает и это не первы рас кагда праблемы с кодом на java