fix(saa): GAMEDEF_SYSTEM 加保真铁律 + breakout 异构 few-shot——修生成坍缩(bug#5)
根因:GAMEDEF_SYSTEM 仅内联 2 个 few-shot(躲避 + tap-targets 打地鼠)、 无 brief-fidelity 约束,模型对任何题面"挑最近的套"——动作类抄躲避、 点击类抄打地鼠,打砖块/贪吃蛇/射击全坍缩。 两处最小修(对齐根因 1+2): 1) 在三个参照前置【★保真铁律★】:参照仅示范结构与 rt 面用法、不是玩法清单; 必须按题面产对应实体/行为/规则(给打砖块/贪吃蛇/射击/跑酷范例); 严禁因参照是躲避/打地鼠/打砖块就把题面玩法坍缩成它们。 2) 内联【参照3·breakout】(挡板+球+砖墙+反弹消砖、清砖判胜、球落底判负), 源自过门金样 contracts/agent-loop/skeletons/breakout.json,结构精简对齐 rt 面, 与原 2 例并列、打破"只有躲避+打地鼠"偏置(三参照覆盖异构三形态)。 验证:① 三参照 JSON 均合法、顶层键齐(entities/components/behaviors/scenes/rules); ② 参照3 经 game-runtime createRuntime 真驱动跑通——砖墙24块/撞砖计分/消砖 remaining降/球落底 lose-latch/指针控板,全程零抛错;③ gd-archetypes.test 4/4 不回归; ④ aigc-server 离线编译通过(文本块转义合法)。 不重新生成游戏(重生验证由部署后另做)。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
ff8e52c30a
commit
9176abe923
@ -199,7 +199,16 @@ final class SaaPrompts {
|
||||
- **会输 + 胜负演出**: 游戏要真能输(掉命/超时/资源耗尽任一),胜/负时画面有明确变化或文案(别只停住);无天然失败态的(打地鼠/三消/接物)加限时/限回合终态(见硬约束 3)。
|
||||
- HUD/进展可见: 分数/剩余看得到; 前 30 秒能上手、有正反馈、看得到分数增长。
|
||||
|
||||
【参照(严格按此结构产 JSON, 但实现成题目要求的那款游戏; 这是个躲避类示例)】
|
||||
【★保真铁律(最高优先级,违反=失败)★】下面三个【参照】**仅示范 gameDefinition 的结构与 rt 面的正确用法,不是玩法清单**。
|
||||
- 你**必须按题面产出对应的实体/行为/规则**,不得用参照里的玩法替换题面玩法。例:
|
||||
· 打砖块=挡板+球+砖墙+反弹消砖,清完砖判胜、球落底判负;
|
||||
· 贪吃蛇=蛇身实体数组(挂状态实体)+食物+吃到变长(计入 rt.addScore)+撞墙/自碰判负;
|
||||
· 射击=飞机+发射子弹+敌机+击中清场,清完判胜、被撞判负;
|
||||
· 跑酷=持续向前+躲障碍/跳跃+距离/分数累积。
|
||||
- **严禁因为参照1是躲避、参照2是打地鼠、参照3是打砖块,就把题面要求的玩法坍缩成躲避/打地鼠/打砖块**。参照只借结构,玩法一律照题面来。
|
||||
- 三个参照覆盖三种异构形态(实时连续+spawn / 离散点击声明式 / 实时反弹+消除);题面若都不贴近,按本约定的结构与 rt 面自行组织对应玩法,别硬套最像的那个。
|
||||
|
||||
【参照1(严格按此结构产 JSON, 但实现成题目要求的那款游戏; 这是个躲避类示例)】
|
||||
{
|
||||
"components":[
|
||||
{"id":"bg","kind":"render","shape":"fill","color":"#101028"},
|
||||
@ -239,6 +248,28 @@ final class SaaPrompts {
|
||||
"scenes":[{"id":"main","entityRefs":["world","t0","t1","t2","t3","t4","t5"]}],
|
||||
"rules":[{"id":"win","condition":"rt.score >= 6","outcome":"win"}]
|
||||
}
|
||||
|
||||
【参照3(实时反弹+消除类:打砖块/弹球——挡板控球、撞墙反弹、命中砖块消砖计分,清完砖判胜、球落底判负;源自过门金样 breakout,结构精简对齐 rt 面)】
|
||||
{
|
||||
"components":[
|
||||
{"id":"bg","kind":"render","shape":"fill","color":"#0d1117"},
|
||||
{"id":"rpad","kind":"render","shape":"rect","color":"#4fc3f7","w":90,"h":16},
|
||||
{"id":"rball","kind":"render","shape":"circle","color":"#ffeb3b","r":9},
|
||||
{"id":"rbrick","kind":"render","shape":"rect","color":"#ff5252","w":52,"h":20}
|
||||
],
|
||||
"entities":[
|
||||
{"id":"world","transform":{"position":{"x":0,"y":0}},"components":["bg"]},
|
||||
{"id":"paddle","transform":{"position":{"x":195,"y":800}},"components":["rpad"]},
|
||||
{"id":"ball","transform":{"position":{"x":195,"y":760}},"vx":160,"vy":-300,"components":["rball"]}
|
||||
],
|
||||
"behaviors":[
|
||||
{"id":"spawnbricks","trigger":"init","code":"const cols=6, rows=4, bw=52, bh=20, gap=6; const totalW=cols*bw+(cols-1)*gap; const sx=(390-totalW)/2+bw/2; const sy=120; for(let r=0;r<rows;r++){ for(let c=0;c<cols;c++){ rt.spawn({x:sx+c*(bw+gap), y:sy+r*(bh+gap), tags:['brick'], components:['rbrick']}); } }"},
|
||||
{"id":"control","trigger":"update","code":"const p=rt.getEntity('paddle'); if(!p) return; if(rt.input.pointer.down) p.x=rt.input.pointer.x; if(rt.input.isDown('ArrowLeft')) p.x-=320*dt; if(rt.input.isDown('ArrowRight')) p.x+=320*dt; p.x=rt.clamp(p.x,45,345);"},
|
||||
{"id":"ballmove","trigger":"update","code":"const b=rt.getEntity('ball'), p=rt.getEntity('paddle'); if(!b||!p) return; b.x+=b.vx*dt; b.y+=b.vy*dt; if(b.x<9){ b.x=9; b.vx=Math.abs(b.vx); rt.fx.beep('wall'); } if(b.x>381){ b.x=381; b.vx=-Math.abs(b.vx); rt.fx.beep('wall'); } if(b.y<9){ b.y=9; b.vy=Math.abs(b.vy); } for(const br of rt.query('brick')){ if(rt.overlap({x:b.x,y:b.y,w:18,h:18},{x:br.x,y:br.y,w:52,h:20})){ b.vy=-b.vy; rt.destroy(br); rt.addScore(1); rt.fx.burst(br.x,br.y,'#ffeb3b'); rt.fx.beep('brick'); break; } } if(b.vy>0 && rt.overlap({x:b.x,y:b.y,w:18,h:18},{x:p.x,y:p.y,w:90,h:16})){ b.vy=-Math.abs(b.vy); b.vx+=(b.x-p.x)*2; rt.fx.beep('paddle'); } if(b.y>860){ rt.fx.burst(b.x,840,'#ff4444'); rt.fx.beep('lose'); rt.lose(); }"}
|
||||
],
|
||||
"scenes":[{"id":"main","entityRefs":["world","paddle","ball"]}],
|
||||
"rules":[{"id":"clear","condition":"rt.query('brick').length === 0","outcome":"win"}]
|
||||
}
|
||||
""";
|
||||
|
||||
// ============================================================================
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user