麻将计分工具产品系统

我要开发同款
我是你的强2026年03月24日
15阅读

技术信息

语言技术
VueTypeScriptuniapp
系统类型
Web小程序轻应用
行业分类
开发工具

作品详情

行业场景

1. 所属行业
休闲娱乐行业 - 棋牌游戏辅助工具这是一个服务于线下麻将娱乐场景的数字化工具,属于棋牌室/家庭聚会的配套应用。
2. 核心场景
场景 描述 痛点解决
家庭聚会 节假日亲友围坐打麻将 避免纸笔记分错误、争议
棋牌室 茶馆/棋牌室日常娱乐 快速开局、透明计分
朋友约局 同事/朋友间约麻将 远程邀请、战绩追踪
比赛活动 小型麻将比赛 公平计分、数据存档
3. 目标用户画像
用户类型 特征 需求
线下麻将爱好者 经常组局打牌,3-8人小团体 便捷计分、避免纠纷
牌局组织者 负责组局、计分的"桌主" 快速开局、管理牌局
数据敏感型玩家 关注个人战绩、胜率 战绩统计、长期追踪
4. 行业特点
市场特征
高频但碎片化:麻将是中国最流行的休闲娱乐活动之一,但单次牌局时间不定
强社交属性:通常是熟人组局,需要邀请、分享功能
地域性强:不同地区麻将规则差异大(如南宁麻将)

功能介绍

功能介绍
1. 用户认证模块
功能 说明
静默登录 自动获取微信 openid,无需手动授权,无感登录
新用户注册 首次使用自动创建用户记录,默认昵称"微信用户"
昵称修改 支持自定义昵称(最长10字),数据同步云端
头像更换 支持从相册或相机选择头像,上传至云存储
2. 牌局管理模块
功能 说明
创建牌局 选择游戏模式、设置参与人数(3-8人)
加入牌局 通过分享链接或扫描二维码自动加入
结束牌局 桌主可结束牌局,锁定计分功能
删除牌局 桌主可删除牌局及相关记录
邀请玩家 生成小程序码或微信分享邀请好友
牌局模式
多人计分桌:所有玩家都可操作计分(已完整实现)
单人计分桌:仅一人负责计分(后端支持)
分数池桌:从公共池给分/取分(后端支持)
3. 计分系统模块
功能 说明
快速给分 点击玩家"给分"按钮 → 弹出数字键盘 → 输入分数 → 确认
计分逻辑 操作者扣分,目标玩家自动加分
分数明细 查看每局分数转移的详细记录
自动排名 按当前分数自动排序显示玩家排名

4. 战绩统计模块
功能 说明
基础统计 赢局数、输局数、平局数、总赢分、总输分
牌局列表 分页展示所有参与过的牌局
状态筛选 按全部/进行中/已结束筛选牌局
战绩榜 排行榜功能(规划中)
5. 个人中心模块
功能 说明
信息展示 显示头像、昵称、用户ID后8位
昵称修改 支持自定义昵称
头像更换 从相册/相机选择头像
关于我们 应用介绍和版本信息
意见反馈 反馈入口

项目实现

一、基础架构实现
1.1 技术栈
前端框架: Vue 3 + TypeScript
跨端框架: uni-app (编译为微信小程序)
构建工具: Vite
状态管理: Vue Reactive (自定义 stores)
后端服务: 微信云开发
数据库: 云开发数据库 (MongoDB)
1.2 数据库集合
集合 用途 状态
mj_users 用户信息 ✅
mj_games 牌局数据 ✅
mj_scores 分数记录 ✅
mj_logs 操作日志 ✅
二、云函数实现 (8个)
云函数 功能 实现要点
login 用户登录 获取 openid、自动注册新用户
createGame 牌局管理 创建/结束/删除牌局,桌主权限验证
joinGame 加入牌局 通过 gameNo 加入,检查人数限制
recordScore 录入分数 事务处理、分数上限封顶、操作日志
getGameList 牌局列表 状态筛选、分页查询
getScoreRecords 分数记录 明细查询、玩家统计
getUserStats 用户统计 胜率、盈亏、排名计算
getQRCode 二维码生成 小程序码生成
三、前端页面实现 (7个)
页面 路径 核心功能
启动页 pages/splash/splash.vue 加载动画、初始化登录
首页 pages/index/index.vue 开桌入口、最近一局展示
创建牌局 pages/game/create.vue 模式选择、人数配置(3-8人)
牌局详情 pages/game/detail.vue 核心计分界面、数字键盘、自动加入
分数录入 pages/game/score.vue 玩家互选给分、批量提交
战绩统计 pages/stats/index.vue 统计卡片、成就徽章、战绩列表
个人中心 pages/user/profile.vue 信息展示、昵称/头像修改
四、状态管理实现
4.1 user.ts - 用户状态
typescript
interface UserState {
isLoggedIn: boolean
userInfo: {
openid: string
nickName: string
avatarUrl: string
totalGames: number
}
}
4.2 game.ts - 游戏状态
typescript
interface GameState {
activeGames: Game[] // 进行中
finishedGames: Game[] // 已结束
currentGame: Game | null // 当前
}
五、关键技术实现
5.1 自动加入牌局
通过 URL 参数 gameNo 实现扫码/分享自动加入:
typescript
onLoad((options) => {
if (options.gameNo) {
gameNo.value = options.gameNo
}
})
5.2 分数事务处理
使用云开发事务保证数据一致性:
javascript
const transaction = await db.startTransaction()
try {
// 验证 → 插入记录 → 更新分数 → 记录日志
await transaction.commit()
} catch (err) {
await transaction.rollback()
}
5.3 数字键盘组件
自定义数字键盘实现快速给分:
plaintext
┌─────┬─────┬─────┐
│ 1 │ 2 │ 3 │
├─────┼─────┼─────┤
│ 4 │ 5 │ 6 │
├─────┼─────┼─────┤
│ 7 │ 8 │ 9 │
├─────┼─────┼─────┤
│ 取消 │ 0 │ 确认 │
└─────┴─────┴─────┘
六、部署方式
6.1 编译构建
bash
npm run build:mp-weixin
# 输出目录: dist/build/mp-weixin/
6.2 云函数部署
在微信开发者工具中右键 cloudfunctions 目录,选择"上传并部署:云端安装依赖"

示例图片

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论