Files
pk10/Docs/XOCDIA_INTEGRATION_GUIDE.md
T

8.7 KiB
Executable File
Raw Blame History

Xóc Đĩa 游戏集成指南

📋 概述

本文档描述如何在 TM68 平台上使用新集成的 Xóc Đĩa(色碟)游戏功能。

🎯 游戏规则

基本机制

  • 使用 4 枚双色硬币(红色/白色)
  • 荷官摇动后开盖展示结果
  • 玩家根据硬币颜色组合进行投注

投注类型

投注类型 说明 中奖条件 默认赔率
CHẴN (双/偶) 双数组合 4红 或 4白 或 2红2白 1:0.96
LẺ (单/奇) 单数组合 3红1白 或 3白1红 1:0.96
4 ĐỎ 4个红色 全部红色 1:10
4 TRẮNG 4个白色 全部白色 1:10
3 ĐỎ 1 TRẮNG 3红1白 3个红色1个白色 1:3.5
3 TRẮNG 1 ĐỎ 3白1红 3个白色1个红色 1:3.5

🚀 部署步骤

1. 初始化数据库

执行 SQL 脚本初始化游戏和赔率配置:

# 方式1:通过 phpMyAdmin 导入
# 导入文件:Db/xocdia_setup.sql

# 方式2:通过命令行执行
mysql -u用户名 -p数据库名 < Db/xocdia_setup.sql

脚本内容

  • games 表添加 Xóc Đĩa 游戏记录(code='xocdia', type='xocdia'
  • game_odds 表配置6种投注类型的赔率

2. 配置游戏信息

登录后台管理 → 游戏管理 → 编辑 Xóc Đĩa 游戏:

  1. 基本信息

    • 游戏名称:Xóc Đĩa
    • 游戏标识:xocdia(自动生成)
    • 游戏类型:xocdia(重要!)
    • 状态:启用
  2. 直播配置

    • 直播流地址:填写 HLS/FLV 流地址
    • 示例:https://your-cdn.com/live/xocdia.m3u8
  3. 展示设置

    • 游戏图片:上传缩略图(推荐尺寸 400x300)
    • 在游戏大厅显示:是
    • 排序权重:100(数字越大越靠前)

3. 配置赔率(可选)

如需调整赔率,登录后台管理 → 游戏管理赔率配置

类型 (type) 目标 (target) 赔率 (odds) 说明
chan all 0.96 双(偶)的赔率
le all 0.96 单(奇)的赔率
exact 4red 10.0 4红的赔率
exact 4white 10.0 4白的赔率
exact 3red1white 3.5 3红1白的赔率
exact 3white1red 3.5 3白1红的赔率

🎮 游戏流程

前台用户流程

  1. 进入游戏

    • 访问首页 → 点击 Xóc Đĩa 游戏卡片
    • 或直接访问:http://yourdomain.com/live?game_id=XX为游戏ID
  2. 观看直播

    • 页面左侧自动播放直播视频
    • 显示当前期号和倒计时
  3. 下注

    • 选择筹码金额(100K ~ 5M
    • 点击投注区域(双/单 或 精确组合)
    • 可多次点击累加投注额
    • 点击"ĐẶT CƯỢC"确认,或"HỦY"取消
  4. 等待开奖

    • 倒计时结束后封盘
    • 荷官开奖
    • 自动结算并更新余额

后台管理流程

开始新一轮

  1. 登录后台管理 → 期号管理
  2. 点击"开始下注"按钮
  3. 系统自动创建新期号(格式:G{GameID}{YYYYMMDD}{NNNN}
  4. 前台用户可以开始投注(60秒倒计时)

开奖

  1. 倒计时结束或手动封盘
  2. 点击"开奖"按钮
  3. 选择开奖方式:
    • 手动输入:逐个选择4个硬币的颜色(red/white)
    • 自动随机:系统随机生成结果
  4. 确认开奖

开奖结果存储格式JSON):

["red", "white", "red", "red"]  // 3红1白

结算

  1. 点击"结算"按钮
  2. 系统自动:
    • 遍历所有待结算投注
    • 根据开奖结果判断输赢
    • 中奖用户:返还本金 + 盈利
    • 未中奖:不退还本金
    • 记录资金流水
  3. 期号状态变更为"已结算"
  4. 点击"开始下注"启动下一轮

🔧 技术实现细节

数据库字段复用

为避免修改数据库结构,Xóc Đĩa 游戏复用了 periods 表的骰子游戏字段:

字段名 骰子游戏 Xóc Đĩa 游戏
result "Xỉu/Tài" JSON数组:["red","white",...]
dice1 骰子1点数 红色硬币数量
dice2 骰子2点数 白色硬币数量
dice3 骰子3点数 null
total 三骰总和 null

投注数据结构

{
  "bets": [
    {
      "type": "chan",           // 投注类型
      "value": "all",           // 投注目标
      "amount": 100000,         // 投注金额
      "odds": 0.96              // 赔率(从服务器获取)
    },
    {
      "type": "exact",
      "value": "4red",
      "amount": 500000,
      "odds": 10.0
    }
  ],
  "period_number": "G2202601080001",
  "game_id": 2
}

开奖API调用示例

// 手动开奖
fetch('/admin/periods/draw', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    id: 123,              // 期号ID
    auto: false,          // 手动模式
    coins: ['red', 'red', 'white', 'red']  // 4个硬币颜色
  })
});

