Matchmaking — 配對玩家
蓋把兩陌生人配進遊戲的大廳
⏱ 預估 ~7 分鐘
01 · 讀一讀
Matchmaking 是把單人遊戲變多人體驗的部分。概念簡單:維持等待清單。兩玩家在等,配對他們、建遊戲房間、開始比賽。
難的是邊界情況:玩家在等時斷線怎辦?遊戲中斷線怎辦?兩玩家都要再玩怎辦?好的 matchmaking 系統優雅處理所有這些。
💡 想像一下想像餐廳前台管 waitlist。兩人桌空,他們帶下兩人就坐。有人離 waitlist,移除。有人飯吃一半離開,前台不繼續保位。
重點整理
- Matchmaking 維持等待玩家 queue
- 兩玩家在 queue,配對進房間
- 每個房間有自己 TicTacToeGame 實例
- Disconnect 處理關鍵 — queue 跟遊戲中都要
02 · Prompt 範本
請 Claude 蓋 matchmaking 模組。明確描述資料結構跟配對邏輯。
幫我的井字遊戲建一個 matchmaking.js 模組。要求:(1) 維護一個等待佇列(socket 陣列)。(2) 匯出 addToQueue(socket, io) 函式:如果已經有人在等,就把兩人配對——產生一個唯一的 room ID、建立新的 TicTacToeGame 實例、隨機分配 X 和 O、讓兩個 socket 都加入該房間,並對兩人 emit 'game-start',附上各自的符號和 room ID。如果沒人在等,就把這個 socket 加進佇列,並對它 emit 'waiting'。(3) 匯出 removeFromQueue(socket) 函式,把斷線的 socket 從等待佇列中移除。(4) 用一個 Map 追蹤進行中的遊戲(roomId -> { game, players }),再用一個 Map 追蹤每個 socket 所在的房間(socketId -> roomId)。(5) 匯出 handleDisconnect(socket, io) 函式:如果該 socket 在佇列裡,就移除;如果在進行中的遊戲裡,對對手 emit 'opponent-left' 並清理該房間。請從 ./game 匯入 TicTacToeGame class。03 · 看程式碼
你 matchmaking 模組用三個資料結構。懂每個存什麼跟為什麼存在。
三個資料結構
// Players waiting for a match
const waitingQueue = [];
// Active game rooms: roomId -> { game, players: { X: socket, O: socket } }
const activeGames = new Map();
// Which room each player is in: socket.id -> roomId
const playerRooms = new Map();
waitingQueue 放點 'Find Game' 但還沒配對的 socket。activeGames 把每個房間 map 到遊戲狀態跟玩家 socket — 這是 server 怎麼知道移動屬於哪個遊戲。playerRooms 是反查 — 給 socket ID(從 disconnect 事件)找他們在哪房間,我們才能通知對手。
04 · Prompt 範本
現在把 matchmaking 接到你 server。請 Claude 更新 server.js 用新模組。
更新 server.js,讓它使用 matchmaking 模組。在 'connection' 事件中,監聽 client 送來的 'find-game' 並呼叫 addToQueue。在 'disconnect' 事件中呼叫 handleDisconnect。另外也要監聽 'make-move'——當玩家送出一步時,從 playerRooms 找出他所在的房間,再從 activeGames 找出對應的 game,呼叫 game.makeMove(index),若合法就對該房間 emit 'move-made' 並附上這步的細節。如果遊戲結束了,對該房間 emit 'game-over' 並附上結果。
05 · 讀一讀
停下來讀 Claude 產出什麼。這是你能養的最重要習慣:不要只跑 — 先讀。
追蹤發生什麼,當:
1. 第一玩家連線、點 Find Game 2. 第二玩家做同樣 3. 他們被配對進房間 4. 第一玩家走一步
程式碼符合第 2 課計畫嗎?Server 廣播前驗證移動嗎?Disconnect 處理正確清理嗎?
有什麼不符你計畫,請 Claude 修。你是建築師 — Claude 是建築工。
重點整理
- 跑前讀 — 永遠
- 心理追蹤情境
- 比對程式碼跟你計畫
- 不符就請 Claude 修
06 · 選擇題
玩家在 matchmaking queue 等時斷線。該發生什麼?
- 沒事 — 他們會自動重連
- 他們該從 queue 移除,才不會跟新加入玩家配對
- Server 該當機重啟
- 他們位該保留 5 分鐘
07 · 填空
兩玩家在 queue 時,matchmaking 系統建遊戲 _____ 跟分配每個玩家符號(X 或 O)。
⚠ 完整互動體驗需要 JavaScript。請啟用 JavaScript 後重新整理。
※ 本站為獨立繁中教學專案,非 Anthropic 官方產品。Claude™ 為 Anthropic, PBC 商標。