Skip to content

Windbell9/rocom-data

 
 

Repository files navigation

rocom-data · v1.0

洛克王国世界完整数据爬虫 + 战斗模拟器 + MCTS AI 对战引擎。

爬取 BWIKI 精灵图鉴,附带终端图鉴查看器、自由组队战斗模拟器,以及基于 蒙特卡洛树搜索(MCTS) 的 AI 智能体,支持通过 YAML 配置文件指导 AI 作战风格。

⚠️ 战斗模拟器仅供参考,结果不代表真实游戏表现。 详见「模拟器精度说明」章节。


功能一览

功能 说明
🕷️ 全量爬取 抓取 BWIKI 上全部精灵数据,保存为 JSON 和 CSV
🔄 检查更新 对比本地与 wiki 的差异,仅增量爬取新增精灵
📖 图鉴查看器 在终端按页浏览每只精灵的完整信息,支持搜索
⚔️ 战斗模拟器 自由组队 + 队伍名册,完整战斗机制模拟
🤖 MCTS AI 蒙特卡洛树搜索智能体,支持积累对局经验,YAML 策略配置
📋 队伍名册 队伍持久化存储,内置预设 + 用户自定义,随时调取并编辑
🖼️ 图片导入 识别游戏内队伍分享截图,自动解析精灵和技能并存入名册

环境要求

  • Python 3.10+
pip install -r requirements.txt

依赖说明

用途 是否必须
requests 爬虫网络请求
beautifulsoup4 爬虫 HTML 解析
rich 图鉴查看器 UI
pyyaml YAML 策略配置文件解析
anthropic 图片导入 — API 识别方式 可选
rapidocr-onnxruntime 图片导入 — 本地 OCR(轻量,约 50MB) 可选
easyocr 图片导入 — 本地 OCR(高精度,依赖 PyTorch) 可选

图片导入功能至少安装 anthropicrapidocr-onnxruntime 其中一个。


快速启动

方式一:双击 run.bat(Windows 推荐)

================================
  Rocom Sprite Data Tool
================================
  1. Full scrape (all sprites)   ← 全量爬取
  2. Check for updates           ← 检查更新
  3. Browse sprites (viewer)     ← 图鉴查看器
  4. Battle simulator            ← 战斗模拟器
  5. Exit
================================

方式二:命令行

python rocom_scraper.py                 # 全量爬取
python rocom_scraper.py --check-update  # 检查更新
python viewer.py                        # 图鉴查看器
python battle.py                        # 战斗模拟器(含 AI 对战)
python train.py                         # 批量训练 MCTS AI

MCTS AI 对战引擎

AI 是如何工作的

本项目的 AI 对战基于 蒙特卡洛树搜索(MCTS),而非随机操作。每一回合,AI 会:

  1. 展开模拟树:从当前状态克隆多个分支,对每个候选行动运行前瞻模拟(默认 100 次迭代)
  2. 评估得分:根据双方生命格差值、当前 HP 比例、场上状态估算该分支的"胜利期望"
  3. 选择最优行动:UCB1 公式平衡探索(试新动作)与利用(选已知好动作)
  4. 积累经验:每局结束后,将胜负结果回溯到历史决策树,更新各状态下动作的胜率权重
  5. 经验持久化:对局经验保存在 data/experience/<队伍名>.json,每次对战自动加载,越打越强

MCTS 本身不具备"学习"权重的神经网络,而是通过统计每个局面下每种行动的历史胜率来做出判断。经验越多,决策越稳定。这是一种"无模型、无神经网络"的纯树搜索方案,对战效果接近人类中等水平。

YAML 策略配置

通过编写 YAML 文件,可以向 AI 注入人类的战斗直觉,大幅提升其在特定队伍上的表现。

