Метод перемещения по координатам
Описание более простого способа управления перемещениями персонажа
Однако, существует функция, которая позволит существенно упросить настройку передвижений. В ней тебе предстоит командовать герою, в каких координатах он должен оказаться.
В общем виде команда выглядит так:
hero.moveXY(X, Y)
И после ее выполнения герой начнет идти к заданным в скобках координатах.
Помни, герой не будет самостоятельно обходить мины и другие ловушки! Если ты не покажешь ему дорогу, то твой персонаж всегда пойдет напрямик!
Раскол
Описание особо сильной атаки
hero.cleave(enemy)
Однако есть небольшая проблема. Будет слишком легко, если использовать cleave постоянно, поэтому после применения способности она начинает перезаряжаться и на некоторое время становится недоступной.
Дальномер
Описание определения расстояния до врага
Он возвращает расстояние в числовом виде, а значит ты сможешь использовать эти значения в условиях. Кроме того, результат может быть записан в переменную:
enemy = "Враг" distance = hero.distanceTo(enemy)
Условная конструкция ветвления
Описание основных методов работы с условиями.
Для этого предусмотрена специальная конструкция if, которая запускает часть кода только при выполнение определенных условий.
В общем виде использование условий в программе выглядит так:
if условие: Действие, если условие выполнилось
Если условие не выполнится, то эта часть программы просто будет пропущена.
В таком случае, мы должны описать, что происходит при выполнение условия и в обратном случае.
В общем виде такая конструкция будет выглядеть так:
if условие: Действие, если условие выполнено else: Действие, если условие не выполнено
Из-за того, что данный метод дает программисту возможность делать в коде “развилки”, такую конструкцию принято называть “структура ветвления”.
В общем виде оно выглядит так:
if условие1: Выполнится, если условие1 истинно. elif условие2: Выполнится, если условие1 ложно, а условие2 истинно. else: Выполнится, если условие1 и условие2 ложные.
Используя elif ты можешь добавлять неограниченное число условий в программу. При этом сначала будет проверяться первое условие, если оно оказалось ложным — второе, затем третье и так далее. Если все условия ложны, то программа выполнит код для else.
В общем виде программа, которая атакует врага, если он был обнаружен, выглядит так:
Enemy = hero.findNearestEnemy() if Enemy: hero.attack(leftEnemy)
С помощью этой же логики мы можем написать программу для обнаружение фруктов на деревьях:
fruit = hero.pluckFruit(tree) if fruit: hero.eat(fruit)
Для того, чтобы способность применялась по готовности, поставь выполнение атаки cleave внутри условия для isReady:
if hero.isReady("cleave"): hero.cleave(enemy)
Например программа, которая заставляет героя атаковать врага, только если он находится на расстояние десяти шагов будет выглядеть так:
enemy = hero.findNearestEnemy() distance = hero.distanceTo(enemy) if distance < 10: hero.attack(enemy)
Для пары чисел A и B ты можешь проверить:
- Является ли число A большим, чем число B ( if A>B:)
- Является ли число A меньшим, чем число B ( if A
- Является ли число A равным числу B ( if A==B:)
- Является ли число A большим либо равным числу B ( if A>=B:)
- Является ли число A меньшим либо равным числу B ( if A<=B:)
Функции
Описание основных методов работы с функциями.
Ты использовал функции всё это время, каждый раз при написании такого кода:
hero.attack(enemy)
…ты «вызываешь» функцию с названием attack.
Фактический код, который выполняется при вызове attack, выглядит длинным и сложным. Представь, что тебе пришлось бы писать 25 строк кода всякий раз, когда захотелось бы по размахивать своим мечом!
Это первое преимущество функций: они уменьшают целую кучу строк кода до одной. Это не только избавляет тебя от необходимости печатать один и тот же код много раз, но и делает его проще для понимания. Ведь в нём может быть скрыта действительно сложная логика («Хорошо, я хочу атаковать. Есть ли у меня оружие? Я достаточно близок, чтобы им ударить? Сколько времени на его использование потребуется? Я попал? Какой урон нанес?»), которая сводится к легко воспринимаемой идее: атаковать.
Теперь ты будешь не только вызывать функции, но и будешь создавать собственные.
В определении функции есть две части: название и тело.
Название ты будешь использовать, чтобы вызывать функцию позже, например, attack.
Тело — это код, который будет выполняться при вызове функции.
Для создания функции с название FirstFunction достаточно написать:
def FirstFunction(): Описание того, что будет происходить при вызове функции
После того как функция создана, она будет выполняться при написание в основной программе всего лишь ее названия и скобок.
Например бесконечный вызов FirstFunction выглядит так:
while True: FirstFunction()
Аргументы — это то, что размещается между ( и ) при вызове функции.
Параметрами называется аргументы, полученные внутри функции.
Для создания функции с параметром достаточно написать его название в скобках при создание функции. В коде функции ты можешь использовать параметр как обычную переменную, несмотря на то, что ты не знаешь, что в нем находится.
Например создание функции, которая атакует получаемого в параметре врага выглядит так :
def NewAttack(target): if(target): hero.attack(target)
В теле основной программы ты можешь вызвать функцию и переедать в нее в качестве аргумента врага, которого нужно атаковать:
enemy = hero.findNearestEnemy() # Ниже enemy - это аргумент, он передаст данные в target NewAttack(enemy)
Функция может иметь несколько параметров, для этого достаточно перечислить их все в скобках через запятую:
def НазваниеФункции(Параметр1, Параметр2, Параметр3): Тело функции
Питомец
Описание основных методов обращения с питомцем.
Кроме того, ты можешь обучать своего питомца разным трюкам используя события.
Событие (event) это то, как питомец реагирует на окружающую обстановку. Например ты можешь научиться питомца выполнять определенные команды, когда он слышит голос героя.
Для того, чтобы питомец начал реагировать на событие тебе нужно включить в основном коде его обработчик.
Обработчик событий — это функция, которая проверяет наступление определённого события.
Обработчик событий можно создать, используя функцию .on(). Используй pet.on(«название события», Функция) чтобы вызвать функцию в тот момент, когда событие произойдет.
В общем виде создание обработчика события выглядит так:
def НазваниеФункции(event): Тело функции pet.on("НазваниеСобытия", НазваниеФунции)
Далее мы рассмотрим более конкретные примеры.
Событие «hear» происходит, когда питомец что-либо слышит. Если кто-то рядом вызовет метод .say, то событие наступает и вызывается. В этот момент и запускается код внутри функции!
Таким образом программа, которая обучит питомца отвечать “Привет”, на обращение выглядит следующим образом:
def onHear(event): pet.say("Привет!") pet.on("hear", onHear) hero.say("Привет!")
Например:
item = hero.findNearestItem() if item: pet.fetch(item)
Обрати внимание, что твой питомец умеет приносить только определённые предметы, например, зелья.
Например программа, которая обучит твоего питомца здороваться при запуске уровня, будет выглядеть так:
def SayOnStart(event): pet.say("Привет!") pet.on("spawn", SayOnStart)
Ты можешь использовать цикл while внутри функции-обработчика события, это позволит повторять код для питомца, даже если событие «spawn» происходит однократно.