极速模式与第三颗骰子
一种更快、更随性的玩法——回合更短,想在哪建房就在哪建,还有一颗能把你传送到棋盘各处的第三颗骰子。

通俗版
时间不多,又想玩上一整局?极速模式就是答案。回合的计时更紧——每个回合大约 45 秒——所以整局棋会结束得早得多,而这份压力会让所有人始终保持警觉。
建造也更自由。在经典对局里,你必须把房子在一个颜色组里平均铺开,每回合只能建一栋。而在极速模式里,你可以把一切都砸进同一条街,并在一次行动中尽你所能地多建。如果你抵押了一处地产,就会有一个倒计时开始:及时把它赎回,否则它就会回到银行手里。
头号亮点是第三颗骰子,它从第 7 回合起加入掷骰。它会改变你在棋盘上的移动方式:
- 数字会加进你的掷骰结果——两颗白骰子再加上第三颗,于是你能走得更远。
- 巴士让你自行选择走法:取全部点数之和,或只取其中一颗白骰子。
- An "X" (Mr. Monopoly) 会把你送到最近的空闲地产,或最近的、你将不得不向其付款的对手处。
- 三连——三颗骰子点数全部相同——让你传送到棋盘上的任意一格,然后再掷一次。
技术细节
各模式共用同一个引擎。新增的 modes.ts 保存着 MODE_CONFIGS——每个模式的初始资金、回合计时器、回合上限、收税时机,以及是否允许不均衡建造——守护进程在开局时读取该对局的模式,挑选对应配置,并把它传入 initializeGame。每回合的截止时间使用该模式的 turnSeconds;经典模式则保留可由管理员调节的基础值。
// 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,
},
// ...
};第三颗骰子被隔离在 speed-die.ts 中——SpeedFace 类型、rollSpeedDie、busOptions、isSpeedTriple 以及最近地产的若干辅助函数——它并不是一个分叉。共享的归约器只有在 state.mode === "speed" 时才会调用它,并复用常规的移动与落地代码,因此经典模式毫发无损,引擎此前的所有测试也全部保持通过。
这颗骰子无需任何数据库迁移:新状态(最后一次的极速骰面,以及待处理的巴士 / 传送 / 重掷)存放在 engine_state 的 JSON 里,骰子的点数则搭载在可选的 dice_rolled.speedDie 载荷字段上——没有新的事件类型。迁移 0024 只是放宽了 create_game 以接受 "speed" 模式;枚举和字段早已存在。
