分層展示網格、碰撞、移動路徑和爆炸傳播的遊戲引擎核心

OPEN GAME AI COMMONS · CORE TECHNOLOGY

KineticGrid Engine

動格引擎

確定性、無渲染器、可快照的網格動作遊戲核心。讓瀏覽器、伺服器、AI 與回放共享同一套規則。

0
執行時依賴
60 Hz
預設固定步長
JSON
版本化快照

從完整遊戲中提煉規則,而不是複製專案程式碼

KineticGrid 來自持續執行的《炸彈人大作戰》生產專案。它把地圖、實體、移動、碰撞、炸彈、爆炸、傷害、拾取、時間和同步重新組織為獨立的純邏輯核心。

核心不訪問 DOM、不建立 Canvas、不載入圖片,也不規定 WebSocket 協議。表現層、輸入、網路和賬號系統透過事件與快照接入,因此同一規則能在客戶端、伺服器、測試和 AI 訓練環境中執行。

實時檢視規則如何流動

下方棋盤是基於公開行為契約製作的網站視覺化:展示固定步長、移動、炸彈、火焰、磚塊破壞和事件流。核心實現只儲存在獨立本地工程中。

初始化規則視覺化…

0
邏輯幀
0
活動實體
0
炸彈 / 火焰
0
規則事件
事件流
等待第一個固定時間步

一個狀態源,多個適配面

命令向內流動,事件與快照向外流動。渲染器永遠不擁有規則狀態。

01

確定性優先

帶狀態隨機數、固定時間步和穩定命令順序,使問題可復現、比賽可回放。

02

狀態可序列化

實體採用資料組合,完整世界可寫入版本化 JSON 快照並確定性恢復。

03

能力按特性組合

穿磚、穿內牆等規則透過 traits 表達,外邊界始終保持不可穿越。

04

事件連線外圍

爆炸、傷害、拾取等事件驅動聲音、計分和特效,不反向汙染核心。

核心能力與契約

模組負責什麼可驗證契約
Grid瓦片、座標、邊界、實體特性碰撞內牆可穿,外邊界永遠鎖定
World實體、命令、炸彈、火焰、傷害、拾取唯一可變狀態所有者
SeededRandom地圖與玩法隨機序列同種子同序列,可恢復未來狀態
FixedStepRunner把真實幀間隔切成穩定邏輯步幀率變化不改變規則結果
Snapshot儲存、同步、回放與問題復現恢復後繼續執行結果一致
PresetBomber Battle 地圖與速度曲線專案預設值不汙染通用核心

十幾行程式碼建立可回放世界

核心採用標準 ESM。瀏覽器和 Node.js 使用同一個構建產物,執行時依賴為零。

  • world.step() 是唯一時間推進邊界
  • world.events 連線表現和業務系統
  • world.snapshot() 輸出完整版本化狀態
import {
  FixedStepRunner,
  createBomberBattleWorld
} from "@open-game-ai/kinetic-grid";

const { world, player } =
  createBomberBattleWorld({
    seed: "lesson-01",
    level: 4
  });

world.events.on("bombExploded",
  ({ cells }) => renderBlast(cells));

world.queueCommand({
  type: "bomb",
  entityId: player.id
});

new FixedStepRunner(world)
  .advance(1 / 60);

獨立可用,生產遷移保持漸進

新專案可以立即使用獨立包;現有《炸彈人大作戰》透過影子執行和回放對比逐層接入,避免一次性重寫。

  1. 對映地圖先用只讀介面卡把現有網格對映到 Grid。
  2. 並行判定舊碰撞與 KineticGrid 同時執行,測試差異而不改變線上結果。
  3. 遷移單人先接入無協議相容負擔的離線闖關模擬。
  4. 橋接快照把版本化世界快照封裝進現有網路訊息。
  5. 切換權威主機回放一致後遷移多人主機判定並移除舊分支。
10 / 10首版核心契約測試

覆蓋確定性隨機、出生安全區、邊界鎖定、穿牆特性、磚塊傳播、連鎖爆炸、固定時間步和快照恢復續跑。

從可復現核心走向伺服器權威平臺

0.1核心世界、爆炸、快照、固定時間步
0.2導航、危險區分析、可插拔系統排程
0.3增量快照、輸入日誌、確定性回放檔案
0.4伺服器權威、客戶端預測與校正示例
1.0穩定 API、快照相容承諾和遷移工具