Elevator Saga Справка и документация по API

Об игре

Это игра программирования!
Ваша задача - запрограммировать движение лифтов, написав скрипт в JavaScript.

Цель состоит в том, чтобы эффективно перевозить людей.
В зависимости от того, насколько хорошо вы это делаете, вы можете прогрессировать через все более сложные задачи.
Только самые лучшие скрипты смогут выполнить все задачи.

Как играть

Введите код в окно ввода под игрой, и нажмите кнопку Apply чтобы запустить скрипт.
Вы можете увеличить или уменьшить скорость времени, нажав кнопку и .

Если программа содержит ошибку, можно использовать средства разработчика в веб-браузере для ее отладки. Если вы хотите начать заново, то нажмите кнопку Reset. Это вернет стандартный код.
Если у вас есть любимый текстовый редактор, такой как Sublime Text, не стесняйтесь редактировать код и вставлять его в игровой редактор.
Ваш код автоматически сохраняется в локальном хранилище, так что не волнуйтесь - он не исчезнет, если вы случайно закроете браузер.

Основы

Ваш код должен объявлять объект, содержащий по крайней мере дв метода, называемые. init и update. Вроде этого:

{
    init: function(elevators, floors) {
        // Вызывается инструкция за инструкцией
    },
    update: function(dt, elevators, floors) {
        // Вызывается на каждый вызов инструкции в методе init
        // Пример: вызван elevators.goToFloor(1) в init
        // update будет вызван примерно 100 раз в момент перемещения лифта.
        // dt - количество игровых секунд, прошедших с момента последнего вызова update
    }
}

Эти методы будут вызваны игрой во время запуска.
Когда начнется игра init будет вызываться и последовательно отрабатывать, а update будет вызываться неоднократно во время вызова инструкций в init.

Обычно большую часть кода рекомендуется писать в методе init, чтобы настроить прослушивание событий и логику.

Пример кода

Как управлять лифтом

elevator.goToFloor(1);
Говорит лифту чтобы он поднялся на 1 этаж после выполнения других задач, если таковые имеются. Обратите внимание, что если лифт уже в очереди то не будет никакого эффекта
if(elevator.currentFloor() > 2) { ... }
Вызов currentFloor получает номер этажа, на котором в данный момент находится лифт. Обратите внимание если лифт находится между этажами то возвращается округленное число и это не означает, что лифт находится в остановленном состоянии.

Прослушивание событий

Можно прослушивать события, например, при остановке на этаже или нажатии кнопки.

elevator.on("idle", function() { elevator.goToFloor(0); });
Функция callback вызывается, когда очередь лифта очищена и лифт ничего не делает. В этом примере мы говорим ему перейти на этаж 0.
elevator.on("floor_button_pressed", function(floorNum) { ... } );
Слушайте событие «floor_button_pressed», которое срабатывает, когда пассажир нажал кнопку внутри лифта. Это указывает на то, что пассажир хочет переместиться на этаж, который попадает в аргумент floorNum.
floor.on("up_button_pressed", function() { ... } );
Слушайте событие «up_button_pressed», которое срабатывает, когда пассажир нажал кнопку вверх на этаже. Это указывает на то, что пассажир хочет перейти на другой этаж.

API документация

Объект лифта

СвойствоТипОписаниеПример
goToFloorfunctionСтавит лифт в очередь на указанный этаж. Если вы укажете true в качестве второго аргумента, лифт перейдет непосредственно на этот этаж, а затем на любые другие этажи в очереди.
elevator.goToFloor(3); // Выполнит это после всего остального
elevator.goToFloor(2, true); // Выполнит это раньше всего
stopfunctionОчищает очередь и остановает лифт, если он движется. Обратите внимание, что лифт, вероятно, не остановится на этаже, так что пассажиры не выйдут.
elevator.stop();
currentFloorfunctionПолучает номер этажа, на котором сейчас находится лифт.
if(elevator.currentFloor() === 0) {
    // Сделать что-то особенное ?
}
goingUpIndicatorfunctionПолучает или задает индикатор движения вверх, который будет влиять на поведение пассажиров при остановке на этажах.
if(elevator.goingUpIndicator()) {
    elevator.goingDownIndicator(false); // Отключили индекатор "вниз"
}
goingDownIndicatorfunctionПолучает или задает индикатор движения вниз, который будет влиять на поведение пассажиров при остановке на этажах.
if(elevator.goingDownIndicator()) {
    elevator.goingUpIndicator(false); // Отключили индекатор "вверх"
}
maxPassengerCountfunctionПолучает максимальное количество пассажиров, которые могут одновременно занимать лифт.
if(elevator.maxPassengerCount() > 5) {
    // Используйте этот лифт для чего-то особенного, потому что он большой
}
loadFactorfunctionПолучает коэффициент загрузки лифта. 0 означает пустой, 1 означает полный. Варьируется в зависимости от веса пассажира.
if(elevator.loadFactor() < 0.4) {
    // Может, воспользуемся лифтом, раз он еще не заполнен ?
}
destinationDirectionfunctionПолучает направление, в котором лифт в настоящее время собирается двигаться. Может быть "вверх", "вниз" или "остановлено".
destinationQueuearrayТекущая очередь инструкций, то есть номера этажей, на которые запланирован лифт. Обратите внимание, что необходимо вызвать checkDestinationQueue(), чтобы изменения вступили в силу немедленно.
elevator.destinationQueue = [];
elevator.checkDestinationQueue();
checkDestinationQueuefunctionПроверяет очередь на наличие новых инструкций. Обратите внимание, что это необходимо вызвать только при явном изменении очереди инструкций.
elevator.checkDestinationQueue();
getPressedFloorsfunctionВозвращает текущие нажатые номера этажей в виде массива.
if(elevator.getPressedFloors().length > 0) {
    // Может быть, сначала пойти на какой-нибудь выбранный этаж ?
}
СобытиеОписаниеПример
idleСрабатывает, когда лифт выполнил все свои задачи и ничего не делает.
elevator.on("idle", function() { ... });
floor_button_pressedСрабатывает, когда пассажир нажал кнопку в лифте.
elevator.on("floor_button_pressed", function(floorNum) {
    // Может, сказать лифту, чтобы ехал на этот этаж ?
})
passing_floorСрабатывает немного раньше, чем лифт опустится к этажу. Самое время решить, стоит ли останавливаться на этом этаже. Обратите внимание, что это событие не вызывается для конкретного этажа. Направление или "вверх" или "вниз".
elevator.on("passing_floor", function(floorNum, direction) { ... });
stopped_at_floorСрабатывает, когда лифт поднимается на этаж.
elevator.on("stopped_at_floor", function(floorNum) {
    // Maybe decide where to go next?
})

Объекты этажа

СвойствоТипОписаниеПример
floorNumfunctionВозвращает номер этажа объекта floor.
if(floor.floorNum() > 3) { ... }
СобытиеОписаниеПример
up_button_pressedСрабатывает, когда кто-то нажал на кнопку на этаже. Обратите внимание, что пассажиры снова нажмут кнопку, если они не войдут в лифт.
floor.on("up_button_pressed", function() {
    // Может быть, скажите лифту идти на этот этаж ?
})
down_button_pressedСрабатывает, когда кто-то нажал кнопку вниз на этаже. Обратите внимание, что пассажиры снова нажмут кнопку, если они не войдут в лифт.
floor.on("down_button_pressed", function() {
    // Может быть, скажите лифту идти на этот этаж ?
})