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>
19 lines
1.7 KiB
JSON
19 lines
1.7 KiB
JSON
{
|
||
"title": "Simon 记忆",
|
||
"brief": "做一款经典 Simon(记忆复现)游戏。竖屏逻辑视口 390×844。\n- 屏幕中央 2×2 布局四个大彩色按钮:红、绿、蓝、黄(每个约 130×130 逻辑像素,留间隙)。\n- 游戏流程:每轮电脑播放一段【递增】的按钮序列——逐个点亮按钮(点亮=该按钮变亮/轻微放大,可用 getEngine().math.easing 缓动),每个点亮同时播放一个该颜色专属音高的音效 getEngine().audio.synth.synthSfx。\n- 播放完后轮到玩家:玩家依次点击按钮复现序列。点击时该按钮点亮+播放同样音效。\n- 复现正确一整轮:序列长度+1,进入下一轮(短暂停顿后电脑播放更长序列)。复现错误:播放失败音效+粒子,序列重置从头开始。\n- 用 ctx.random 生成每轮新追加的颜色;用 ctx.time 控制点亮节奏(如每个 500ms)。\n- 反馈:每次点亮/点击都有音效;答对一轮或答错都触发 getEngine().particles.spawnEmitter 粒子。\n- 画面:深色背景铺满 390×844;四个按钮暗态用较暗的本色、亮态用饱和本色。可在顶部单行文字显示当前轮数(非必须)。\n- 注意:开局电脑就要自动播放第一个按钮(含点亮+音效),不要停在等待态。",
|
||
"play_spec": {
|
||
"inputs": [
|
||
{ "t": "wait", "ms": 1300 },
|
||
{ "t": "tap", "x": 130, "y": 360 },
|
||
{ "t": "wait", "ms": 350 },
|
||
{ "t": "tap", "x": 260, "y": 360 },
|
||
{ "t": "wait", "ms": 350 },
|
||
{ "t": "tap", "x": 130, "y": 500 },
|
||
{ "t": "wait", "ms": 350 },
|
||
{ "t": "tap", "x": 260, "y": 500 },
|
||
{ "t": "wait", "ms": 350 }
|
||
],
|
||
"expectedEngineCallPrefixes": ["audio.synth", "particles."]
|
||
}
|
||
}
|