// 自动开奖
fetch('/admin/periods/draw', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    id: 123,
    auto: true            // 自动随机
  })
});

结算逻辑

// 中奖判断示例(checkWin 方法)
$coins = json_decode($period['result'], true);  // ["red", "red", "white", "red"]
$redCount = count(array_filter($coins, fn($c) => $c === 'red'));  // 3

// 判断 chan(双)
if (in_array($redCount, [0, 2, 4])) {
    // 中奖:0红4白, 2红2白, 4红0白
    $winAmount = $betAmount * $odds;
}

// 判断 exact(精确组合)
if ($betValue === '3red1white' && $redCount === 3) {
    // 中奖:3红1白
    $winAmount = $betAmount * $odds;
}

🐛 故障排查

问题1:前台看不到 Xóc Đĩa 游戏

原因

  • 游戏未启用(status=0
  • featured=0(不在大厅显示)

解决

UPDATE games SET status=1, featured=1 WHERE code='xocdia';

问题2:投注时提示"赔率无效"

原因

  • game_odds 表缺少赔率配置

解决

# 重新执行初始化脚本
mysql -u用户名 -p数据库名 < Db/xocdia_setup.sql

问题3:开奖后前台显示错误

原因

  • result 字段不是有效的 JSON 数组

解决

-- 检查 result 字段格式
SELECT id, result FROM periods WHERE game_id=2 LIMIT 5;

-- 应该是:["red","white","red","red"] 格式
-- 如果不是,手动修正
UPDATE periods SET result='["red","red","white","white"]' WHERE id=XXX;

问题4:结算失败

原因

  • 期号状态不是 'drawn'
  • 事务回滚

解决

  1. 检查日志:Storage/log/error.log
  2. 检查期号状态:
    SELECT id, period_number, status FROM periods WHERE id=XXX;
    
  3. 手动修复状态:
    UPDATE periods SET status='drawn' WHERE id=XXX;
    

📊 性能优化建议

1. 赔率缓存

当前实现已使用静态缓存,避免重复查询:

static $oddsCache = [];

2. 期号索引

确保数据库有以下索引:

CREATE INDEX idx_period_status ON periods(status);
CREATE INDEX idx_period_game ON periods(game_id, status);
CREATE INDEX idx_bet_period ON bets(period_id, status);

3. 定时清理

建议每月清理已结算的旧期号和投注记录:

-- 保留最近30天的记录
DELETE FROM periods WHERE status='settled' AND created_at < DATE_SUB(NOW(), INTERVAL 30 DAY);
DELETE FROM bets WHERE status IN ('win','lose') AND created_at < DATE_SUB(NOW(), INTERVAL 30 DAY);

📝 未来扩展

可能的功能增强

  1. 统计数据

    • 历史开奖记录(路单)
    • 热门投注统计
    • 玩家胜率分析
  2. 游戏变体

    • 支持自定义硬币图案
    • 支持更多投注类型(如:颜色顺序)
  3. 自动化

    • 自动开奖(对接硬件或视频识别)
    • 自动封盘(基于倒计时)

集成检查清单

部署前请确认:

  • SQL 脚本已执行,游戏和赔率已创建
  • 后台游戏管理中 Xóc Đĩa 状态为"启用"
  • 已配置直播流地址(或留空测试)
  • 前台可以正常访问游戏页面
  • 测试完整流程:创建期号 → 投注 → 开奖 → 结算
  • 数据库备份已创建

📞 技术支持

如遇到问题,请检查:

  1. Storage/log/error.log - PHP 错误日志
  2. 浏览器开发者工具 Console - 前端错误
  3. 数据库查询日志 - SQL 错误

相关文件

  • 数据库脚本:Db/xocdia_setup.sql
  • 前端组件:App/Views/Web/components/xocdia-bet-panel.php
  • 后端控制器:
    • App/Controllers/Web/HomeController.php (live方法)
    • App/Controllers/Web/BetController.php (placeBet方法)
    • App/Controllers/Admin/PeriodController.php (draw/settle方法)

最后更新: 2026-01-08 版本: 1.0.0