添加路線策略前,先理解一次調度
先在遊戲的 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 處理。