Trở lại bàn chơi bằng một cú chạm
Màn hình kết quả giờ có thể mở lại đúng ván vừa rồi, còn Ghép nhanh đưa bạn vào phòng đang dần đủ người thay vì mở thêm một phòng trống.

Nói đơn giản
Thời điểm tốt nhất để bắt đầu một ván là chính giây ván trước kết thúc. Bằng chứng nằm sẵn trong tay mà chúng tôi lại bỏ đi: trong số người quay lại chơi ván thứ hai, hơn một nửa bắt đầu nó trong vòng hai phút sau khi ván đầu kết thúc — và tất cả những gì chúng tôi mời họ ở khoảnh khắc đó chỉ là một đường dẫn về sảnh, nơi phải chọn chế độ, chọn số chỗ, tạo phòng rồi chờ.
Giờ màn hình kết quả có nút Chơi lại. Một cú chạm và bạn đã ở trong ván mới: cùng chế độ, cùng số chỗ, những ghế trống đã có người, và ván đã bắt đầu. Không cần về sảnh, không có gì phải thiết lập.

Ghép nhanh là nửa còn lại của cùng một vấn đề, ở sảnh. Trước đây nó là cái nút không làm gì cả. Giờ nó đưa bạn vào phòng đang mở tốt nhất của chế độ bạn chọn: ưu tiên phòng do người thật lập, rồi tới phòng gần khai cuộc nhất, rồi tới phòng chờ lâu nhất. Chỉ khi thật sự không có gì để tham gia thì nó mới mở một phòng mới cho bạn.
Cho người thích chi tiết kỹ thuật
Chơi lại không thêm bất kỳ điểm cuối mới nào ở phía máy chủ. Nó làm đúng những gì người chơi vẫn làm bằng tay — tạo phòng, cho bot vào chỗ từng con một (lệnh này chọn chiếc ghế trống kế tiếp, nên gọi song song sẽ tranh cùng một ghế), rồi khai cuộc — và mỗi bước đều được cấp quyền dưới danh nghĩa người chơi, nên mọi quy tắc áp dụng cho căn phòng bạn tự lập cũng áp dụng ở đây.
Điều đó quan trọng vì ai là người bấm nút. Chín trong mười lần rời ván đầu tiên là đầu hàng, không phải phá sản, nên tình huống thường gặp là người chơi rời một ván vẫn đang tiếp diễn với những người khác. Nó hoạt động được vì người đã ra khỏi một ván thì không còn bị tính là đang ở trong ván — một quy tắc ra mắt vì lý do khác cách đây một năm, và giờ chính nó khiến nút Chơi lại là hợp lệ.
Ghép nhanh giữ quyết định của mình trong một hàm thuần khiết, nên có thể kiểm thử mà không cần sảnh lẫn cơ sở dữ liệu. Chế độ ở đây là bộ lọc, không phải sở thích: bị đẩy vào ván Cổ điển nửa tiếng sau khi đã chọn Blitz thì tệ hơn là chờ một chút.
// lib/lobby/quickMatch.ts — which open room to try, in order
.sort((a, b) => {
// 1. a human host: pool the people who are actually online
if (a.creator_is_bot !== b.creator_is_bot) return a.creator_is_bot ? 1 : -1;
// 2. fewest free seats: a nearly-full room starts sooner
const freeA = a.max_players - a.player_count;
const freeB = b.max_players - b.player_count;
if (freeA !== freeB) return freeA - freeB;
// 3. oldest: whoever has waited longest gets company first
return Date.parse(a.created_at) - Date.parse(b.created_at);
});Toàn bộ danh sách đã xếp thứ tự được trả về thay vì một lựa chọn duy nhất, vì số chỗ chỉ là ảnh chụp tại một thời điểm: bên gọi đi dần xuống danh sách cho đến khi thực sự tham gia thành công — chính điều đó ngăn hai người tranh chiếc ghế cuối cùng rốt cuộc ai cũng ngồi một mình.
