Chế độ Tốc độ và xúc xắc thứ ba
Một cách chơi nhanh hơn và thoải mái hơn — lượt ngắn hơn, xây ở đâu tùy thích, và một xúc xắc thứ ba có thể dịch chuyển bạn khắp bàn cờ.

Nói đơn giản
Ít thời gian nhưng vẫn muốn một ván đầy đủ? Chế độ Tốc độ chính là câu trả lời. Các lượt chạy theo đồng hồ siết chặt hơn — mỗi lượt khoảng 45 giây — nên cả ván kết thúc sớm hơn nhiều, và áp lực khiến ai nấy đều phải đề cao cảnh giác.
Việc xây dựng cũng thoáng hơn. Trong ván cổ điển, bạn phải rải nhà đều khắp một nhóm màu, mỗi lượt một căn. Ở Tốc độ, bạn có thể dồn tất cả vào một con phố và xây nhiều hết mức khả năng chi trả trong một lần. Và nếu bạn thế chấp một bất động sản, một bộ đếm giờ bắt đầu đếm ngược: mua lại kịp lúc, nếu không nó sẽ trở về ngân hàng.
Điểm nổi bật là xúc xắc thứ ba, tham gia vào lượt gieo kể từ vòng 7. Nó thay đổi cách bạn di chuyển quanh bàn cờ:
- Một con số cộng thêm vào lượt gieo của bạn — hai xúc xắc trắng cộng với xúc xắc thứ ba, nên bạn đi xa hơn.
- Một Xe buýt cho bạn chọn nước đi: lấy tổng đầy đủ, hoặc chỉ một trong hai xúc xắc trắng.
- An "X" (Mr. Monopoly) đưa bạn đến bất động sản trống gần nhất, hoặc đến đối thủ gần nhất mà bạn sẽ phải trả tiền.
- Một bộ ba — cả ba xúc xắc trùng nhau — cho phép bạn dịch chuyển đến bất kỳ ô nào trên bàn cờ, rồi gieo lại.
Cho người thích chi tiết kỹ thuật
Các chế độ dùng chung một engine. Một modes.ts mới chứa MODE_CONFIGS — theo từng chế độ: tiền khởi đầu, bộ đếm giờ lượt, giới hạn vòng, thời điểm thu thuế và liệu có cho phép xây không đều — còn daemon đọc chế độ của ván lúc bắt đầu, chọn cấu hình tương ứng và đưa nó vào initializeGame. Hạn chót mỗi lượt dùng turnSeconds của chế độ; Cổ điển giữ giá trị nền có thể tinh chỉnh bởi quản trị viên.
// packages/game-engine/src/modes.ts
export const MODE_CONFIGS: Record<GameMode, ModeConfig> = {
classic: { startingCash: 15000, unevenBuild: false, turnSeconds: 90 },
speed: {
startingCash: 30000,
unevenBuild: true, // build any property, multiple per turn
turnSeconds: 45,
speedDie: true,
speedDieFromRound: 7,
},
// ...
};Xúc xắc thứ ba được tách riêng trong speed-die.ts — kiểu SpeedFace, rollSpeedDie, busOptions, isSpeedTriple và các hàm hỗ trợ tìm bất động sản gần nhất — chứ KHÔNG phải một bản fork. Reducer dùng chung chỉ gọi đến nó khi state.mode === "speed", tái dùng mã di chuyển và đáp ô thông thường, nên Cổ điển không hề bị ảnh hưởng và mọi bài kiểm thử engine trước đó vẫn xanh.
Không cần bất kỳ migration cơ sở dữ liệu nào cho xúc xắc này: trạng thái mới (mặt tốc độ cuối cùng, xe buýt / dịch chuyển / gieo lại đang chờ) nằm trong JSON engine_state, còn giá trị xúc xắc đi kèm trong trường payload tùy chọn dice_rolled.speedDie — không có loại sự kiện mới. Migration 0024 chỉ nới lỏng create_game để chấp nhận chế độ "speed"; kiểu enum và các cột vốn đã tồn tại.
