电梯传奇 - 帮助(API)文档

游戏介绍

这是一个编程游戏!
你的任务是通过使用JavaScript编写程序来控制电梯(1或n)的运动。 .

目标是以高效的方式运送乘客。 根据你的表现,你可以逐渐挑战更加困难的关卡。 足够优秀的程序才能完成所有挑战。

玩法说明

在游戏视图下方输入窗口中输入代码,然后点击 “应用” 按钮 运行代码。
你可以通过按下按钮调整程序运行速度。

如果程序出现错误,可以使用浏览器开发工具进行调试。
如果想重新开始编码,点击“重置”按钮将代码恢复到初始化状态。
如果你喜欢使用Sublime Text等文本编辑器,请随意在那里编辑代码,并将其粘贴到游戏编辑器中。
所有代码会自动保存在本地存储中,所以不用担心 - 即使意外关闭浏览器也不会丢失。

基础知识

每个程序必须声明一个包含至少两个名为initupdate函数的对象,就像这样::

{
    init: function(elevators, floors) {
        // Do stuff with the elevators and floors, which are both arrays of objects
    },
    update: function(dt, elevators, floors) {
        // Do more stuff with the elevators and floors
        // dt is the number of game seconds that passed since the last time update was called
    }
}

这些函数将在运行期间由系统调用。
init 在挑战开始时被调用, update 在挑战期间重复调用。

通常情况下,大部分代码放在 init 函数中,以设置事件监听器和逻辑。

编码示例

如何控制电梯运行

elevator.goToFloor(1);
控制电梯在完成其他任务后(如果有的话)移到1层, 请注意,如果电梯楼层队列已经存在该楼层,则此操作将不起作用。
if(elevator.currentFloor() > 2) { ... }
调用currentFloor获取电梯当前所在的楼层号。请注意,这是一个四舍五入的数字,并不一定意味着电梯处于停止状态。

事件监听

它可以监听事件,比如停在某层,或者按钮被按下时执行动作。

elevator.on("idle", function() { elevator.goToFloor(0); });
当楼层队列被清空并且电梯不做任何事情时,监听电梯发出的“idle”事件。在这个例子中,控制电梯移动到第0层。
elevator.on("floor_button_pressed", function(floorNum) { ... } );
监听“floor_button_pressed”事件,当乘客在电梯内按下按钮时发出。这表明乘客想去那一层。
floor.on("up_button_pressed", function() { ... } );
监听“up_button_pressed”事件,当乘客按下他们所在楼层的向上按钮时发出。这表明乘客想去另一层。

API文档

电梯对象

PropertyTypeExplanationExample
goToFloorfunction 让电梯排队进入指定楼层。如果您将true指定为第二个参数,则电梯将直接到达该楼层,然后再前往任何其他排队的楼层。
elevator.goToFloor(3); // Do it after anything else
elevator.goToFloor(2, true); // Do it before anything else
stopfunction 清除目的地队列,如果电梯正在移动,请停止电梯。请注意,您通常不需要停止电梯-它用于具有运输中重新调度逻辑的高级解决方案。另外,请注意电梯可能不会停在某一层,所以乘客不会下车。
elevator.stop();
currentFloorfunction 获取电梯当前所在的楼层号。
if(elevator.currentFloor() === 0) {
    // Do something special?
}
goingUpIndicatorfunction 获取或设置上升指示,该指示会影响在楼层停靠的乘客的行为。
if(elevator.goingUpIndicator()) {
    elevator.goingDownIndicator(false);
}
goingDownIndicatorfunction 获取或设置下行指示,该指示会影响在楼层停靠的乘客的行为。
if(elevator.goingDownIndicator()) {
    elevator.goingUpIndicator(false);
}
maxPassengerCountfunction 获取可同时占用电梯的最大乘客数。
if(elevator.maxPassengerCount() > 5) {
    // Use this elevator for something special, because it's big
}
loadFactorfunction 得到电梯的载重系数。0表示空,1表示满。随着乘客体重的变化而变化,这不是一个精确的测量。
if(elevator.loadFactor() < 0.4) {
    // Maybe use this elevator, since it's not full yet?
}
destinationDirectionfunction 得到电梯当前要移动的方向。可以是"up", "down"或"stopped"。
destinationQueuearray 当前目的地队列,即电梯计划到达的楼层号。如果需要,可以修改和清空。注意,您需要调用checkDestinationQueue()以使更改立即生效。
elevator.destinationQueue = [];
elevator.checkDestinationQueue();
checkDestinationQueuefunction 检查目的地队列中是否有要转到的新目的地。注意,只有在显式修改目标队列时才需要调用此方法。
elevator.checkDestinationQueue();
getPressedFloorsfunction 获取当前按下的层数作为数组。
if(elevator.getPressedFloors().length > 0) {
    // Maybe go to some chosen floor first?
}
EventExplanationExample
idle 当电梯完成了所有的任务并且没有做任何事情时触发。
elevator.on("idle", function() { ... });
floor_button_pressed 当乘客在电梯内按下按钮时触发。
elevator.on("floor_button_pressed", function(floorNum) {
    // Maybe tell the elevator to go to that floor?
})
passing_floor 电梯将要通过某层时触发。这是决定是否在这一层停止的好时机。注意,此事件不会在目的层触发。方向不是“up”就是“down”。
elevator.on("passing_floor", function(floorNum, direction) { ... });
stopped_at_floor 当电梯到达某一楼层时触发。
elevator.on("stopped_at_floor", function(floorNum) {
    // Maybe decide where to go next?
})

Floor object

PropertyTypeExplanationExample
floorNumfunction 获取楼层对象的楼层号。
if(floor.floorNum() > 3) { ... }
EventExplanationExample
up_button_pressed 当有人在楼层按下向上按钮时触发。请注意,如果乘客未能进入电梯,他们将再次按下按钮。
floor.on("up_button_pressed", function() {
    // Maybe tell an elevator to go to this floor?
})
down_button_pressed 当有人在楼层按下向下按钮时触发。请注意,如果乘客未能进入电梯,他们将再次按下按钮。
floor.on("down_button_pressed", function() {
    // Maybe tell an elevator to go to this floor?
})