浏览器 / 交互案例 / 阅读约 16 分钟
恐龙游戏:为什么越跑越快?
使用 REA 分析源自 Chromium 的恐龙游戏,还原加速规则、添加速度控制,并测试浮点数边界情况。
本页内容
01. 拆解之前,先试一试
按“开始”,跳过障碍。把速度滑块从 3 调到 12,障碍会立即移动得更快。重新开启自动加速,观察数值从 6.000 慢慢上升。
先按“开始”,再按“跳跃”。调整滑块会切换到固定速度。
独立制作的教学游戏,只有加速规则来自已有分析记录。
一个可玩的实验,以及在五个更新次数检查点验证过的速度函数。
分析之前实验可在此直接运行。分析需要连接到智能体的 REA、Chrome,以及游戏的公开 HTTP 版本。尚未连接 REA 时,请先阅读安装指南。 配置 REA →
02. 连接到可供分析的版本
使用独立的 Chrome 调试配置打开 wayou 的公开 t-rex-runner。下方命令适用于 macOS;Windows 或 Linux 请使用 Chrome 可执行文件并传入相同参数。分析期间保持该浏览器和终端打开。
本教程分析 HTTP 网页,而非 chrome://dino。如果网页已变化,请保存实际读取的脚本并记录摘要,再与下方历史结果比较。
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" \
--remote-debugging-address=127.0.0.1 \
--remote-debugging-port=9222 \
--user-data-dir="$(mktemp -d /tmp/rea-dino.XXXXXX)" \
https://wayou.github.io/t-rex-runner/使用 REA 对 http://127.0.0.1:9222 执行 list_browser_targets。按 URL 选择 t-rex-runner 页面,再调用 inspect_web_page 并启用 include_script_sources。读取已加载的 index.js,查找初始速度、加速增量、更新条件和速度阈值。引用源码位置。暂时不要重建游戏。03. 弄清一次“更新”到底是什么
名为 ACCELERATION 的设置只是线索,不是完整解释。继续追踪它的使用位置:每次渲染都会执行,还是只在游戏进行中,或只在未发生碰撞时执行?让智能体给出周围的条件判断,避免结论只适用于正常流程。
记录中的版本初始速度为 6;当当前速度小于 13 且满足更新条件时,每次加 0.001。这不是“每秒加 0.001”。本站教学游戏每秒执行 60 次固定逻辑更新,绘制不依赖屏幕刷新率。
- 记录单次更新前后的数值。
- 查找增量操作周围的碰撞或游戏状态条件。
- 确认阈值判断发生在加法之前还是之后。
- 将帧时序与还原的算术规则分开记录。
04. 添加速度调节,同时保留原规则
做出最小的游戏,让规则可以被看见:一个简单角色、一个障碍、跳跃按钮和速度读数。滑块应切换到固定速度;启用自动模式时,应恢复记录中的初始值。
不要悄悄把条件判断改成将速度限制在 13。这个看似无害的整理会改变边界结果。首次实现应严格遵循原逻辑,再在单独模式中做有意调整。
创建独立的浏览器小游戏,提供开始/暂停、跳跃和重新开始。只复现记录中的速度更新规则。加入范围 2 到 18 的固定速度滑块,以及从 6 起步的自动模式。使用固定逻辑时间步,离开屏幕时暂停,支持键盘和触控。注明新绘图、碰撞和跳跃逻辑是教学代码。测试导入的速度函数,而不是另写一份副本。05. 分析多出来的 0.001
在无碰撞条件下反复运行速度函数。对比下方检查点,并在保存结果时保留未四舍五入的值。令人意外的最终数值正是这次练习的重点:比较发生在加法之前,而重复的浮点增量未必会精确落在十进制阈值上。
若更新 10,000 次后结果是 13.000,请检查循环中是否做了限幅或小数舍入。若结果随屏幕刷新率变化,请检查是否每渲染一帧就推进一次模拟。
从速度 6 开始,对实际加速函数分别执行 0、1000、4000、7000 和 10000 次更新。返回完整精度及三位小数显示。对比来源报告,解释差异,并明确执行的是本站替代实现还是原游戏。不要把读取源码当成原游戏运行测试。06. 对比已知结果
将这些结果作为明确的检查点。与它们一致,只能支持这一小段规则,不能证明与整个应用兼容。
| 更新次数 | 预期显示 | 回答的问题 |
|---|---|---|
| 0 | 6.000 | 初始值 |
| 1,000 | 7.000 | 每次更新的增量 |
| 4,000 | 10.000 | 累积结果 |
| 7,000 | 13.000 | 舍入可能掩盖边界 |
| 10,000 | 13.001 | 先比较,再相加 |
将两个文件保存在同一文件夹,用 Node.js 运行验证脚本,无需安装软件包。
node check-case-labs.mjs07. 到底验证了什么?
REA 报告包含对原始 HTTP 游戏的受控运行。本站仅把自己的速度模块与这些已记录检查点对比,没有重新进行原游戏分析。上方的画面、跳跃、碰撞和障碍间距均为新编写的教学代码;重建范围仅限加速规则。
来源: REA 的计算器与恐龙游戏证据 · 固定版本的游戏更新分支。教程、图示和浏览器实验均独立编写。