文件位置: data/strategies/<队伍名>.yaml(参考模板 data/strategies/_template.yaml

# 示例:为毒队配置策略
team: 预设毒队
starter: 影狸          # 首发精灵

skill_priority:
  影狸:   [感染病, 毒液渗透, 嘲弄, 恶意逃离]  # 优先传毒,再逃脱
  裘卡:   [毒囊, 崩拳, 阻断, 防御]

switch_rules:
  - when: type_disadvantaged    # 属性被克制时
    action: switch
    to: type_counter            # 换克制对方的精灵

  - when: hp_pct < 25
    action: switch
    to: highest_hp

general:
  prefer_gather_below_energy: 3
  prefer_attack_when_type_advantage: true

策略权重与 MCTS 经验权重相乘,策略推荐的行动权重 ×3.0,排斥的行动权重 ×0.2,AI 会在策略偏好的方向上更积极地探索。

可用条件(when):

条件 说明
hp_pct < N 己方当前精灵 HP 低于 N%
energy < N 己方能量低于 N
type_disadvantaged 己方精灵属性被克制
type_advantaged 己方精灵有属性克制对手
enemy_hp_pct < N 对手 HP 低于 N%
always 无条件(默认规则)

未来目标:游戏画面识别辅助

v2.0 的目标是接入 游戏画面实时读取,让 AI 真正用于游戏内辅助决策:

  • 通过截图识别当前上场精灵、双方 HP/能量、已使用技能等战场信息
  • 将识别到的状态转换为引擎内战斗状态
  • MCTS AI 给出推荐行动(显示在辅助窗口中)
  • 实现对战全程的"AI 辅助看板",而非自动操作

这一功能目前仍在规划阶段,有兴趣参与的开发者欢迎提 PR。


模拟器精度说明

本模拟器力求对五支预设队伍实现接近 100% 的原游戏战斗还原度。
对于自定义队伍,精度取决于所用精灵的特性是否已实现。

项目 实现情况 说明
六维属性 ✅ 已实现 种族值 + 个体值规则 + 性格修正公式计算
双属性精灵 ✅ 已实现 221 只双属精灵全覆盖;双弱=300%(非400%),双抗=25%
属性克制表 ✅ 已对齐 采用 roco-world 官方数据,无免疫(最低0.5x),18 种属性
性格系统 ✅ 已实现 25 种命名性格(胆小/开朗等),±10%,仅作用于 5 个战斗属性
胜利条件 ✅ 已实现 4 格生命制:己方精灵倒下 -1 格,归0判负
技能数据 ✅ 已对齐 488 个技能,与 roco-world 一致;耗能/威力 0 差异
技能效果 ⚠️ 部分实现 通过正则解析技能描述,常见效果已覆盖;少数复杂技能效果退化
异常状态 ✅ 已实现 烧伤 / 中毒 / 冻结 / 寄生,规则见下方机制表
应对机制 ✅ 已实现 攻击/防御/状态三类应对的减伤、反弹、威力倍率
天气系统 ✅ 已实现 雪天 / 沙暴 / 雨天,持续 8 回合
印记系统 已实现 12 种正负印记,详见「印记系统」章节
特性系统 部分实现 五支预设队伍全部 24 种特性已实现;详见「特性系统
对战策略 ✅ MCTS AI 蒙特卡洛树搜索,支持经验积累和 YAML 策略配置

印记系统

印记是队伍级别的持续效果,换人不消失。每支队伍同时最多存在 1 种正面印记 + 1 种负面印记

  • 相同类别的新印记直接顶替旧印记(异种覆盖)
  • 相同种类的印记则叠加层数
  • 只有清除类技能或被顶替才会消失

正面印记(POSITIVE)

印记 效果(每层)
湿润印记 全技能能耗 -1
龙噬印记 使用 3 能耗技能时,自身双攻 +30%
蓄势印记 攻击技能威力 +30%,能耗 +1
风起印记 本回合先手时,技能威力 +20%
蓄电印记 攻击技能威力平坦 +10
光合印记 回合结束获得 1 能量
攻击印记 全技能威力 +10%

负面印记(NEGATIVE)

印记 效果(每层)
减速印记 速度 -10
降灵印记 入场时失去 1 能量
星陨印记 受到非幻系攻击时,消耗全部层数造成等量幻系反击伤害
中毒印记 回合结束扣 3% HP
棘刺印记 入场时失去 6% HP

特性系统

五支预设队伍(毒队、翼王队、狼王队、平衡狼王队、沙暴武队)中全部 24 种特性均已实现。

特性 持有精灵 效果简述
溶解扩散 千棘盔 水系技能命中 → 每携带 1 个毒系技能,敌方中毒 +1 层
蚀刻 裘卡 回合结束:敌方每 2 层中毒 → 转化为 1 层中毒印记
扩散侵蚀 琉璃水母 水系命中后,敌方中毒 +(当前层数×2)
下黑手 影狸 在场时,敌方换入精灵立刻获得 5 层中毒
向心力 声波缇塔 前两个有伤技能威力 +30(平坦加成)
壮胆 巨噬针鼹 队伍存在虫系精灵时,双攻 +50%
翼轴 帕帕斯卡 1 号位技能获得先手
悲悯 恶魔狼 每有 1 只力竭队友,双攻 +30%
渗透 棋绮后 使用武/地系技能后,永久攻防 +5%(无上限累积)
身经百练 海豹船长 己方每次应对,水/武技能威力 +20%/次(累积)
洁癖 翠顶夫人 换出时将全部 buff/debuff 传递给换入精灵
飓风 圣羽翼王 ①翼系队友携带相同技能时该技能获先手;②被击败时己方额外 -1 魔力
煤渣草 燃薪虫 在场时,全场烧伤回合结束增长(+1层)而非减半
变形活画 画间沉铁兽 对手每有 10% buff,己方攻击威力 +10%(累积)
目空 白金独角兽 非光系技能威力 +25%
绝对秩序 秩序鱿墨 受到非自身属性攻击时,伤害 -50%
暴食 翼龙 龙系技能获得先手
虚假宝箱 迷迷箱怪 力竭时,场上敌方攻防 +20%
专注力 音速犬 入场首回合,物攻技能威力 +100%
魔法增效 黑猫巫师 魔攻技能威力 +70%
诈死 卡瓦重 己方精灵倒下时,补回被扣的 1 格生命
嫁祸 朔夜伊芙 HP 穿越 75%/50%/25% 里程碑时,技能连击次数各 +2
特殊清洁场景 食尘短绒 回合结束:偷取敌方 1 层印记(优先正面),转移至己方
星地善良 小皮球 回合结束时,若当前己方精灵能量归 0,自动换入

注意: 上述大部分效果来自对游戏视频的观察分析,由于作者本人不擅长 PVP,部分细节(触发时机、数值精度)可能与实际游戏存在出入。如有发现偏差欢迎在 Issues 中指出。


个性系统说明 & 贡献征集

洛克王国世界的「个性」系统目前绝大部分未实现

当前版本仅实现了精灵的「性格(Nature)」(25 种命名性格,±10% 属性修正),而游戏中影响战斗的「个性」被动技能(类似于特性的第二层被动)仍缺失

🙋 诚邀有 PVP 经验的玩家参与贡献:

如果你熟悉某只精灵的个性效果,欢迎通过 Issues 或 PR 提供以下信息:

  • 个性名称 + 持有精灵名
  • 触发条件(什么时候触发)
  • 效果描述(具体数值)
  • 参考依据(对战截图 / 视频时间戳)

作者本人对 PVP 了解有限,很多效果都是通过观看视频脑测分析,难以保证准确性。社区贡献将极大地提升模拟器还原度。


爬虫

可选参数

参数 说明 默认值
--limit N 只爬前 N 只精灵(调试用) 0(全部)
--delay N 每次请求间隔下限(秒),实际为 delay ~ delay+1.5 随机值 1.5
--output path 输出 JSON 的路径 data/sprites.json
--check-update 增量更新模式

输出文件

文件 说明
data/sprites.json 完整精灵数据,嵌套 JSON
data/sprites.csv 扁平化 CSV,可用 Excel / pandas 打开
data/sprites.backup.json 每次爬取前自动备份的上一版

爬虫数据与战斗模拟器的同步关系

数据文件 爬虫是否更新 说明
data/sprites.json ✅ 每次爬取自动更新 精灵属性、可学技能列表
data/skills_all.csv ❌ 静态文件,爬虫不触碰 技能的威力 / 能耗;来自 NRC_SIM 手工维护

当前数据状态:

  • skills_all.csv 共收录 488 个技能,覆盖 roco-world 全部 487 个已知技能
  • 耗能、威力数值与 roco-world 完全一致,0 个差异

图鉴查看器

python viewer.py

终端显示类手机图鉴界面,支持翻页( / )、搜索(/)、退出(q)。


战斗模拟器

python battle.py

主菜单

========================================================
  洛克王国战斗模拟器
========================================================
  当前队伍列表(3 支):
     1. [预设] 预设毒队
     2. [预设] 预设翼王队
     3. [自定] 我的速攻队
========================================================
  1. 开始对战        (从列表选两支队伍)
  2. 新建队伍        (交互组队并保存)
  3. 管理队伍        (查看 / 删除 / 重命名 / 编辑)
  4. 批量模拟        (选两支队伍跑 N 场)
  5. 从图片导入队伍  (识别标准组队分享图)
  0. 返回
========================================================

开始对战

从名册选 A、B 两队,MCTS AI 操控并实时输出日志:

──────────────────────────────────────────  回合 3
  预设毒队: 裘卡      [##########]  302/302  能量: 8
  翼王队:   声波缇塔  [####......]  149/334  能量: 7  毒2
[A] 裘卡 使用 崩拳(物攻 武系 威力60)
  → 对 声波缇塔 造成 185 点伤害 [克制!] (HP: 334→149/334)

批量模拟

  批量模拟结果(100 场)
  预设毒队 胜:   83 场  (83.0%)
  预设翼王队 胜:  15 场  (15.0%)
  平局:          2 场  ( 2.0%)
  平均回合数: 97.6
  总耗时: 0.31s  (3.1ms/场)

从图片导入队伍

识别游戏内标准组队分享截图,自动提取精灵名和技能,存入名册。

将截图放入 import_images/ 目录后,选择识别方式:

方式 精度 安装
Claude Vision API ★★★★★ pip install anthropic + 配置 ANTHROPIC_API_KEY
rapidocr(本地) ★★★☆☆ pip install rapidocr-onnxruntime
easyocr(本地) ★★★★☆ pip install easyocr(需 PyTorch)

战斗引擎实现机制

机制 规则
伤害公式 (攻/防) × 0.9 × 技能威力 × 能力等级 × 本系加成(×1.5) × 克制倍率 × 天气加成
能力等级 (1 + 攻击提升 + 敌方防御降低) / (1 + 攻击降低 + 敌方防御提升)
属性克制 单弱/单抗=2x/0.5x;双弱=3x(非400%);双抗=0.25x;无免疫
性格修正 25 种命名性格,±10%,仅作用于物攻/物防/魔攻/魔防/速度(HP不受影响)
胜利条件 4 格生命制:击倒对方精灵 -1格,一方生命格归0则判负
烧伤 每回合 -2% × 层数 HP,层数减半衰减,归零消失
中毒 每回合 -3% × 层数 HP,层数不衰减
冻结 回合结束时若 HP < maxHP × 层数/12 则死亡
寄生 被寄生者每回合 -8% HP,寄生者在场时回复等量
应对 攻击 vs 防御/状态、防御 vs 状态 各触发对应额外效果
天气 雪天:全场 +2 冻结/回合;沙暴:地系技能能耗减半;雨天:水系威力 +50%
换人 主动换人 / 精灵倒下后自动切换到首位存活精灵
能量 汇合聚能 +5,技能各有消耗,不足时强制聚能
印记 队伍级正/负印记各 1 槽,换人不消失;12 种印记各有回合效果或触发效果
先手 有效速度 = 基础速度 × (1 + 先手修正) - 减速印记惩罚

项目结构

rocom-data/
├── rocom_scraper.py          爬虫主程序
├── viewer.py                 终端图鉴查看器
├── battle.py                 战斗模拟器主入口
├── train.py                  MCTS AI 批量训练
├── run.bat                   Windows 一键启动菜单
├── requirements.txt          依赖清单
│
├── data/
│   ├── sprites.json          精灵完整数据(爬虫输出)
│   ├── sprites.csv           精灵扁平化数据
│   ├── skills_all.csv        技能库(含威力数值)
│   ├── teams.json            队伍名册(自动生成)
│   ├── experience/           MCTS 经验数据库(每队一个 JSON)
│   └── strategies/           YAML 策略配置文件目录
│       └── _template.yaml    策略文件模板
│
├── import_images/            队伍分享截图放置目录
│
└── sim/                      战斗引擎
    ├── battle_engine.py      回合主循环
    ├── battle_state.py       战斗状态容器(含印记槽)
    ├── damage_calc.py        伤害公式
    ├── counter_system.py     应对系统
    ├── ability_engine.py     特性系统(24 种特性全实现)
    ├── mark_system.py        印记系统(12 种印记)
    ├── mcts.py               蒙特卡洛树搜索核心
    ├── mcts_agent.py         MCTS 智能体封装
    ├── experience_db.py      经验数据库
    ├── strategy.py           YAML 策略解析与权重应用
    ├── pokemon.py            精灵模型(含双属性、性格)
    ├── skill.py              技能数据模型
    ├── types.py              属性枚举 + 克制表
    ├── pokemon_db.py         精灵数据库
    ├── skill_db.py           技能数据库
    ├── team_builder.py       精灵构建
    ├── team_builder_interactive.py  交互式组队
    ├── team_roster.py        队伍名册持久化
    ├── team_image_parser.py  图片识别(Claude Vision API)
    └── team_image_parser_ocr.py     图片识别(本地 OCR)

免责声明

  • 本项目仅供个人学习使用,请勿高频请求 BWIKI,以免对服务器造成负担
  • 数据版权归 BWIKI 及洛克王国世界原作者所有,禁止商业使用
  • 战斗模拟结果仅供参考,与游戏内真实对局存在差异,请以游戏内实际表现为准
  • 使用本项目产生的一切后果由使用者自行承担

贡献

欢迎提 PR 或 Issue:

  • 修复战斗机制偏差
  • 补充精灵个性效果
  • 完善技能描述解析
  • 参与 v2.0 游戏画面识别功能开发

致谢

本项目由 AofeiLi-code 负责整体架构设计与需求规划,具体代码实现由 Claude(Anthropic)协助完成。

战斗引擎(sim/ 目录)基于 NRC_SIM,遵循 MIT License。

About

从洛克王国世界 BWIKI 爬取完整精灵图鉴数据,包含种族值、技能、特性、属性克制关系, 附带终端图鉴查看器和战斗模拟器(支持自由组队、队伍持久化、图片识别导入)。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Python 99.8%
  • Batchfile 0.2%