一款实时扑克行为分析应用:在 live session 中追踪 VPIP(Voluntarily Put $ In Pot),并通过事件驱动的行为分析检测 tilt(情绪失控)模式;在行为未自我纠正时升级到冷静模式(Cooldown)。同时提供 session 与生涯统计,帮助理解自己的打法风格。
本文为 MVP 的架构与实现方案整理;tilt 子系统细则以仓库内
TILT_DETECTION.md 为准。
一款实时扑克行为分析应用:在 live session 中追踪 VPIP(Voluntarily Put $ In Pot),并通过事件驱动的行为分析检测 tilt(情绪失控)模式;在行为未自我纠正时升级到冷静模式(Cooldown)。同时提供 session 与生涯统计,帮助理解自己的打法风格。
本文为 MVP 的架构与实现方案整理;tilt 子系统细则以仓库内
TILT_DETECTION.md 为准。
| 层级 | 技术 |
|---|---|
| UI | SwiftUI |
| 架构 | @Observable + DataService(集中式数据服务) |
| 本地存储 | SwiftData |
| 认证 | Sign in with Apple(计划中) |
| 状态 | @Observable |
| 本地化 | 应用内 L10n 枚举(非系统 .strings) |
| 字段 | 类型 | 说明 |
|---|---|---|
| id | UUID | 唯一标识 |
| createdAt | Date | 账户创建时间 |
| lifetimeHands | Int | 总手数 |
| lifetimeVPIPHands | Int | 总 VPIP 手数 |
| 字段 | 类型 | 说明 |
|---|---|---|
| id | UUID | 唯一标识 |
| startTime | Date | 开始时间 |
| endTime | Date? | 结束时间(nil = 进行中) |
| totalHands | Int | 本 session 手数 |
| vpipHands | Int | 本 session VPIP 手数 |
| totalBBResult | Double? | BB 盈亏(可选) |
| handRecords | [HandRecordData] | 级联删除 |
| 字段 | 类型 | 说明 |
|---|---|---|
| id | UUID | 唯一标识 |
| timestamp | Date | 手牌时间 |
| didVPIP | Bool | 是否入池(VPIP) |
| card1Rank / card2Rank | String? | 牌面点数 A–2 |
| isSuited | Bool? | 同花 / 非同花 |
| resultRaw | String? | WIN / NOT_WIN |
| bbResult | Double? | BB 结果(可选) |
| positionRaw / actionTypeRaw | String? | 预留 Pro |
| session | SessionData? | 父 session |
单次点击 FOLD:中等强度触觉 + 统计条视觉闪烁;totalHands += 1,无需进一步输入。
| 状态 | 界面 |
|---|---|
| Warm-up(< 10 手) | 进度环倒计时 + 手数 |
| Normal | Session VPIP(hero)+ 30min / lifetime / hands 条带 |
| Warning | 30min VPIP(hero,琥珀色)+ session / lifetime 条带 |
| Danger | 30min VPIP(hero,红色)+ 抖动动画 |
| Observing | 琥珀进度环(X/5 手)+ 观察行为 |
| Cooldown | 红色倒计时环(剩余/总)+ 收紧范围 |
| VPIP | 类型 | 描述 |
|---|---|---|
| < 15% | Nit | 仅极窄范围 |
| 15–19% | Tight | 选择性入池 |
| 20–24% | Standard | 平衡 |
| 25–29% | Loose | 偏宽 |
| ≥ 30% | Very Loose | 入池过多 |
5 个独立检测器,分三层按优先级排列。
Layer 1 情绪驱动(最高) Loss Chase danger → Style Drift danger Layer 2 事件 + 情绪 Big Pot danger → Loss Chase warning → Win Tilt → Big Pot warning Layer 3 行为偏移(最低) Style Drift warning → VPIP Drift danger → VPIP Drift warning
| # | 检测器 | 层级 | 触发条件(摘要) | 级别 |
|---|---|---|---|---|
| 1 | Loss Chase(追损) | 情绪 | 输率 ≥ 60% 且 VPIP 飙升 ≥ 8% | warning / danger |
| 2 | Style Drift(风格失真) | 行为 | 近期 ≥ 2/4 手异常牌型 | warning / danger |
| 3 | Big Pot(大底池) | 事件 | 单手 BB 绝对值 ≥ 100,按强弱牌与输赢分 4 场景 | warning / danger |
| 4 | Win Tilt(顺风膨胀) | 情绪 | 胜率 ≥ 60% 且 VPIP 扩大 ≥ 8% | warning only |
| 5 | VPIP Drift(入池漂移) | 行为 | 30min VPIP 比生涯高 ≥ 10% / 18%(分档) | warning / danger |
核心规则:仅 danger 触发冷静期;warning 不升级。
normal
→ danger 触发 → observing(5 手)
→ 未改善 → cooldown(10 手)→ normal
→ 改善 → normal
| 检测器 | 级别 | 冷静期类型 |
|---|---|---|
| Loss Chase | danger | lossBased(+5 手延长) |
| Style Drift | danger | driftBased(+5 手延长) |
| Big Pot(弱牌输) | danger | lossBased(+5 手延长) |
| VPIP Drift | danger | driftBased(+5 手延长) |
| Win Tilt | warning | 不触发 |
| Big Pot(其他) | warning | 不触发 |
任一信号成立 = 仍在偏离 → 延长冷静期(最多 25 手)。
| 开关 | Key | 默认 | 作用 |
|---|---|---|---|
| Tilt Alert | vt_tilt_enabled |
ON | 总开关,关则所有检测器停用 |
| Cooldown Mode | vt_cooldown_enabled |
ON | 冷静期升级系统 |
| GTO Advice | vt_gto_advice_enabled |
ON | 选牌时翻前策略建议 |
| 开关 | Key | 默认 |
|---|---|---|
| Big Pot | vt_bigpot_enabled |
ON |
| Loss Chase | vt_losschase_enabled |
ON |
| Win Tilt | vt_wintilt_enabled |
ON |
| Style Drift | vt_styledrift_enabled |
ON |
| VPIP Drift | vt_vpipdrift_enabled |
ON |
.strings 文件。LanguageManager(@Observable)将语言偏好存 UserDefaults。L10n.s(.key, lang) 模式;80+ key(文档称 90+)。| 语言 | Code | 标签 |
|---|---|---|
| English | .english |
English |
| 中文 | .chinese |
中文 |
| 用户状态 | Stats |
|---|---|
| Guest | 锁定,显示登录引导 |
| 已登录,< 10 手 | 空状态:「多打一些手牌」 |
| 已登录,≥ 10 手 | 完整统计 |
| 类别 | 示例 |
|---|---|
| Weak Broadway | KTo, QTo, JTo |
| Weak Suited | K9s, Q9s, J8s |
| Gap Hands | K7s, Q8s, J7s |
| Marginal | A9o, K8o, Q7o |
| Connectors | T9o, 98o, 87o |
若某弱牌历史盈利(≥ 2 次记录且总 BB > 0),则不算弱牌。
| 类别 | 示例 |
|---|---|
| Premium Pairs | AA–99 |
| Premium Suited | AKs, AQs, AJs, ATs, KQs, KJs |
| Premium Offsuit | AKo, AQo |
站内整理自 MVP 方案 v3.0 · 原稿更新 2026-03-22