Вы все - сотрудники Ded Moroz Inc. Все вы начинаете в аэропорту Великого Устюга, и вам нужно развести новогодние подарки во все аэропорты Земли (в нашей игре их 1812).
Находясь в каком-то аэропорту вы можете совершать перелет в любой другой аэропорт, находящийся в радиусе не более 1000 км от того, где вы находитесь. Попадая в какой-то из аэропортов раньше других Дедов Морозов, вы доставляете туда новогодние подарки.
Ваша задача написать программу, которая будет управлять перемещениями вашего Деда Мороза. При этом есть две цели:
Для успешной работы вам понадобиться установить модуль requests
.
Если вы работаете из школы, для вас будут другие инструкции.
Если вы работает из дома, то вам нужно выполнить команду
pip install requests
А еще вам нужно скачать и положить в ту же папку, где будет лежать ваша программа, специальный модуль dedmoroz.py. Вы можете изучать его код, но не должны вносить в него никаких изменений.
Для работы вам также понадобятся логин и токен для вашего Деда Мороза (берется у ВАМ).
Еще вам может оказаться полезным файл с данными об аэропортах игры.
В начале вашей программы вы должны написать следующие две строчки:
import dedmorozЕсли вы пишете из школы, то вторая строчка будет такая:
ya = dedmoroz.dedmoroz("login", "token", "Ded Moroz 1")а если вы участвуете из дома:
ya = dedmoroz.dedmoroz("login", "token", "Ded Moroz 1", home=True)Вместо
login
и token
вы должны указать выданные вам логин и токен, а вместо Ded Moroz 1
- любое имя, под которым вы хотите отображаться в игре.
Имя можно менять от запуска к запуску.
Теперь ваш Дед Мороз добавлен в текущую игру,
а у вас в программе есть объект ya
- это, собственно, ваш Дед Мороз.
Вы можете давать ему разные команды или получать какую-то информацию об игре.
Всегда, когда вы хотите в команду передать в качестве параметра аэропорт, нужно указывать его трехбуквенный код, а когда пользователя - его логин.
city = ya.whereami() |
Команда возвращает строку - код аэропорта, где сейчас находится ваш Дед Мороз (команда не делает запроса к серверу) |
city = ya.getneighbors() |
Команда возвращает список аэропортов, куда вы можете долететь из текущего местоположения (команда не делает запроса к серверу) |
n = ya.moveto(city) |
Команда перемещает вашего Деда Мороза в указанный вами город city .
Если в город переместиться нельзя (например, он слишком далеко), то программа завершится с ошибкой.
Результатом команды
является список городов, в которые он может переместиться из того города, куда он только что прилетел. |
route = ya.userroute()или route = ya.userroute(user) |
Получает список городов, посещенных пользователем в том порядке, в каком он их посещал. Последний город - это текущее положение. Если пользователь посещал город несколько раз, он будет несколько раз упомянут в списке. Если длина маршрута игрока более 10000 городов, то будут возвращены последние 10000. В качестве параметра указывается логин пользователя. Параметр можно не указывать, тогда вы получите свой маршрут. |
users = ya.players() |
Результатом команды является словарь, в котором ключами являются логины игроков, а значениями - города, в которых они находятся.
Например, если у нас два игрока с логинами login1 и login2, то результат может быть, например, таким:
{"login1": "DME", "login2": "VKO"} |
airports = ya.airports() |
Результатом команды является информация обо всех аэропортах. Результат представляет собой словарь, в котором
ключами являются коды аэропортов, а значениями - словари с информацией. Как мог бы выглядеть ответ, если бы аэропортов было всего 2:
{ "VKO": { 'code': 'VKO', 'latlon': [55.60315, 37.2921], 'name': 'Внуково', 'owner': "login1" }, "SVO": { 'code': 'SVO', 'latlon': [55.966324, 37.416573], 'name': 'Шереметьево', 'owner': None } }В этом словаре есть следующие поля:
|
distance = dedmoroz.distance_coords(a, b) |
В модуле dedmoroz функция distance_coords вычисляет расстояние между двумя точками по их координатам.
Каждый из параметров - это список из двух чисел, задающих latitude и longitude точек.
Результат - расстояние в метрах.
Например,
если у вас есть структура airports (полученная командой airports = ya.airports() ) с информацией об аэропортах, то посчитать расстояние между VKO (Внуково) и VUS (Великий Устюг)
можно так:
d = dedmoroz.distance_coords(airports["VKO"]["latlon"], airports["VUS"]["latlon"]) |
Все запросы, кроме ya.whereami()
и ya.getneighbors()
, выполняются в течение 1 секунды.
Запросы ya.whereami()
и ya.getneighbors()
выполняются без обращения на сервер. Они могут возвращать
устаревшую информацию, если кто-то еще управляет вашим Дедом Морозом.
В процессе игры при вызове функций модуля на экран пишется некоторая информация, которуя может быть полезна для понимая происходящего.
Если ваша программа упадет с ошибкой, или вы приостановите ее работу, ваш Дед Мороз останется в том месте, куда он дошел, и все посещенные им города никуда не денутся. Когда вы запустите программу заново, вы продолжите с того места, на котором остановились.
Наблюдать за процессом игры можно тут: