分层展示网格、碰撞、移动路径和爆炸传播的游戏引擎核心

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、快照兼容承诺和迁移工具