迷雾牌馆 THE MISTY PARLOR

PROJECT CASE STUDY · 2026

斗地主迷雾牌馆

一个可以三个人开局的网页斗地主。它不只是把牌画到屏幕上: 规则、技能、房间、断线恢复、自由匹配和上线硬化,都是同一条链路里的真实问题。

Java 17 Spring Boot 3.5 React 19 原生 WebSocket 单实例 · 内存态
迷雾牌馆官网首屏:六位 AI 生成的动物角色围坐在月圆下的牌桌旁
THE MISTY PARLOR 官网 / 角色 / 牌桌,同一套世界观

01 / WHAT I BUILT

从一张牌桌,到一套能上线的系统

01

规则引擎 ddz-engine

独立 Java 模块,不依赖 Spring。负责牌型判定、叫抢地主、出牌合法性、结算和 200 局规则模拟;引擎不认识任何具体角色。

牌型叫抢结算模拟
02

技能系统 ddz-skills

在规则之上加一层可插拔技能:6 位角色、14 个技能。变牌、万能牌、残片、额外回合 都通过引擎扩展点实现,而不是把角色写进规则分支。

6 位角色14 个技能扩展点
03

实时服务 ddz-server

Spring Boot + 原生 WebSocket JSON。服务端持有权威房间与牌局状态,负责选角、 回合、计时托管、断线重连、回房和三人 FIFO 自由匹配。

WebSocket房间状态机托管匹配
04

前端 web

React 19 + Vite。官网、大厅、选角和牌桌是一套连续的体验:响应式手牌、 出牌演出、音效设置,以及 844×390 横屏和 390 竖屏提示。

React响应式动效音效
CLIENT React + Vite 大厅 / 选角 / 牌桌
EDGE Nginx TLS · gzip · WSS
SERVER Spring Boot 房间 / 规则 / 匹配
STATE JVM heap rooms / sessions

当前是单实例、内存态:重启会清空房间与队列。这是 1.0 的明确边界,也是后续接数据库/Redis 的起点。

02 / ENGINEERING NOTES

几个真正花时间的工程问题

  1. 01

    服务端说了算,客户端只负责画

    手牌、回合、底牌、技能状态全部在服务端。每次快照按座位裁剪:自己收到完整手牌, 对手只收到张数和公开状态。客户端提交的是“我想出这几张”,不是“现在是什么局面”。

  2. 02

    掉线不等于退出

    身份用 token 恢复;掉线有 2 秒宽限,随后自动托管,重连只清掉“掉线托管”。 牌局中回房间会保留座位和手牌,刷新后还在原桌,而不是被当成新玩家。

  3. 03

    自由匹配的锁顺序要写死

    队列锁先于房间锁;3 人 FIFO 成局,先出队再建房。建房失败要把三人放回队首, 否则同一个人可能被匹配两次,或者三个人一起从队列里消失。

  4. 04

    上线前先把“最坏情况”限住

    64 KB 文本、500 条连接、每秒 40 条消息、300 个房间、200 人队列、24 小时 token; 再加 Origin 白名单、Actuator 健康检查和优雅停机。不是等被打满才补。

03 / THE GUESTS

六位客人,六种天赋

AI 生成的银鬃先生角色立绘
01SILVERMANE

银鬃先生

前魔术师,擅长把四张牌变成一手好戏。

  • 黑桃·谢幕四张黑桃化作炸弹
  • 梅花·三弄三张梅花化成三张
  • 红心·双生两张红心化成对子
  • 方片·点金一张方片化成单 2
AI 生成的铜铃师傅角色立绘
02COPPERBELL

铜铃师傅

牌馆的修表匠,能把打出去的牌从时间里捞回来。

  • 回拨怀表复制一手出过的牌
  • 拆解发条拆掉 1–3 张手牌
AI 生成的墨羽侦探角色立绘
03INKFEATHER

墨羽侦探

只在夜里出现的猫头鹰,什么牌都瞒不过它的眼睛。

  • 月光阅牌看底牌并换一张
  • 银羽印记标记别人手里的底牌点数
AI 生成的云绒角色立绘
04CLOUDWOOL

云绒

看起来最无害,运气却好得不像话。

  • 幸运羊毛要不起时自动获得万能牌
  • 灵光一闪把一张普通牌变成万能牌
AI 生成的铁砧·阿岩角色立绘
05ANVIL

铁砧·阿岩

酒馆的保镖,脾气火爆,拆牌和拆门一样利索。

  • 碎牌成四把一张牌砸成四枚残片
  • 火星四溅烧掉目标玩家的普通牌
AI 生成的老橡馆主角色立绘
06OLD OAK

老橡馆主

牌馆的主人,块头最大,话最少,一出手就是两轮。

  • 熊掌二连一回合出两手牌
  • 空杯威慑震乱目标玩家的普通牌

六位角色设定与 14 个主动技能为原创;角色立绘由 AI 生成,经人工筛选与调整。 牌桌上只会公开已经选定的角色。

04 / THE TABLE

牌桌长这样

3人一局
6位角色 · 14 个技能
350+后端自动化测试
1个可执行 jar

THE TABLE IS SET

想直接坐下打一局?

不用注册,三个人就能开局。若用手机游玩,横屏体验最好。

进入牌馆