❓ 如何看題目(先讀這段!)
很多同學一看到地圖就問:「地圖上這麼多站牌,哪一個才是某一張預約單的目的地?」先釐清三件事:
- 地圖上畫的都是「城市裡的所有站牌」,不是單張預約單的目的地。橘色圓圈+數字=在此等候的乘客總人數(所有候車中預約合計,不是「這是目的地」)。
- 每張預約單都有自己的起點與目的地。資料藏在
預約單 i 的 起始X/Y/目的X/Y 積木裡,不是用看地圖的方式去猜。
- 同一個站牌可能是甲乘客的起點、也可能是乙乘客的目的地,甚至還是丙乘客路過的中繼格,必須每張預約單逐一查詢。
🖼️ 圖解:4 站牌、2 張預約單
📋 預約單 1:3 人,(1,3) ➜ (3,1)
📋 預約單 2:4 人,(3,3) ➜ (1,1)
同一張地圖,兩張預約的「目的地」不一樣!
地圖本身不會告訴你誰要去哪裡,必須用積木「問」。
所以,寫派遣程式的標準起手式是:
for i = 1 到 「預約單」的數量:
起點 = (預約單 i 的 起始X, 起始Y)
終點 = (預約單 i 的 目的X, 目的Y)
➜ 派專車到起點接人;接到後,系統會自動帶到終點下車。
💡 快速對照:模擬器左側「📋 預約單即時狀態」表格中,「從」欄=起始站,「到」欄=目的地站,每一列對應一張預約單。一邊看表、一邊看地圖,就能把「哪個站牌對應哪張預約」對上。
🎯 任務
每個時間單位,模擬器會呼叫一次你的「派遣邏輯」(放在工作區頂部的積木 stack),根據回傳的專車目標移動接駁車。
🧩 撰寫邏輯
在右側工作區中放置積木,頂部積木堆即為每 tick 會執行的派遣函式:
設定 專車1 目標(X,Y)=(x,y) — 下達目標。若目標=現在位置或非站點則專車原地停留。
專車1 的 現在X/現在Y/目標X/目標Y/乘客數 — 讀取狀態。
專車從(x1,y1)到(x2,y2)所需時間 — BFS 最短距離。
預約單/候車群 第i 的 人數/開始/結束/起始X/Y/目標X/Y/狀態 — 讀取乘客資料。
現在/剩餘/總 時間、目前得分、將 預約單 依 清單 從 小到大 排序。
🚏 接駁規則重點
- 空車抵達站點:該站若有候車中的預約單,依「開始候車時間」先後自動上車。
- 車上有乘客時:自動前往該組目的地,期間無法被改派。
- 送達後車上清空,下個 tick 才能再接該站乘客(不會自動連續接駁)。
- 兩車可重疊同座標,不會碰撞。
🅰️🅱️🅲 候車情境
- A 類:所有預約單全時段候車。
- B 類:預約單有固定開始/結束候車時間。
- C 類:臨時預約。開始候車時才把預約單加入「預約單」列表;你看不到未來預約。
💡 小技巧
- 使用頂部「關卡」下拉式選單切換示範地圖。
- 「存檔」會輸出 JSON(地圖+預約單+積木 XML),「讀檔」可還原。
- 可用「單步」按鈕逐 tick 觀察行為。