一个基于 Vue 3 + Naive UI 的游戏王卡组概率计算工具,支持精确计算、蒙特卡洛模拟和智能卡组优化。
-
📊 双模式计算
- 精确计算:枚举所有可能的组合,结果完全精确
- 蒙特卡洛模拟:快速估算,适合大型卡组和复杂条件
-
🎯 智能卡组优化
- 根据目标启动率自动生成多种调整方案
- 支持保持卡组大小、扩充卡组、压缩卡组三种策略
- 自动评估方案效果,推荐最佳方案
-
🔍 强大的条件表达式
- 支持复杂逻辑表达式
- 多种运算符:
>,<,>=,<=,==,!=,&&,|| - 支持算术求和:
a + b >= 2
-
💾 卡组管理
- 保存和加载卡组配置
- 支持多个卡组切换
- 自动保存计算记录
-
📱 响应式设计
- 完美支持桌面端和移动端
- 自适应布局,优化用户体验
-
🚀 高性能
- 使用 Web Worker 进行后台计算
- 不阻塞主线程,界面流畅
- 实时显示计算进度
- 前端框架: Vue 3 (Composition API)
- UI 组件库: Naive UI
- 计算引擎: @ygo_build/calc(独立封装的计算库)
- 构建工具: Vite
- 图表库: Chart.js
- 拖拽: vuedraggable
- 评论系统: Waline
YGO_build/
├── src/
│ ├── components/ # Vue 组件
│ │ ├── DeckManagement.vue # 卡组管理
│ │ ├── CardInput.vue # 卡牌输入
│ │ ├── DeckPieChart.vue # 卡组饼图
│ │ ├── DrawSettings.vue # 抽卡设置
│ │ ├── ConditionInput.vue # 条件输入
│ │ ├── CalculationPanel.vue # 计算面板
│ │ ├── DeckOptimizer.vue # 卡组优化器
│ │ └── ReasoningCalculator.vue # 推理计算器
│ ├── composables/ # 组合式函数
│ │ ├── useCalculation.js # 概率计算
│ │ ├── useOptimizer.js # 卡组优化
│ │ ├── useConditionBuilder.js # 条件构建
│ │ └── useDeck.js # 卡组管理
│ ├── App.vue # 主应用
│ └── main.ts # 入口文件
├── package.json
└── README.md
# 在 monorepo 根目录
npm install
# 或在项目目录
cd F:/work/YGO_build
npm installnpm dev访问 http://localhost:5173
npm buildnpm previewnpm deploy:build-
配置卡组
- 在"卡牌配置"区域输入各类卡牌的数量
- 可以自定义卡牌名称
- 设置单张卡的最大上限
-
设置条件
- 在"逻辑判定"区域输入条件表达式
- 例如:
a > 0表示至少1张A卡 - 支持复杂条件:
(a > 0 || b > 0) && c >= 1
-
开始计算
- 点击"精确计算"或"快速估算"按钮
- 实时查看计算进度
- 查看概率和组合数结果
- 单字母:
a-z(对应 A-Z 卡) - 双字母:
aa-ad(对应 AA-AD 卡) - 自定义卡名:直接使用您输入的卡名
- 比较:
>,<,>=,<=,==,!= - 逻辑:
&&(与),||(或) - 算术:
+,-(用于变量求和)
// 简单条件
'a > 0' // 至少1张A卡
'b >= 2' // 至少2张B卡
// 逻辑组合
'a > 0 && b > 0' // A和B都至少1张
'a > 0 || b > 0' // A或B至少1张
// 算术求和
'a + b >= 2' // A和B合计至少2张
'a + b + c >= 3' // A、B、C合计至少3张
// 复杂条件
'(a > 0 || b > 0) && c >= 1' // (A或B至少1张) 且 C至少1张-
设置目标启动率
- 在"卡组优化"面板输入目标启动率(百分比)
- 例如:80 表示希望达到 80% 的启动率
-
生成优化方案
- 点击"生成优化方案"按钮
- 系统会自动分析当前卡组和目标启动率
- 生成多种调整方案供选择
-
查看和应用方案
- 查看保持卡组大小、扩充卡组、压缩卡组三类方案
- 每个方案显示新的启动率和提升幅度
- 点击"应用"按钮将方案应用到当前卡组
-
保存卡组
- 输入卡组名称
- 点击"保存卡组"按钮
- 卡组会保存到浏览器本地存储
-
加载卡组
- 从下拉列表选择已保存的卡组
- 点击"加载"按钮
-
删除卡组
- 选择要删除的卡组
- 点击"删除"按钮
卡组配置:
- A卡(增殖的G): 3张
- 其他: 37张
条件:a > 0
结果:初手5张抽到至少1张增G的概率
卡组配置:
- A卡(展开卡): 10张
- B卡(手坑): 6张
- 其他: 24张
条件:a > 0 && b > 0
结果:既有展开又有手坑的概率
卡组配置:
- A卡(展开卡): 9张
- B卡(手坑): 9张
- 其他: 22张
条件:b >= 2 || a >= 1
结果:至少2张手坑 或 至少1张展开的概率
当前卡组:
- A卡(增殖的G): 3张
- B卡(灰流丽): 2张
- 其他: 35张
条件:a > 0 || b > 0
目标启动率:80%
结果:系统生成多种调整方案,推荐最佳配置
@ygo_build/calc: 独立封装的计算库- 提供精确计算和蒙特卡洛模拟
- 条件表达式解析和编译
- 卡组优化算法
- DeckManagement: 卡组的保存、加载、删除
- CardInput: 卡牌数量输入和名称设置
- DeckPieChart: 卡组构成的可视化饼图
- DrawSettings: 抽卡数和相关设置
- ConditionInput: 条件表达式输入(支持手动输入和可视化构建)
- CalculationPanel: 计算控制和结果显示
- DeckOptimizer: 卡组优化方案生成和应用
- ReasoningCalculator: 推理分析功能
- useCalculation: 管理计算状态和 Worker 通信
- useOptimizer: 管理优化状态和方案应用
- useConditionBuilder: 条件表达式的构建和解析
- useDeck: 卡组数据管理和 localStorage 操作
项目已从原有的内置计算逻辑迁移到使用 @ygo_build/calc 库:
- ✅ 代码量减少约 1000+ 行
- ✅ 计算逻辑统一维护
- ✅ 性能和准确性得到保证
- ✅ 易于测试和调试
详见 迁移指南
欢迎提交 Issue 和 Pull Request!
MIT
- 部分代码与思路来源于"天天发蛋糕的工具箱"
- UI 设计参考了多个优秀的概率计算工具
- 感谢所有贡献者和使用者的支持
如有问题或建议,欢迎通过 Issue 或评论区联系我们。