电梯传奇 帮助和API文档

关于游戏

这是一款关于编程的小游戏!
您的任务是通过编写 JavaScript 程序来使得电梯移动。

目标是用最简单,最快速的方法来运送人员。
这将取决于您的程序,您可以在更困难的挑战中取得进步。
只有最优秀的程序才能够完成所有的挑战!

如何开始

在游戏视图下方的输入窗口中输入代码,然后点击运行按钮开始挑战。
您可以通过点击 按钮或者 按钮来增加或者减少时间速度。

如果程序包含错误,则可以使用web浏览器中的开发人员工具尝试并调试它。 如果要重新输入带,请点击重置按钮。这将让您的代码恢复到一个有效但过于简单的实现。
如果您有最喜欢的文本编辑,例如 Sublime Text, 请随意编辑代码并粘贴到游戏编辑器中。
您的代码会自动保存在本地存储中,因此不要担心,如果您意外关闭浏览器,它不会消失。

基础

代码必须声明一个对象,该对象至少包含两个调用的函数 initupdate。 就像下面一样:

{
    init: function(elevators, floors) {
        // 用 elevators 和 floors 做些事情,它们都是阵列对象
    },
    update: function(dt, elevators, floors) {
        // 用 elevators 和 floors 做更多的事情
        // dt 是自上次调用更新以来经过的游戏描述
    }
}

这些函数将在挑战期间由游戏调用。
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 文档

电梯对象

属性类型解释示例
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) {
    // 可以决定下一个去哪里
})

楼层对象

属性类型解释示例
floorNumfunction获取楼层对象的楼层编号。
if(floor.floorNum() > 3) { ... }
事件解释示例
up_button_pressed当有人按下楼层的向上按钮时触发。请注意,如果乘客无法进入电梯,他们将再次按下按钮。
floor.on("up_button_pressed", function() {
    // 电梯会前往指定的楼层
})
down_button_pressed当有人按下地板上的向下按钮时触发。请注意,如果乘客无法进入电梯,他们将再次按下按钮。
floor.on("down_button_pressed", function() {
    // 电梯会前往指定的楼层
})