规则引擎 ddz-engine
独立 Java 模块,不依赖 Spring。负责牌型判定、叫抢地主、出牌合法性、结算和 200 局规则模拟;引擎不认识任何具体角色。
PROJECT CASE STUDY · 2026
一个可以三个人开局的网页斗地主。它不只是把牌画到屏幕上: 规则、技能、房间、断线恢复、自由匹配和上线硬化,都是同一条链路里的真实问题。
01 / WHAT I BUILT
ddz-engine独立 Java 模块,不依赖 Spring。负责牌型判定、叫抢地主、出牌合法性、结算和 200 局规则模拟;引擎不认识任何具体角色。
ddz-skills在规则之上加一层可插拔技能:6 位角色、14 个技能。变牌、万能牌、残片、额外回合 都通过引擎扩展点实现,而不是把角色写进规则分支。
ddz-serverSpring Boot + 原生 WebSocket JSON。服务端持有权威房间与牌局状态,负责选角、 回合、计时托管、断线重连、回房和三人 FIFO 自由匹配。
webReact 19 + Vite。官网、大厅、选角和牌桌是一套连续的体验:响应式手牌、 出牌演出、音效设置,以及 844×390 横屏和 390 竖屏提示。
当前是单实例、内存态:重启会清空房间与队列。这是 1.0 的明确边界,也是后续接数据库/Redis 的起点。
02 / ENGINEERING NOTES
手牌、回合、底牌、技能状态全部在服务端。每次快照按座位裁剪:自己收到完整手牌, 对手只收到张数和公开状态。客户端提交的是“我想出这几张”,不是“现在是什么局面”。
身份用 token 恢复;掉线有 2 秒宽限,随后自动托管,重连只清掉“掉线托管”。 牌局中回房间会保留座位和手牌,刷新后还在原桌,而不是被当成新玩家。
队列锁先于房间锁;3 人 FIFO 成局,先出队再建房。建房失败要把三人放回队首, 否则同一个人可能被匹配两次,或者三个人一起从队列里消失。
64 KB 文本、500 条连接、每秒 40 条消息、300 个房间、200 人队列、24 小时 token; 再加 Origin 白名单、Actuator 健康检查和优雅停机。不是等被打满才补。
03 / THE GUESTS
前魔术师,擅长把四张牌变成一手好戏。
牌馆的修表匠,能把打出去的牌从时间里捞回来。
只在夜里出现的猫头鹰,什么牌都瞒不过它的眼睛。
看起来最无害,运气却好得不像话。
酒馆的保镖,脾气火爆,拆牌和拆门一样利索。
牌馆的主人,块头最大,话最少,一出手就是两轮。
六位角色设定与 14 个主动技能为原创;角色立绘由 AI 生成,经人工筛选与调整。 牌桌上只会公开已经选定的角色。
04 / THE TABLE
THE TABLE IS SET
不用注册,三个人就能开局。若用手机游玩,横屏体验最好。
进入牌馆