一个黑白灰「私人牌室」风格的在线多人桌游平台。支持创建私有房间(凭 5 位房间码进入)与公共房间,内置 9 款可玩桌游,并支持人机陪玩、实时聊天、断线重连与跟随系统的深浅色主题。
| 游戏 | 人数 | 说明 |
|---|---|---|
| 大富翁 | 2-8 | 标准 40 格棋盘:买地、盖房收租、拍卖、抵押、交易、入狱、破产,最后一位未破产者获胜 |
| 21 点 | 1-10 | 经典 / 决斗 / 玩家坐庄三种模式,比谁更接近 21 |
| 你画我猜 | 3-10 | 一人画画,其他人在聊天框猜词,轮流当画师 |
| 五子棋 | 2-10 | 15×15 双人对弈,其余玩家围观 |
| 谁是卧底 | 4-10 | 派对推理:找出藏在平民中的卧底 |
| 井字棋 | 2-10 | 双人三连棋 |
| 炸金花 | 2-6 | 看牌 / 跟注 / 加注 / 比牌 / 弃牌,诈唬博弈 |
| 达芬奇密码 | 2-4 | 暗牌推理:猜对手数字,猜错翻自己的牌 |
| 狼人杀 | 6-10 | 狼人 / 村民 / 预言家 / 女巫 / 猎人,黑夜行动白天发言 |
你画我猜不支持添加人机;其余游戏均可在大厅添加/移除人机(上限=房间人数上限)。
- 9 款完整可玩桌游,含第一人称沉浸式牌桌:远端对手、中央公共区、近端本人手牌
- 人机陪玩:按各游戏规则行动的算法 AI(五子棋启发式、井字棋极小极大、达芬奇信息推理等),非纯随机
- 房间系统:私有房间凭码加入,公共房间出现在列表;房主可选游戏、加/删人机、开始游戏
- 实时聊天:你画我猜直接在聊天框猜词;狼人杀 / 谁是卧底用聊天发言
- 稳定身份:持久 UID,刷新页面自动重连,房主与身份不丢失
- 离线宽限:断线 25 秒内重连可恢复
- 深浅色主题:跟随系统
prefers-color-scheme自动切换,无手动开关 - 克制动效:发牌 / 翻牌 / 落子 / 摸牌插入等动画,并尊重
prefers-reduced-motion
需要 Node.js 18+。
npm install # 或 pnpm install
npm start # 启动,默认 http://localhost:3000环境变量:PORT 可指定端口(如 PORT=8080 npm start)。
node test/interaction-regressions.mjs
node test/reconnect-regressions.mjs
node test/frontend-regressions.mjs
node test/smoke.mjs
# 检查全部前端脚本语法
Get-ChildItem public/js -Recurse -Filter *.js | ForEach-Object { node --check $_.FullName }- 后端:Node.js + Express + Socket.IO(无构建步骤,原生 ESM)
- 前端:原生 HTML / CSS / JS,Canvas 绘制你画我猜与五子棋
- 数据:内存态(无数据库),房间与会话均存于进程内
├── public/ # 前端静态资源
│ ├── css/ # base.css(基础) + games.css(各游戏视图)
│ ├── js/ # client / room / landing / tabletop
│ │ └── games/ # 各游戏前端模块
│ └── index.html
├── server/ # 服务端
│ ├── games/ # 各游戏规则引擎 + 人机算法(bots.js)
│ ├── words/ # 你画我猜 / 谁是卧底词库
│ └── index.js # Socket.IO 入口、房间与消息路由
└── test/ # 回归与集成冒烟测试