Initial commit: 投注游戏平台初始化
This commit is contained in:
Executable
+464
@@ -0,0 +1,464 @@
|
||||
# Xóc Đĩa 游戏 - 后台管理系统
|
||||
|
||||
## 📋 项目概述
|
||||
|
||||
这是为 TM68 在线娱乐平台开发的 **Xóc Đĩa(色碟)** 游戏后台管理系统。
|
||||
|
||||
Xóc Đĩa 是越南传统赌博游戏,使用 4 枚双色硬币(红/白),玩家根据硬币颜色组合进行投注。
|
||||
|
||||
---
|
||||
|
||||
## 🎮 游戏规则
|
||||
|
||||
### 基本玩法
|
||||
|
||||
1. 荷官摇动碗盘,展示 4 枚硬币的结果
|
||||
2. 每枚硬币有两面:**红色 (Đen)** 或 **白色 (Trắng)**
|
||||
3. 玩家提前押注结果组合
|
||||
|
||||
### 投注类型与赔率
|
||||
|
||||
| 投注类型 | 说明 | 默认赔率 |
|
||||
|---------|------|---------|
|
||||
| **Chẵn (双)** | 4红 / 4白 / 2红2白 | 1:1 |
|
||||
| **Lẻ (单)** | 3红1白 / 1红3白 | 1:1 |
|
||||
| **4 Đen (4红)** | 4枚全红 | 10:1 |
|
||||
| **4 Trắng (4白)** | 4枚全白 | 10:1 |
|
||||
| **3 Đen (3红1白)** | 3红1白 | 3.5:1 |
|
||||
| **3 Trắng (3白1红)** | 1红3白 | 3.5:1 |
|
||||
|
||||
### 房间类型
|
||||
|
||||
#### 1. Bàn Thu Phế (抽水台)
|
||||
- 庄家对赢家抽取佣金(默认 5%)
|
||||
- 标准玩法
|
||||
|
||||
#### 2. Bàn Xâu 3 Đen (免水台)
|
||||
- 免抽水(1赔1)
|
||||
- **特殊规则**:出现"3红1白"时,押"单"的玩家退款(可配置)
|
||||
- 庄家通过特殊规则保持优势
|
||||
|
||||
---
|
||||
|
||||
## 🗂️ 系统架构
|
||||
|
||||
### 目录结构
|
||||
|
||||
```
|
||||
touzi/
|
||||
├── App/
|
||||
│ ├── Controllers/
|
||||
│ │ └── Admin/
|
||||
│ │ ├── XocdiaRoomController.php # 房间配置管理
|
||||
│ │ └── XocdiaPeriodController.php # 期号管理
|
||||
│ └── Views/
|
||||
│ └── Admin/
|
||||
│ ├── xocdia_rooms.php # 房间管理界面
|
||||
│ └── xocdia_periods.php # 期号管理界面
|
||||
├── Db/
|
||||
│ └── xocdia_schema.sql # 数据库表结构
|
||||
├── Docs/
|
||||
│ └── XOCDIA_ADMIN_GUIDE.md # 详细使用指南
|
||||
└── routes.php # 路由配置
|
||||
```
|
||||
|
||||
### 数据库表
|
||||
|
||||
| 表名 | 用途 |
|
||||
|-----|------|
|
||||
| `xd_room_config` | 房间配置(赔率、限红、规则) |
|
||||
| `xd_periods` | 期号记录(状态、结果、配置快照) |
|
||||
| `xd_bets` | 投注记录 |
|
||||
| `xd_settlements` | 结算汇总 |
|
||||
| `xd_bet_stats` | 实时投注统计 |
|
||||
|
||||
---
|
||||
|
||||
## 🚀 快速开始
|
||||
|
||||
### 步骤1:初始化数据库
|
||||
|
||||
```bash
|
||||
# 登录 MySQL
|
||||
mysql -u your_username -p
|
||||
|
||||
# 使用现有数据库
|
||||
USE touzi_database;
|
||||
|
||||
# 导入表结构
|
||||
SOURCE /path/to/touzi/Db/xocdia_schema.sql;
|
||||
```
|
||||
|
||||
**验证**:
|
||||
```sql
|
||||
SHOW TABLES LIKE 'xd_%';
|
||||
-- 应该看到 5 个表
|
||||
|
||||
SELECT * FROM xd_room_config;
|
||||
-- 应该看到 2 个默认房间
|
||||
```
|
||||
|
||||
### 步骤2:访问后台
|
||||
|
||||
1. 登录后台:`http://yourdomain.com/admin/login`
|
||||
2. 访问房间管理:`http://yourdomain.com/admin/xocdia/rooms`
|
||||
3. 访问期号管理:`http://yourdomain.com/admin/xocdia/periods`
|
||||
|
||||
### 步骤3:配置房间
|
||||
|
||||
1. 在房间列表点击"编辑"
|
||||
2. 修改赔率、限红、抽水比例等
|
||||
3. 保存配置
|
||||
|
||||
### 步骤4:开始第一期游戏
|
||||
|
||||
1. 访问期号管理页面
|
||||
2. 选择房间
|
||||
3. 点击"开始新期号"
|
||||
4. 等待用户下注(或手动点击"封盘")
|
||||
5. 点击"开奖",选择 4 枚硬币的结果
|
||||
6. 系统自动结算并更新用户余额
|
||||
|
||||
---
|
||||
|
||||
## 🎯 管理流程
|
||||
|
||||
### 完整流程图
|
||||
|
||||
```
|
||||
┌────────────┐
|
||||
│ 开始新期号 │ → 自动生成期号、快照配置
|
||||
└──────┬─────┘
|
||||
↓
|
||||
┌────────────┐
|
||||
│ 下注阶段 │ → 用户可以投注(30-60秒)
|
||||
└──────┬─────┘
|
||||
↓
|
||||
┌────────────┐
|
||||
│ 封盘 │ → 停止接受新投注
|
||||
└──────┬─────┘
|
||||
↓
|
||||
┌────────────┐
|
||||
│ 开奖 │ → 管理员选择 4 枚硬币结果
|
||||
└──────┬─────┘
|
||||
↓
|
||||
┌────────────┐
|
||||
│ 自动结算 │ → 判断输赢、计算赔付、更新余额
|
||||
└──────┬─────┘
|
||||
↓
|
||||
┌────────────┐
|
||||
│ 展示结果 │ → 显示开奖结果和赔付明细
|
||||
└────────────┘
|
||||
```
|
||||
|
||||
### 关键操作
|
||||
|
||||
#### 1. 配置赔率
|
||||
|
||||
**方式 A:通过界面**
|
||||
- 访问 `/admin/xocdia/rooms`
|
||||
- 点击"编辑"按钮
|
||||
- 修改赔率配置
|
||||
- 保存
|
||||
|
||||
**方式 B:直接修改数据库**
|
||||
```sql
|
||||
UPDATE xd_room_config
|
||||
SET odds = JSON_OBJECT(
|
||||
'even', 1.0,
|
||||
'odd', 1.0,
|
||||
'four_red', 15.0, -- 修改为 15 倍
|
||||
'four_white', 15.0,
|
||||
'three_red', 5.0,
|
||||
'three_white', 5.0
|
||||
),
|
||||
version = version + 1
|
||||
WHERE room_id = 1;
|
||||
```
|
||||
|
||||
#### 2. 开始期号
|
||||
|
||||
**API 调用**:
|
||||
```javascript
|
||||
fetch('/admin/xocdia/periods/start', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ room_id: 1 })
|
||||
})
|
||||
```
|
||||
|
||||
#### 3. 开奖
|
||||
|
||||
**API 调用**:
|
||||
```javascript
|
||||
fetch('/admin/xocdia/periods/draw', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({
|
||||
period_id: 123,
|
||||
coins: [1, 1, 1, 0] // 3红1白
|
||||
})
|
||||
})
|
||||
```
|
||||
|
||||
**开奖结果映射**:
|
||||
```
|
||||
[1, 1, 1, 1] → 4_red (4红)
|
||||
[1, 1, 1, 0] → 3_red_1_white (3红1白)
|
||||
[1, 1, 0, 0] → 2_red_2_white (2红2白)
|
||||
[1, 0, 0, 0] → 1_red_3_white (1红3白)
|
||||
[0, 0, 0, 0] → 4_white (4白)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 💰 结算逻辑
|
||||
|
||||
### 基础结算(抽水台)
|
||||
|
||||
```
|
||||
1. 判断输赢
|
||||
- 投注"双",结果是 4红 → 赢
|
||||
- 投注"单",结果是 3红1白 → 赢
|
||||
|
||||
2. 计算赔付
|
||||
- 赢得金额 = 投注金额 × 赔率
|
||||
- 佣金 = 赢得金额 × 佣金率 (5%)
|
||||
- 净盈亏 = 赢得金额 - 佣金
|
||||
|
||||
3. 更新余额
|
||||
- 用户余额 += 净盈亏
|
||||
|
||||
示例:
|
||||
投注 100 元押"单",赔率 1.0,结果 3红1白
|
||||
→ 赢得金额 = 100 × 1.0 = 100
|
||||
→ 佣金 = 100 × 0.05 = 5
|
||||
→ 净盈亏 = 100 - 5 = 95
|
||||
→ 用户实际获得 95 元利润
|
||||
```
|
||||
|
||||
### 特殊规则结算(免水台)
|
||||
|
||||
```
|
||||
配置示例:
|
||||
{
|
||||
"trigger_result": "3_red_1_white", // 触发条件
|
||||
"affected_bet_types": ["odd"], // 影响的投注类型
|
||||
"action": "refund", // 动作:退款
|
||||
"refund_percentage": 1.0 // 100% 退款
|
||||
}
|
||||
|
||||
结算流程:
|
||||
1. 检查结果是否为 "3_red_1_white"
|
||||
2. 如果是,检查投注类型是否为 "odd"
|
||||
3. 如果匹配,执行退款动作:
|
||||
- 赢得金额 = 投注金额 × 100% = 投注金额
|
||||
- 净盈亏 = 0(不赚不赔)
|
||||
- 状态 = 'refund'
|
||||
|
||||
示例:
|
||||
投注 100 元押"单",结果 3红1白
|
||||
→ 触发特殊规则
|
||||
→ 退款 100 元
|
||||
→ 净盈亏 = 0
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📊 数据查询
|
||||
|
||||
### 查看房间盈亏
|
||||
|
||||
```sql
|
||||
-- 今日盈亏
|
||||
SELECT
|
||||
room_id,
|
||||
SUM(house_profit) as total_profit,
|
||||
SUM(total_bets_amount) as total_bets,
|
||||
COUNT(*) as period_count
|
||||
FROM xd_settlements
|
||||
WHERE settled_at >= CURDATE()
|
||||
GROUP BY room_id;
|
||||
|
||||
-- 历史盈亏(按日)
|
||||
SELECT
|
||||
DATE(settled_at) as date,
|
||||
room_id,
|
||||
SUM(house_profit) as daily_profit,
|
||||
COUNT(*) as period_count
|
||||
FROM xd_settlements
|
||||
WHERE room_id = 1
|
||||
GROUP BY DATE(settled_at), room_id
|
||||
ORDER BY date DESC
|
||||
LIMIT 30;
|
||||
```
|
||||
|
||||
### 查看用户投注记录
|
||||
|
||||
```sql
|
||||
SELECT
|
||||
u.username,
|
||||
b.period_number,
|
||||
b.bet_type,
|
||||
b.bet_amount,
|
||||
b.status,
|
||||
b.net_profit,
|
||||
b.created_at
|
||||
FROM xd_bets b
|
||||
JOIN users u ON b.user_id = u.id
|
||||
WHERE u.id = 123
|
||||
ORDER BY b.created_at DESC
|
||||
LIMIT 50;
|
||||
```
|
||||
|
||||
### 统计热门玩法
|
||||
|
||||
```sql
|
||||
SELECT
|
||||
bet_type,
|
||||
COUNT(*) as bet_count,
|
||||
SUM(bet_amount) as total_amount,
|
||||
AVG(bet_amount) as avg_amount
|
||||
FROM xd_bets
|
||||
WHERE created_at >= DATE_SUB(NOW(), INTERVAL 7 DAY)
|
||||
GROUP BY bet_type
|
||||
ORDER BY bet_count DESC;
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔧 配置说明
|
||||
|
||||
### 房间配置字段详解
|
||||
|
||||
```json
|
||||
{
|
||||
"room_id": 1,
|
||||
"room_name": "Bàn Thu Phế",
|
||||
"room_type": "commission", // commission=抽水台, special_rule=免水台
|
||||
|
||||
// 赔率配置(倍数)
|
||||
"odds": {
|
||||
"even": 1.0, // 双
|
||||
"odd": 1.0, // 单
|
||||
"four_red": 10.0, // 4红
|
||||
"four_white": 10.0, // 4白
|
||||
"three_red": 3.5, // 3红1白
|
||||
"three_white": 3.5 // 1红3白
|
||||
},
|
||||
|
||||
// 抽水配置
|
||||
"commission_rate": 0.05, // 5%
|
||||
"commission_enabled": true, // 是否启用
|
||||
|
||||
// 限红配置
|
||||
"limits": {
|
||||
"min_bet": 10, // 最小投注
|
||||
"max_bet": 50000, // 最大投注
|
||||
"max_payout": 500000 // 最大赔付
|
||||
},
|
||||
|
||||
// 时间配置
|
||||
"timing": {
|
||||
"betting_duration": 30, // 下注时长(秒)
|
||||
"result_display_duration": 8, // 结果展示时长(秒)
|
||||
"auto_start_next": true // 自动开始下一期
|
||||
},
|
||||
|
||||
// 特殊规则(仅免水台)
|
||||
"special_rule": {
|
||||
"enabled": true,
|
||||
"trigger_result": "3_red_1_white",
|
||||
"affected_bet_types": ["odd"],
|
||||
"action": "refund", // refund/half_win/lose
|
||||
"refund_percentage": 1.0 // 1.0=100%, 0.5=50%
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ 注意事项
|
||||
|
||||
### 配置修改
|
||||
|
||||
1. **配置修改后不会立即生效**
|
||||
- 当前期号使用配置快照
|
||||
- 新期号开始时才会读取最新配置
|
||||
|
||||
2. **版本控制**
|
||||
- 每次修改配置,`version` 字段自动 +1
|
||||
- 用于乐观锁,防止并发修改冲突
|
||||
|
||||
### 开奖操作
|
||||
|
||||
1. **开奖不可撤销**
|
||||
- 开奖后立即结算并更新余额
|
||||
- 如果误操作,需手动回滚数据库
|
||||
|
||||
2. **结算原子性**
|
||||
- 结算过程使用事务保证
|
||||
- 失败会自动回滚
|
||||
|
||||
### 安全建议
|
||||
|
||||
1. **限制管理员权限**
|
||||
- 开奖权限应严格控制
|
||||
- 建议启用操作日志
|
||||
|
||||
2. **数据备份**
|
||||
- 定期备份 `xd_*` 表
|
||||
- 重要操作前手动备份
|
||||
|
||||
3. **并发控制**
|
||||
- 避免多个管理员同时操作同一期号
|
||||
- 配置更新使用乐观锁
|
||||
|
||||
---
|
||||
|
||||
## 📚 相关文档
|
||||
|
||||
- **详细使用指南**: `Docs/XOCDIA_ADMIN_GUIDE.md`
|
||||
- **后端逻辑架构**: 参见开发文档
|
||||
- **数据库表结构**: `Db/xocdia_schema.sql`
|
||||
- **API 接口文档**: 待补充
|
||||
|
||||
---
|
||||
|
||||
## 🛠️ 后续开发计划
|
||||
|
||||
### 第一阶段(核心功能完善)
|
||||
|
||||
- [ ] WebSocket 实时通信
|
||||
- [ ] 自动化定时任务(自动开奖、封盘)
|
||||
- [ ] 风险监控预警
|
||||
- [ ] 操作日志记录
|
||||
|
||||
### 第二阶段(数据分析)
|
||||
|
||||
- [ ] 房间盈亏报表
|
||||
- [ ] 用户行为分析
|
||||
- [ ] 开奖历史走势图
|
||||
- [ ] 实时数据可视化
|
||||
|
||||
### 第三阶段(体验优化)
|
||||
|
||||
- [ ] 移动端适配
|
||||
- [ ] 多语言支持(越南语/中文)
|
||||
- [ ] 游戏历史回放
|
||||
- [ ] API 开放接口
|
||||
|
||||
---
|
||||
|
||||
## 📞 技术支持
|
||||
|
||||
如有问题,请查阅:
|
||||
1. 详细使用指南:`Docs/XOCDIA_ADMIN_GUIDE.md`
|
||||
2. 数据库表结构:`Db/xocdia_schema.sql`
|
||||
3. 源代码文档:控制器代码注释
|
||||
|
||||
---
|
||||
|
||||
**开发完成日期**: 2026-01-08
|
||||
**版本**: 1.0.0
|
||||
**开发者**: Claude (AI Assistant)
|
||||
Reference in New Issue
Block a user