W-G1 生成核心:brief→便宜模型写 GameHostFactory→esbuild __GameBundle iife→P1 bootGameHost
装载→本机 Chrome+CDP 七门真玩取证;失败回喂错因重试。只消费冻结契约,零改 P1/P2。
实测(deepseek-v4-flash 最便宜档):Pong/Simon/打地鼠 三款【七门全过真玩】,
单款 ¥0.01–0.03(远低于 ¥0.15 L1 闸门)。最优模型:flash 打底 + 难档升 deepseek-v4-pro(Simon 0 重试 ¥0.06)。
关键:实证「能生成代码 ≠ 能玩」——一处 prompt 输入坐标契约写错(误称 x/y∈[0,1],实为逻辑像素)
让生成游戏能编译/渲染/动但点击全失灵;Pong 因自走动画假绿混过、Simon 被正确判否。
为此加装 G 门(确定性 A/B 对照,隔离自走动画假绿)+ 修 prompt 后三款真过。
- harness:games/_wg1-gen/_shared/{entry-bundle 模板,index 模板,play.cdp.cjs 七门,serve-and-play.sh}(复用 ref buildRefHostConfig + browser-evidence.cjs)
- worker:wg1/gen-worker/worker/{_client(代理旁路),prompt(生成上下文包),validate(静态门+node --check),cost(¥折算),run(§3 编排+重试门)}
- golden-path 自检:ref 工厂 5/6(F=0 菜单态正确)+ probe 工厂 7/7 → harness 无假绿
- game-runtime/package.json:加 ws(CDP 驱动 devDep)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
21 lines
1.7 KiB
JSON
21 lines
1.7 KiB
JSON
{
|
||
"title": "Pong 弹球",
|
||
"brief": "做一款经典 Pong 弹球游戏。竖屏逻辑视口 390×844。\n- 底部一块玩家挡板(水平移动),顶部一块电脑挡板(自动跟随球的 x,速度略慢于球,留出可玩性)。\n- 中间一个球,做斜向匀速运动;碰左右墙反弹,碰挡板反弹(反弹时根据击中挡板的位置微调水平速度)。\n- 球越过玩家挡板(掉到底部)或越过电脑挡板(飞出顶部)则该回合结束,球回到中心重新发球,并把对应一方的分数+1。\n- 球速保持中等:水平+竖直速度合起来大约每秒 300~420 逻辑像素,挡板不要太薄(厚度≥12),避免高速穿透。\n- 控制:玩家触摸屏幕任意位置,底部挡板朝触摸点的 x 平滑移动(每帧朝目标 x 逼近)。\n- 反馈:球每次反弹(撞墙或撞挡板)都触发一次 getEngine().particles.spawnEmitter 粒子爆发 + getEngine().audio.synth.synthSfx 音效。\n- 画面:深色背景铺满 390×844;挡板用亮色实心矩形,球用亮色实心圆;中线画一排虚线。可在顶部用单行文字显示比分(非必须)。",
|
||
"play_spec": {
|
||
"inputs": [
|
||
{ "t": "wait", "ms": 600 },
|
||
{ "t": "tap", "x": 100, "y": 740 },
|
||
{ "t": "wait", "ms": 450 },
|
||
{ "t": "tap", "x": 300, "y": 740 },
|
||
{ "t": "wait", "ms": 450 },
|
||
{ "t": "tap", "x": 195, "y": 740 },
|
||
{ "t": "wait", "ms": 450 },
|
||
{ "t": "tap", "x": 130, "y": 740 },
|
||
{ "t": "wait", "ms": 450 },
|
||
{ "t": "tap", "x": 270, "y": 740 },
|
||
{ "t": "wait", "ms": 400 }
|
||
],
|
||
"expectedEngineCallPrefixes": ["particles.", "audio.synth"]
|
||
}
|
||
}
|