收藏
0
0
分享
举报
·17 小时前发布·139次阅读

短短几天暴涨8.1万Star!我用爆火的REA逆向了Chrome

独立开发商业增长付费用户

相信大家对这个小恐龙并不陌生。

在谷歌浏览器 Chrome 里,断网、网页打不开时,页面上会出现一只像素小恐龙。按一下空格,它就开始奔跑;再按空格跳过仙人掌,撞上障碍就结束。它就是很多人在等网络恢复时玩过的Chrome 断网小游戏。

玩法只有几个动作,却经常让人忍不住再来一局。一开始还能慢慢找节奏,跑着跑着,仙人掌越来越快,刚跳过这一棵,下一棵又来了。

如果能自己调速度就好了,慢一点练手,快一点挑战,或者随时切回原来的自动加速,REA刚好解决了这个问题。

我把 REA 接进 UCloud 星图,让它查清原游戏的加速规则,再做一个带速度滑块的版本。最后拿到的,就是下面这个能直接用浏览器打开的小网页。

速度最低能拉到 2,最高能拉到 18。空格和按钮都能跳,撞上仙人掌后可以重开,也能暂停后继续。勾选“自动加速”,速度会从 6 开始逐渐增加。

下面从工具接入开始,看看这个调速版是怎样做出来的,以及运行以后有哪些变化。

REA 是什么?

REA 的全称是 Reverse Engineer Anything,是给 AI 编程助手使用的开源逆向分析工具。

逆向分析可以先理解成:从一个现成软件出发,查清某个功能背后怎样工作。小恐龙为什么会加速,计算器的百分号怎样参与运算,笔记的导出按钮怎样生成文件,都可以成为一个具体问题。

REA 提供读取程序、查找相关内容的工具。模型拿到这些内容以后,解释其中的规则,再根据需求写出采用这些规则的新版本。官网也展示了这类用法。

放到小恐龙里,分工就很清楚:星图接收任务、调用工具和生成文件;REA 返回游戏网页加载的程序;模型分析加速方式,再编写带速度控制的新游戏。

这次的网页版小恐龙,源自 Chromium 的恐龙游戏。它可以直接在浏览器里运行,加载的游戏程序保存在网页脚本中。

后面查到的速度、增量和停止条件,都来自这个页面实际加载的程序。调速版沿用其中的加速语句,恐龙画面和部分碰撞处理则重新实现。

第一步:在星图接入 REA,打开原游戏

使用 UCloud 的星图(AstraFlow)桌面客户端。左侧按工作区管理任务,中央用对话提出需求,输入区可以选择模型和本地工作区。选择“代码开发”模式,调用 REA 分析程序,再将小游戏文件保存到本地。

先在星图打开一个本地工作区,用来存放原游戏程序、生成的网页和检查结果。本次工作区叫 rea-test,后续几轮任务都在这里继续。

接入入口是星图的 MCP 服务管理。MCP 可以理解为客户端调用外部工具的连接方式,REA 通过它提供检查程序的工具。

启动命令为:

npx -y rea-agents@6.4.0 mcp

如果界面把命令和参数分开填写,命令填 npx,参数依次为 -y、rea-agents@6.4.0、mcp。保存以后,星图可以调用 REA 工具。REA 需要 Node.js 环境,浏览器使用 Google Chrome。

接下来打开供 REA 读取的独立 Chrome 窗口,里面加载原游戏。这个窗口需要开启调试入口,本次连接地址为 http://127.0.0.1:9222。

游戏网址和这个地址各有用途:前者告诉 REA 读取哪个游戏,后者指向这台电脑上运行游戏的浏览器。分析期间保留窗口,工具就可以继续访问页面。

回到星图的“代码开发”界面,选好本地工作区和模型,就可以在输入框里填写分析需求。左侧的 rea-test 工作区、下方的 Qwen 模型选择和待发送的提示词,都能在这一页看到。

准备环境与读取规则,可以合成一个任务交给星图。下面的需求按复现时的使用方式整理:

用 REA 查看 https://wayou.github.io/t-rex-runner 实际加载的游戏程序。

