电梯的故事 帮助文档

关于

这是一个编程游戏!
你的任务是对电梯的动作进行规划, 用JavaScript编写.

目标是以高效的方式运输人.
你可以通过越来越的困难挑战取得更好成绩.
只有最优秀的程序才能完成所有的挑战

怎么玩

在游戏视图的输入窗口中输入你的代码,然后按 “应用”按钮开始.
你可以按增加减少时间的速度和按钮

如果您的程序包含一个错误,您可以使用您的网络浏览器中的开发工具来调试它。. 如果你想从代码开始,按重置按钮。这将恢复到最原始的代码。.
如果你有一个最喜欢的文本编辑器, 例如 Sublime Text, 编写后并粘贴到游戏编辑器
您的代码是自动保存在您的本地存储, 所以不要担心-当你关闭浏览器它不会消失。

基本

你的代码必须声明中至少含有两个方法叫做initupdate. 例如:

{
    init: funtcion(elevators, floors) {
        //  elevators  floors 这两个是数组,
    },
    update: funtcion(dt, elevators, floors) {
       
        // dt  是一个秒变量,表示多少时间执行更新
    }
}

这些方法会在游戏中循环调用
init 方法是开始游戏的时候进行调用, update 在固定时间间隔调用.

通常会把代码放在init 方法,来设置监听和逻辑

示例代码

如何控制elevator电梯

elevator.goToFloor(1);
如果电梯没有事情的话,将电梯放到1楼
if(elevator.currentFloor() > 2) { ... }
获取当前楼层,注意这个是一个动态的变量,会随时改变

监听事件

以监听的事件:如在一个楼层时,或一个按钮已被按下。

elevator.on("idle", function() { elevator.goToFloor(0); });
监听电梯空闲的事件,将电梯放到0楼
elevator.on("floor_button_pressed", function(floorNum) { ... } );
监听电梯内按钮按下的事件floorNum表示按下的是几楼,
说明乘客想去floorNum层
floor.on("up_button_pressed", function() { ... } );
监听电梯外按下上的按钮,表明他们在等待电梯去另外一个更高的楼层.

API 文档

Elevator object

属性 类型 说明 例子
goToFloor 方法跳转到指定楼层
elevator.goToFloor(3); // 跳转到指定楼层
elevator.goToFloor(2, true); // 立即响应跳转到楼层  只执行最后一个跳转
stop方法清除需要跳转楼层队列,并且停止电梯。
elevator.stop();
currentFloor方法当前楼层
if(elevator.currentFloor() === 0) {
    //
}在事件里可以用this.currentFloor()
goingUpIndicator方法是否允许电梯可以上楼 如果为false 则按向上的人不会进电梯
if(elevator.goingUpIndicator()) {
    elevator.goingDownIndicator(false);
}
goingDownIndicator方法是否允许电梯可以下楼 如果为false 则按向下的人不会进电梯
if(elevator.goingDownIndicator()) {
    elevator.goingUpIndicator(false);
}
maxPassengerCount方法最大人数
if(elevator.maxPassengerCount() > 5) {
    // 
}
loadFactor方法当前电梯载重 小数 0 表示空载 1表示满载 一般取不到1
if(elevator.loadFactor() < 0.4) {
    // 说明电梯还没超重
}
destinationDirection方法 当前电梯方向 up down stopped
destinationQueuearray当前的队列数组,里面是楼层数字,按队列顺序排列 如果更改调用checkDestinationQueue()
elevator.destinationQueue = [];
elevator.checkDestinationQueue();
checkDestinationQueue方法重新执行队列 会按照先后顺序执行
elevator.checkDestinationQueue();
getPressedFloors 方法 电梯里面按的楼层数组 按照从小到大排序
if(elevator.getPressedFloors().length > 0) {
    // 可能先选择去哪层楼
}
currentPassengerCount方法 当前电梯人数
if(elevator.currentPassengerCount() > 0) {
    // 说明电梯里面有人
}
事件 说明 例子
idle 当电梯完成了所有的任务,并没有做任何事情。
elevator.on("idle", function() { ... });
floor_button_pressed 当乘客进入电梯按下按钮时
elevator.on("floor_button_pressed", function(floorNum) {
    // 乘客想去哪层
})
passing_floor

在电梯会经过某层楼(还没有到)前时,
注意,此事件不会触发目标楼层。方向是“up”或“down”。

elevator.on("passing_floor", function(floorNum, direction) { ... });
stopped_at_floor 电梯在某一楼(floorNum)时触发
elevator.on("stopped_at_floor", function(floorNum) {
    // 停止到某层?
})

Floor object

属性 类型 说明 例子
floorNum方法获取楼层对象的楼层数
if(floor.floorNum() > 3) { ... }
事件 说明 例子
up_button_pressed 当乘客按了“上“按钮。
请注意,如果乘客未能进入电梯,乘客将再次按下按钮。
floor.on("up_button_pressed", 方法() {
    // 告诉我要上楼
})
down_button_pressed当乘客按了“下”按钮。
请注意,如果乘客未能进入电梯,乘客将再次按下按钮。
floor.on("down_button_pressed", 方法() {
    // 告诉我要下楼
})