瀏覽器 / 互動案例 / 閱讀約 16 分鐘

恐龍游戲:為什麼越跑越快?

使用 REA 分析源自 Chromium 的恐龍游戲,還原加速規則、新增速度控制,並測試浮點數邊界情況。

本頁內容

01. 拆解之前,先試一試

按「開始」,跳過障礙。把速度滑塊從 3 調到 12,障礙會立即移動得更快。重新開啟自動加速,觀察數值從 6.000 慢慢上升。

速度實驗動手 / 觀察 / 解釋
速度 6.000已越過 0
熟悉的遊戲,值得研究的一條規則。

先按「開始」,再按「跳躍」。調整滑塊會切換到固定速度。

獨立製作的教學遊戲,只有加速規則來自已有分析紀錄。

你將做出什麼

一個可玩的實驗,以及在五個更新次數檢查點驗證過的速度函式。

分析之前

實驗可在此直接執行。分析需要連線到 AI 代理的 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 的設定只是線索,不是完整解釋。繼續追蹤它的使用位置:每次渲染都會執行,還是隻在遊戲進行中,或只在未發生碰撞時執行?讓 AI 代理給出周圍的條件判斷,避免結論只適用於正常流程。

紀錄中的版本初始速度為 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. 比較已知結果

將這些結果作為明確的檢查點。與它們一致,只能支持這一小段規則,不能證明與整個應用程式相容。

更新次數預期顯示回答的問題
06.000初始值
1,0007.000每次更新的增量
4,00010.000累積結果
7,00013.000捨入可能掩蓋邊界
10,00013.001先比較,再相加

將兩個檔案儲存在同一資料夾,用 Node.js 執行驗證指令碼,無需安裝套件。

終端機
node check-case-labs.mjs

07. 到底驗證了什麼?

REA 報告包含對原始 HTTP 遊戲的受控執行。本站僅把自己的速度模組與這些已紀錄檢查點比較,沒有重新進行原遊戲分析。上方的畫面、跳躍、碰撞和障礙間距均為新編寫的教學程式碼;重建範圍僅限加速規則。

檢視本站紀錄的數值測試結果 →

來源: REA 的計算機與恐龍游戲證據 · 固定版本的遊戲更新分支。教學、圖示和瀏覽器實驗均獨立編寫。

下一個實驗16 顆子彈怎麼知道你在哪? →

第一次使用這個工具? REA 是什麼? · 我們如何查核教學