请准备可供 REA 连接的独立 Chrome 窗口,读取游戏脚本,找到加速相关代码。解释起始速度、每次增加多少、停止加速的条件,附上程序出处。先查规则。

星图完成工具调用后,REA 返回了网页加载的 index.js。这份程序包含游戏的速度设置、更新过程、跳跃和障碍处理,后面的分析从里面寻找对应内容。

原程序和分析结果会保存在工作区。生成新版本时可以接着使用这些内容,不需要重新说明游戏网址和已经查到的规则。

第二步:查清小恐龙怎样加速

原程序中的三个关键设置分别是:起始速度 6,每次增加 0.001,上限配置为 13。

设置数值
起始速度6
每次加速的增量0.001
停止加速的判断值13

真正执行加速的语句是:

if (this.currentSpeed < this.config.MAX_SPEED) {
    this.currentSpeed += this.config.ACCELERATION;
}

翻译成日常语言,就是先看当前速度是否低于设定值,低于就再增加一点。这段语句发生在没有碰撞的游戏更新中;撞上障碍,游戏进入结束状态。

速度的更新,其实是程序向前做一次计算。符合条件时,每次更新增加 0.001。它不是每秒的速度增量,累计增加多少还取决于进行了多少次计算。

因此,速度 6 经过一千次这样的更新,会增加到约 7;经过四千次,增加到约 10。程序不断执行,小幅增量积累起来,画面上的障碍就越来越快。

接近 13 以后,停止条件开始起作用。后续更新仍然可以继续运行游戏,但不再按同样的增量无限提高速度。

新版本将逻辑更新固定为每秒 60 次。按这个设定计算,在持续运行、没有碰撞的情况下,一秒累计增加的速度约为 0.06。画面渲染仍由浏览器安排,加速计算则按这个固定节奏推进。

第三步:生成调速版

继续在同一个任务里生成新游戏,文件名为 dino-demo.html。画面、控件和运行逻辑都放进一个网页文件,用 Chrome 打开就能运行。

星图会将生成的 HTML 直接写入本地工作区,任务回复中也会显示工具调用和“本轮文件更改”。生成文件和修改记录留在当前任务里,后面调整速度范围、按钮或画面时,可以接着在同一个聊天中提出需求。

需求可以这样发送:

根据刚才查到的规则,生成单文件小游戏 dino-demo.html。提供中文的开始、跳跃、暂停、重开按钮,空格也能跳,碰撞后结束。增加 2~18 的速度滑块,拖动时固定在选定速度;勾选自动加速时从 6 开始,采用原游戏的加速语句。每秒固定进行 60 次逻辑更新。打开检查,说明文件保存位置。

生成的页面分成三块:上方是游戏画面,中间是速度控制,下方是数值检查。游戏区下面还显示当前状态、速度和更新次数。

先拖动速度滑块。

滑块调到 12.5 后,继续运行,显示速度保持为 12.500,自动加速处于关闭状态。它改变的是游戏正在使用的速度,数值不会继续自行往上增加。

固定速度可以反复使用同一个档位。例如一直停在速度 8,玩家面对的是这一档位的移动节奏,可以连续尝试起跳时机。每次重开以后,固定模式会保留滑块值。

滑块最低为 2,最高为 18。数字表示游戏速度参数,不是“几倍速”。低速时,仙人掌缓缓靠近,留给起跳的时间更长;高速时,障碍移动明显加快。

手动模式可以选择超过 13 的数值。它与原来的自动加速分开:自动模式接近设定值后停止增加,手动模式则按照玩家选定的速度持续运行。

再切回自动加速。

勾选自动加速,速度回到 6,随后逐渐增长。速度数字和画面中的障碍移动同时变化,重开时也重新从 6 开始。

两种模式可以在同一个页面切换。固定速度用于保持一个节奏,自动模式则从较慢的开局逐渐提高速度;切换时,跳跃、暂停和重开仍然使用原来的按钮。

游戏运行时,按空格或点击跳跃按钮,小恐龙都会离开地面。开始后会先经过开局的空跑阶段,随后出现仙人掌。障碍靠近时起跳,落地以后才能再次跳跃。

