# 🎮 聊天室游戏开发进度

> 更新时间：2026-03-04

---

## ✅ 已完成

### 🎲 百家乐（Baccarat）

- **类型**：定时自动开局（调度器每分钟检查，间隔可配置）
- **数据库**：`baccarat_rounds` + `baccarat_bets`
- **模型**：`BaccaratRound` / `BaccaratBet`
- **队列 Job**：`OpenBaccaratRoundJob` (开局) + `CloseBaccaratRoundJob` (摇骰结算)
- **事件**：`BaccaratRoundOpened` / `BaccaratRoundSettled`（PresenceChannel 广播）
- **控制器**：`BaccaratController`（`/baccarat/current` / `/baccarat/bet` / `/baccarat/history`）
- **前端**：`chat/partials/baccarat-panel.blade.php`（倒计时/押注/骰子动画/趋势）
- **货币来源**：`CurrencySource::BACCARAT_BET` / `BACCARAT_WIN`
- **后台配置**：`game_configs` 表，管理员可配置开关/间隔/赔率/押注范围

### 🎰 老虎机（Slot Machine）

- **类型**：玩家随时主动触发（即时游戏）
- **数据库**：`slot_machine_logs`
- **模型**：`SlotMachineLog`（8种带权重图案、判奖逻辑）
- **控制器**：`SlotMachineController`（`/slot/info` / `/slot/spin` / `/slot/history`）
- **赔率**：三7×100（全服广播）/ 三钻×50 / 三同×10 / 两同×2 / 三骷髅诅咒（扣双倍）
- **聊天通知**：中奖发私信通知；三7全服公屏广播
- **前端**：`chat/partials/slot-machine.blade.php`（三列滚轮动画/逐列停止/可拖动FAB）
- **货币来源**：`CurrencySource::SLOT_SPIN` / `SLOT_WIN` / `SLOT_CURSE`
- **后台配置**：`game_configs` 表，可配置每次消耗/每日次数上限/各赔率

### 📦 神秘箱子（Mystery Box）

- **类型**：系统定时自动投放 + 管理员手动投放（即时广播暗号，先到先得）
- **数据库**：`mystery_boxes`（箱子记录）+ `mystery_box_claims`（领取日志）
- **模型**：`MysteryBox` / `MysteryBoxClaim`
- **队列 Job**：`DropMysteryBoxJob`（投放 + 公屏广播暗号 + 派发 ExpireJob）/ `ExpireMysteryBoxJob`（到期处理）
- **控制器**：`MysteryBoxController`（`/mystery-box/status` 状态查询 / `/mystery-box/claim` 领取）
- **前端**：`chat/partials/mystery-box.blade.php`（5秒轮询检测 + 可拖动FAB + 快捷输入面板）
- **领取方式**：① 聊天框直接输入暗号发送（前端拦截，不发普通消息）② 点击悬浮FAB打开面板输入
- **箱子类型**：普通箱（500\~2000金）/ 稀有箱（5000\~20000金）/ 黑化箱（陷阱，倒扣200\~1000金）
- **货币来源**：`CurrencySource::MYSTERY_BOX` / `MYSTERY_BOX_TRAP`（含 `room_id` 流水记录）
- **后台配置**：`game_configs` 表，可配置开关/自动投放间隔/各奖励范围/陷阱概率；支持手动投放三种类型

### 🐎 赛马竞猜（Horse Racing）

- **类型**：定时自动开局（调度器每分钟检查，间隔可配置）
- **数据库**：`horse_races` + `horse_bets`
- **模型**：`HorseRace` / `HorseBet`
- **队列 Job**：`OpenHorseRaceJob`（开赛广播）+ `RunHorseRaceJob`（每秒播报马匹进度 + 确定胜者）+ `CloseHorseRaceJob`（结算）
- **事件**：`HorseRaceOpened` / `HorseRaceProgress` / `HorseRaceSettled`（PresenceChannel 广播）
- **控制器**：`HorseRaceController`（`/horse-race/current` / `/horse-race/bet` / `/horse-race/history`）
- **广播**：`horse.opened` / `horse.progress` / `horse.settled`
- **前端**：`chat/partials/horse-race-panel.blade.php`（倒计时/赛马道动画/实时赔率/可拖动FAB）
- **货币来源**：`CurrencySource::HORSE_BET` / `HORSE_WIN`
- **后台配置**：`game_configs` 表，马匹数量/押注窗口/跨马时长/庄家抓水比例均可配置

### 🔮 神秘占卜（Fortune Telling）

- **类型**：玩家主动使用（每日免费 N 次，额外次数消耗金币）
- **数据库**：`fortune_logs`
- **模型**：`FortuneLog`（55+ 条签文内嵌在模型中）
- **控制器**：`FortuneTellingController`（`/fortune/today` 查今日 / `/fortune/tell` 占卜 / `/fortune/history` 历史）
- **前端**：`chat/partials/fortune-panel.blade.php`（卦象摇动动画/签文卡片/当日加成状态/可拖动FAB）
- **每日限制**：免费 N 次（可配置），额外次数消耗金币
- **广播**：暂无实时广播（占卜结果仅展示给本人）
- **货币来源**：`CurrencySource::FORTUNE_COST`
- **后台配置**：`game_configs` 表，免费次数/额外消耗/各签概率均可配置

---

## 🕐 待开发

---

## 📌 通用待办（所有游戏共用）

- [x] 后台游戏管理页面（`/admin/game-configs`）显示各游戏实时统计数据（点击"加载实时统计"异步加载各游戏汇总卡片）
- [x] 各游戏历史记录在后台可查（管理员视角，新增 `/admin/game-history/` 路由组，支持百家乐/老虎机/赛马/神秘箱子/占卜各自的历史记录列表及详情页，含筛选分页）
- [x] 生产环境部署：`php artisan db:seed --class=GameConfigSeeder`（初始化游戏配置） 已经完成了
- [ ] 百家乐/老虎机 全面测试（多用户并发下注）

---

## 🔧 已修复的 Bug

1. **百家乐广播频道**：`Channel` → `PresenceChannel`，解决前端收不到 WebSocket 事件
2. **百家乐余额检查**：`$user->gold` → `$user->jjb`（字段名错误）
3. **老虎机积分日志**：普通中奖/诅咒发私信通知；三7全服广播
4. **老虎机FAB**：支持拖动 + localStorage 位置持久化
5. **星海小博士随机事件**：改走 `UserCurrencyService.change()`，补写流水日志
6. **百家乐结算UI**：骰子改数字方块（跨平台）；中奖/未中奖卡片重设计
7. **全部 FAB 拖动统一**：百家乐 FAB 改为 Alpine.js `baccaratFab()` 组件，与老虎机 `slotFab()` 完全一致，位置持久化存 localStorage
8. **Alpine.js 初始化顺序**：`frame.blade.php` 中 Alpine CDN 补加 `defer`，解决所有组件 `is not defined` 错误
9. **神秘箱子暗号领取**：改为主动尝试模式（不依赖5秒轮询），聊天框输入暗号即可触发领取；`claim()` 暗号统一转大写
10. **神秘箱子流水记录**：`change()` 调用补上 `room_id` 参数，确保积分统计页面可按房间筛选
11. **后台弹窗**：游戏管理页所有 `alert/confirm` 替换为全局 `window.adminDialog`（毛玻璃弹窗）
