用途:为 Steam Deck Randomizer 系统批量生成每晚可玩的多人小游戏,提供 Claude 必须遵守的编码规则与架构约束,目标是让每个生成游戏可编译、可运行,并适合 2-5 名玩家在 Steam Deck 上游玩。
主要能力与约束:游戏必须为多人(2-5 人),不支持单人;必须同时支持手柄和键盘;必须扩展共享引擎(@sdr/engine 负责 Phaser 初始化与生命周期、输入读取、素材加载、Colyseus 连接与状态同步、HUD、大厅),不得自行重写渲染、输入或网络层;必须使用 bitECS 管理实体;每个游戏限定两个文件,一个客户端场景文件 client/game.ts 和一个服务端房间文件 server/room.ts,另配 assets.json 与 metadata.json;必须有明确胜负条件与 2-5 分钟回合;只能使用提供目录中的素材,禁止外部 URL;必须与帧率无关(使用 delta time);目标分辨率 1280x800;需优雅处理中途加入与离开。
使用方式:客户端场景继承 BaseScene,按 SoA 格式定义组件,用 query() 与 observe/onAdd/onRemove 编写系统,每帧只调用一次 inputManager.getState(),并实现 checkWinCondition。服务端房间实现 GeneratedRoomLogic,通过 state.setCustom/getCustom、setPlayerCustom/getPlayerCustom 存取游戏数据,服务端为权威方,负责位置、分数、阶段、胜负、道具与伤害判定;客户端只负责读取输入、发送输入、渲染与 UI。网络消息包括 input、action、ready 及 game:start、game:event、game:win。
适用场景与限制:适用于随机主题驱动的短回合多人小游戏生成。注意 bitECS 0.4 中 addComponent 签名为 addComponent(world, eid, Component),无 defineQuery,实体生命周期用 observe;Phaser 对象存于 Map 而非 ECS 组件;服务端不得假定玩家 schema 含 x、y、score 字段;单局素材总数需少于 20。其余细节暂未提供。