https://github.com/2ue/xzdd-counter
https://github.com/2ue/xzdd-counter
Last synced: 10 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/2ue/xzdd-counter
- Owner: 2ue
- Created: 2025-08-09T06:50:30.000Z (10 months ago)
- Default Branch: main
- Last Pushed: 2025-08-09T09:17:20.000Z (10 months ago)
- Last Synced: 2025-08-09T09:22:21.626Z (10 months ago)
- Language: TypeScript
- Size: 69.3 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# 四川血战到底麻将计分器
一个基于React + TypeScript + Tailwind CSS开发的四川血战到底麻将计分应用。
## 功能特性
### 🎯 核心功能
- **玩家管理**: 添加、删除玩家,重置分数
- **游戏设置**: 配置封顶番数和呼叫转移规则
- **事件记录**: 记录胡牌和杠牌事件
- **实时计分**: 自动计算并更新玩家分数
- **历史记录**: 查看和删除历史事件
- **本地存储**: 自动保存游戏状态到本地存储
### 🀄 麻将规则支持
#### 基础番型(只能选择一个)
- **小胡**: 0番
- **大对子**: 1番
- **金钩钓**: 2番
- **小七对**: 2番
- **龙七对**: 3番
- **清一色**: 2番
#### 额外番型(可以叠加多个)
- **杠上花**: 额外2番
- **杠上炮**: 额外1番
- **海底捞**: 额外1番
#### 胡牌方式
- **自摸**: +1分
- **点炮**: 不加分
#### 杠牌类型
- **暗杠**: 每家2分
- **巴杠**: 每家1分
- **点杠**: 2分
#### 封顶设置
- 可配置几番封顶
## 技术栈
- **前端框架**: React 19 + TypeScript
- **构建工具**: Vite 4.5.14
- **样式框架**: Tailwind CSS 3.4.17
- **UI组件**: Headless UI + Heroicons
- **数据存储**: localStorage
- **包管理**: pnpm
## 快速开始
### 安装依赖
```bash
pnpm install
```
### 启动开发服务器
```bash
pnpm dev
```
### 构建生产版本
```bash
pnpm build
```
## 使用说明
### 1. 添加玩家
- 在"玩家管理"区域输入玩家姓名
- 点击"添加"按钮或按回车键添加玩家
- 可以删除玩家或重置所有分数
### 2. 配置游戏设置
- **几番封顶**: 设置最大番数限制,0表示不封顶
- **呼叫转移**: 开启后杠钱归接杠上炮的玩家
### 3. 记录牌局事件
#### 胡牌事件
1. 选择事件类型为"胡牌"
2. 选择获胜者
3. 选择失败者(可多选)
4. 选择基础番型(必选一个)
5. 选择额外番型(可选多个,可叠加)
6. 选择胡牌方式(自摸/点炮)
7. 查看番数预览确认计算正确
8. 点击"添加事件"
#### 杠牌事件
1. 选择事件类型为"杠牌"
2. 选择杠牌玩家
3. 选择杠牌类型(暗杠/巴杠/点杠)
4. 点击"添加事件"
### 4. 查看统计
- **分数统计**: 实时显示所有玩家分数排名
- **事件历史**: 查看所有历史事件,可删除错误事件
### 5. 数据管理
- 所有数据自动保存到本地存储
- 点击"重置游戏"可清空所有数据
## 番型叠加示例
### 示例1:清一色海底捞自摸
- 基础番型:清一色(2番)
- 额外番型:海底捞(额外1番)
- 胡牌方式:自摸(+1分)
- 最终得分:2番 + 1番 + 1分 = 4分
### 示例2:龙七对海底捞杠上炮自摸
- 基础番型:龙七对(3番)
- 额外番型:海底捞(1番)+ 杠上炮(1番)
- 胡牌方式:自摸(+1分)
- 最终得分:3番 + 1番 + 1番 + 1分 = 6分
## 计分规则详解
### 胡牌得分计算
- 基础番数 + 额外番数(可叠加) + 自摸加分(1分)
- 超过封顶番数时按封顶番数计算
### 杠牌得分计算
- **暗杠**: 每家给杠牌玩家2分
- **巴杠**: 每家给杠牌玩家1分
- **点杠**: 点杠玩家给杠牌玩家2分
### 特殊规则
- **呼叫转移**: 影响杠上炮的得分分配
- **封顶**: 限制最大番数,防止分数过高
## 项目结构
```
src/
├── components/ # React组件
│ ├── PlayerManager.tsx # 玩家管理
│ ├── SettingsManager.tsx # 设置管理
│ ├── EventAdder.tsx # 事件添加
│ ├── EventHistory.tsx # 事件历史
│ └── ScoreBoard.tsx # 分数统计
├── types/ # TypeScript类型定义
│ └── mahjong.ts
├── utils/ # 工具函数
│ ├── mahjongCalculator.ts # 计分计算
│ └── storage.ts # 本地存储
├── App.tsx # 主应用组件
└── main.tsx # 应用入口
```
## 开发说明
### 添加新的番型
1. 在 `src/types/mahjong.ts` 中的 `BaseFanType` 或 `ExtraFanType` 枚举添加新番型
2. 在 `src/utils/mahjongCalculator.ts` 中的对应分数映射添加分数
3. 更新相关组件的番型选择列表
### 修改计分规则
- 编辑 `src/utils/mahjongCalculator.ts` 中的计分函数
- 测试新的计分逻辑
### 样式定制
- 使用 Tailwind CSS 类名修改样式
- 在 `src/index.css` 中添加自定义样式
## 许可证
MIT License