添加路线策略前,先理解一次调度
先在游戏的 init 和 update 函数中写 JavaScript,按 Start 观察模拟。通过游戏内 API 文档,核对 idle 事件和 goToFloor 的行为。第一个练习是观察空闲电梯什么时候收到下一个任务,以及哪段控制器代码发出了请求;理解后再添加多个条件。
接着检查乘客目的地。电梯在移动,不代表乘客需求已被满足。阅读 floor_button_pressed 事件,把收到的请求与实际路线比较。多部电梯重复同一路线时,其他队伍仍可能在等。先从理解的小控制器扩展,不要直接复制复杂策略,就假设能满足当前人数或等待时间目标。
用关卡目标评价修改,而非只看电梯是否在动
运行前,先读通过条件,只选一项行为检查,例如空闲时间、重复停靠或某层等待的乘客。修改一次决策再运行。轿厢更频繁地移动,并不代表策略能通过关卡;应把可见队列和结果与任务目标比较。
直接修改 destinationQueue 时,应按文档调用 checkDestinationQueue,让新的队列生效;正常的 goToFloor 请求已有相应的排队处理。调试时要分清两种用法。这是浏览器编程模拟,不是实际电梯或安全系统的软件,也不能保证一个控制器通过所有关卡。按游戏内准确 API 记录哪项事件处理或路线调整改善了这次测试。
复盘时,观察某层的等待队伍和电梯变为空闲的时刻,找出哪个处理函数发出了下一次 goToFloor 请求:它是在服务这层乘客,还是把轿厢送往别处?只改这项选择,再比较关卡结果。多个处理函数互相冲突时,先简化到能解释请求顺序的程度。每次观察一支队伍和一项决策,就能据此修改,无须宣称通用最优解。
Elevator Saga 技巧和策略
勾选下一局想练习的技巧。这份清单不会改变游戏或保存游戏进度。
Elevator Saga 问题和答案
我用哪种语言写作?
控制器使用 JavaScript,游戏编辑器中还有 init 和 update 功能。
这个电梯是真的能运行的吗?
不,这是一个完全在浏览器游戏内进行的编程模拟。
我可以用它来练习编程吗?
是的,特别是事件驱动控制和测试微小改动。这款游戏基于magwo的MIT许可的Elevator Saga项目;它并非认证课程。
电梯一直在移动,乘客为什么还在等待?
重复跑固定路线不等于服务了所有请求的楼层。处理 floor_button_pressed 事件,用 goToFloor 把乘客送到目的地。先对照挑战目标观察等待队列,再增加停靠点。若直接编辑 destinationQueue,需要调用 checkDestinationQueue 让修改生效;普通排队请求由 goToFloor 处理。