主力批 7/8 真可玩(Opus 对抗审计 0 假绿)、压测 match3 ✅;失败收敛:3 键盘款(2048/Tetris/Asteroids)挂宿主缺 keydown 桥=唯一真·L0 门面缺口(已 spawn_task 交 L0)、multiball/flappy/愤怒小鸟=driver-coverage(非模型)。spec 预判 CCD/文本HUD/网格/match/手势缺口全推翻(便宜 flash 自带 swept CCD/自写网格文本)。
- driver 库 1→6 型(tap-targets/flap-to-gap/seek-x/tap-pairs/key-cycle/paddle-intercept)+ drag 输入事件 + key() Arrow 修
- M3 视觉 player 当生产过滤器实证(与门 8/9 一致、抓显性空心)→ 门(地板)+M3(主观过滤)+创始人(人锚)三层互补
- 短板量化报告定稿 + 两 skill 沉淀(game-e2e §8 driver库/门承重/键盘缺口 · cheap-model §9 模型能力画像)
- 2 个 ultracode 对抗 workflow(审计10+诊断7 agents)抓 saolei 弱断言、纠 flappy 归因(driver 非模型)、定位宿主键盘根因
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
13 lines
2.7 KiB
JSON
13 lines
2.7 KiB
JSON
{
|
||
"title": "井字棋 Tic-Tac-Toe",
|
||
"brief": "做一款经典井字棋(三连棋)。竖屏逻辑视口 390×844。\n- 居中 3×3 棋盘:整体为正方形,左上角约 (30,255)、边长约 330(每格约 110×110);用亮色线条画网格。三列中心 x≈85/195/305,三行中心 y≈310/420/530。\n- 玩家执 X:点击任一【空】格落下 X(亮色、居中于该格)。落子后立即轮到 AI 执 O:用受控 random 在剩余空格中选一个落 O(简单 AI 即可,不必最优)。点击已占格无效(忽略)。\n- 胜负判定:任一行/列/对角线三格同色 = 该方获胜;九格落满且无三连 = 平局。\n- 顶部单行文本 HUD:对局中显示当前轮到谁(如 \"X 走\"/\"O 走\"),终局显示结果(\"X 胜\"/\"O 胜\"/\"平局\")。\n- 【终态契约·务必遵守】分出胜负或平局即进入终态:把 _forensicsView().state().phase 置为 'gameover' 并【驻留】——画面停在终态(可显示结果文案 + 「点击重玩」提示),但在玩家点击重玩之前 phase 必须恒为 'gameover',**绝不自动重开 / 不下一帧复位回 playing**(宿主每 500ms 轮询 phase 判结束,瞬时终态会被漏读)。**gameover 状态下对棋盘格/空白区的点击一律忽略,不得重置游戏**;仅点击明确的「重玩」按钮区域才允许重开。\n- 【可测性·务必导出状态】_forensicsView().state() 返回纯只读实时真值,除 phase 外额外导出:\n · result:null | 'X' | 'O' | 'draw'(对局中为 null)\n · moves:整数,已落子总数(开局必为 0,每落一子 +1)\n · board:长度 9 的数组,每元素 null|'X'|'O'(行优先,索引 0..8)\n · targets:长度 9 的数组,每元素 { x, y, idx, occupied } —— x/y 为该格中心的逻辑像素坐标(与画面一致)、idx 为 0..8、occupied 为该格是否已落子(布尔)。\n harness 依据 targets 自动点击空格真玩、依据 moves/phase 验证进展与终局,务必准确实时。\n- 反馈(juice):每次落子触发 getEngine().particles.spawnEmitter 粒子 + getEngine().audio.synth.synthSfx 音效;分出胜负时额外给一次明显反馈。\n- 画面:深色背景铺满 390×844;网格线 / X / O / 文字均用亮色实心绘制,X 与 O 视觉区分清晰。",
|
||
"play_spec": {
|
||
"driver": { "type": "tap-targets", "steps": 12, "stepMs": 350 },
|
||
"expectedEngineCallPrefixes": ["particles.", "audio.synth"],
|
||
"assertAfterPlay": [
|
||
{ "path": "moves", "op": "increased", "why": "适配性真玩(自动点空格)下落子→已落子数上升;点击失灵/棋盘没更新则不升" }
|
||
],
|
||
"expectLatch": true
|
||
}
|
||
}
|