键盘还支持上箭头跳跃、下箭头快速下落。快速下落会改变恐龙回到地面的过程,运行记录中也观察到了这个变化。程序保留了松键短跳:起跳后释放按键,满足条件时会收短腾空过程,所以跳跃不只是一个固定播放的动画。

开始、跳跃、碰撞和重开都做过实际检查。碰撞测试使用固定速度 8,不进行跳跃;仙人掌进入画面后不断向左移动,最后触发游戏结束。

结束后,页面显示当前速度和重开提示,跳跃与暂停按钮停止接受对应操作。回车和重开按钮都能重新开始,固定模式仍保留原来的速度。

暂停也会冻结游戏计算。点下暂停后,更新次数停住,过了一秒仍保持原值;点击继续,计数恢复增加,游戏接着运行。键盘的 P 键同样可以暂停。

页面上的状态会在“进行中”、“已暂停”、“游戏结束”之间切换,按钮文字也随之变化。暂停以后显示继续,碰撞结束以后显示重开,当前可以执行什么动作直接反映在操作区。

在 375 像素宽的模拟视口里,画布、按钮和速度控制都能排进页面。运行数值校验以后,表格没有把页面撑出横向滚动。

窄屏采用缩放画布的方式显示游戏,控件继续排列在下方。这里记录的是模拟视口里的排版,实体手机的触控和性能没有在这次运行中测试。

图形采用重新绘制的像素恐龙和仙人掌,没有加载原版精灵图。恐龙碰撞区域也做了近似处理,使用两个区域代替原来的六个区域,因此贴近障碍边缘时的判定不能视为与原版逐像素相同。

当前版本有仙人掌、跳跃、速度控制、暂停和重开,没有加入翼龙、下蹲、夜间模式及音效。自动加速沿用原语句,滑块、可见的暂停按钮和数值校验入口则是新增功能。

第四步:确认加速规则有没有用对

小游戏能玩以后,再检查它是否按原来的规则加速。

让星图分别运行原游戏和新游戏的加速代码,从速度 6 开始,比较几个位置的结果。直接计算即可,不用一直跳过仙人掌玩到那个进度。

新游戏下方有“运行数值校验”按钮,调用的是游戏正在使用的加速函数。它从速度 6 开始,排除碰撞干扰,计算到指定更新次数,再将结果显示成表格。

这一轮的任务可以这样发送:

实际运行 dino-demo.html 使用的加速函数,检查 0、1000、4000、10000 次无碰撞更新后的速度,保留三位小数。与原程序的加速语句分别计算后比较,显示实际输出;如果不同,查明原因后修正。

本次运行以后,页面显示的结果是:

无碰撞更新次数新游戏实际速度
06
10007
400010
1000013.001

四组数字一致,新游戏在这些位置的加速结果与原规则相同。最后的 13.001 来自原程序的判断顺序和小数计算误差,速度会略微超过 13。新游戏也保留了这个结果。

可以看到,REA确实很强大,分分钟分析出了小恐龙游戏的实现方式,并且按照我们的需求完美实现了一个进阶版。

小结

REA 让 AI 能顺着已有软件的程序,弄清一个功能是怎么做的,再做出符合新需求的版本。对小团队和个人来说,这可能带来更灵活的选择:保留常用功能,调整不顺手的操作,或者把几个工具里需要的功能组合起来,做成适合自己工作的小软件,软件定制也就有机会覆盖更多具体的需求。

如果这类能力继续成熟,一些过去因为用户少、预算低而没人专门开发的工具,也可能被做出来。REA 值得期待的影响,就在于降低理解和改造软件的门槛,让更多细小但真实的问题,有机会得到解决。

讨论 (0)

0/250

    目录

    关于作者

    心得体会

    AI产品运营 / 文科生AI独立开发者 / AI Agent应用落地/AI native&bulider ex百度(秒哒AI产品运营)

    Solo 独立开发者社区support@solo.xin
    关于社区SOLO.cc隐私政策用户协议商务合作友情链接订阅更新(RSS)投稿赞助

    © 2023 SOLO · 为独立开发者而生