瀏覽器 / 互動案例 / 閱讀約 16 分鐘
恐龍游戲:為什麼越跑越快?
使用 REA 分析源自 Chromium 的恐龍游戲,還原加速規則、新增速度控制,並測試浮點數邊界情況。
本頁內容
01. 拆解之前,先試一試
按「開始」,跳過障礙。把速度滑塊從 3 調到 12,障礙會立即移動得更快。重新開啟自動加速,觀察數值從 6.000 慢慢上升。
先按「開始」,再按「跳躍」。調整滑塊會切換到固定速度。
獨立製作的教學遊戲,只有加速規則來自已有分析紀錄。
一個可玩的實驗,以及在五個更新次數檢查點驗證過的速度函式。
分析之前實驗可在此直接執行。分析需要連線到 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. 比較已知結果
將這些結果作為明確的檢查點。與它們一致,只能支持這一小段規則,不能證明與整個應用程式相容。
| 更新次數 | 預期顯示 | 回答的問題 |
|---|---|---|
| 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 的計算機與恐龍游戲證據 · 固定版本的遊戲更新分支。教學、圖示和瀏覽器實驗均獨立編寫。