一个现代化的麻将计分应用,支持多设备实时同步,无需服务器即可在朋友间共享游戏状态。
- 🎮 实时计分 - 快速记录每局胡牌结算
- 📊 排行榜 - 实时显示玩家排名和分数
- 📜 历史记录 - 完整的结算历史,支持撤回操作
- 🔄 桌面旋转 - 适配不同座位视角
- 🎯 类型识别 - 自动识别胡牌、开杠、中发白
- 🌐 多房间支持 - 支持通过 URL 创建任意数量的独立房间
- ⚡ 实时同步 - 基于 Socket.IO 的低延迟同步,确保所有玩家状态一致
- 💾 数据持久化 - 游戏进度自动保存在服务器硬盘(
data/目录),掉线、重启都不会丢失 - 📱 响应式设计 - 完美适配手机和平板
- 🐳 自动化部署 - Push 代码自动构建 Docker 镜像
这是最适合家庭服务器的部署方式。
-
打开 CasaOS App Store -> Custom Install
-
填写以下配置:
- Docker Image:
bbblq/mahjong-calculator:latest - App Name:
Mahjong - Web UI Port:
80(对应主机端口可随意,如8888)
- Docker Image:
-
关键配置 - 数据持久化:
- 在 Volumes 部分添加:
- Host:
/DATA/AppFiles/Mahjong(或者任何你想要保存数据的路径) - Container:
/app/data
- Host:
⚠️ 注意:如果不挂载这个卷,重启容器后游戏记录会丢失! - 在 Volumes 部分添加:
-
点击 Install 即可。
docker run -d \
--name mahjong \
-p 8888:80 \
-v ./mahjong-data:/app/data \
--restart unless-stopped \
bbblq/mahjong-calculator:latest本项目配置了完整的 CI/CD 流程。
- Fork 本仓库
- 修改代码
- 推送到 GitHub
- GitHub Actions 会自动触发
- 自动构建前端和后端
- 自动打包 Docker 镜像并推送
latest镜像永远保持最新
你可以通过以下任何一种方式进入特定的房间,不同房间的数据完全独立:
- URL 路径:
http://your-server/room1 - URL Hash:
http://your-server/#/room1 - 查询参数:
http://your-server/?room=room1
默认为 default 房间。
-
设置玩家姓名
- 点击左下角设置按钮
- 编辑四个方位的玩家姓名
- 点击保存
-
记录结算
- 点击胜者的姓名标签
- 选择结算类型(胡牌/开杠/中发白)
- 调整各家支付分数
- 点击"确认结算"
-
查看历史
- 底部面板显示所有结算记录
- 点击"撤回"按钮可撤销最后一次操作
-
多设备同步
- 在同一局域网内打开应用
- 只要 URL 中的房间名一致,所有设备自动连接并同步
- 前端框架: React 18
- 构建工具: Vite 5
- 通信协议: Socket.IO (WebSocket)
- 后端运行时: Node.js + Express
- 部署: Docker (Node.js Environment)
mahjong-calculator/
├── server/ # Node.js 后端
│ ├── index.js # 服务器入口 (Socket.io + Express)
│ └── package.json # 后端依赖
├── src/ # React 前端
│ ├── hooks/useGameSync.js # 核心同步逻辑
│ └── ...
├── .github/workflows/ # CI/CD 配置
│ └── docker-publish.yml # 自动构建脚本
└── Dockerfile # 全栈镜像构建配置
欢迎提交 Issue 和 Pull Request!
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 开启 Pull Request
本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情
享受游戏!🀄