بنقرة واحدة
breakout
Breakout/Arkanoid-style brick breaker with paddle, ball, bricks, lives, and required powerups
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
Breakout/Arkanoid-style brick breaker with paddle, ball, bricks, lives, and required powerups
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
Mario-style 2D platformer with stomp/bump/ability/gate/combo mechanics
深度研究方法论 — 4 阶段结构化研究框架
Endless runner — auto-running player dodges obstacles and collects pickups while distance increases
TODO 一句话描述(给 LLM 看,soft dispatch 用)
Create a pull request after typecheck, targeted tests, branch, commit, and push are complete.
Word 文档 AI 助手 — 读取、编辑、生成、审阅 DOCX 文件
| name | breakout |
| description | Breakout/Arkanoid-style brick breaker with paddle, ball, bricks, lives, and required powerups |
| artifact_kind | game |
| subtype | breakout |
| declared_verbs | [{"verb":"moveTo","selector":"paddleX","success":{"op":"change","path":"paddleX"},"required":true},{"verb":"traverse","selector":"ball.y","success":{"op":"change","path":"ball.y"},"required":true},{"verb":"defeat","selector":"brickCount","success":{"op":"decrease","path":"brickCount"},"required":true},{"verb":"collect","selector":"powerupsTriggered.length","success":{"op":"increase","path":"powerupsTriggered.length"},"required":true},{"verb":"complete","selector":"status","success":{"op":"matches","path":"status","pattern":"won|win|complete|cleared"},"required":true},{"verb":"fail","selector":"status","success":{"op":"matches","path":"status","pattern":"lost|lose|failed|gameover"},"required":true}] |
Breakout/Arkanoid-style 2D brick breaker. The player moves a paddle, launches a ball, bounces it off walls and the paddle, destroys bricks, triggers powerups, wins when bricks are cleared, and loses when lives run out.
Genre conventions:
paddleX or paddle.x.ball.x, ball.y, ball.vx, ball.vy, and/or ball.speed.wallBounceCount and paddleBounceCount.brickCount or bricksRemaining, and
increase score.wide, multi, slow, through, and
life must be declared, triggerable, and observable.Subtype identifier (subtype: breakout) goes in __GAME_META__ and triggers
the BreakoutChecker validation pipeline at
src/host/agent/runtime/game/breakout/BreakoutChecker.ts.
This section is build-time inlined into game prompt assembly so the SKILL.md stays a single-source-of-truth reference for breakout generation guidance.
__GAME_META__ with subtype: 'breakout'
or an arkanoid-compatible subtype/genre/type value.__GAME_TEST__ helper mutates state, snapshot() must already expose
brickCount, bricksRemaining, or bricks.length greater than 0.ball.x or ball.y.
Do not depend on __GAME_TEST__.start() or reset('launch') pre-setting an
already launched ball.snapshot() must expose paddle movement and ball motion state:
paddleX or paddle.x; ball.x, ball.y, and at least one of ball.vx,
ball.vy, ball.dx, ball.dy, or ball.speed.wallBounceCount and paddleBounceCount.brickCount or
bricksRemaining decreases, and score increases.reset('paddleMove'), reset('launch'), reset('wallBounce'),
reset('paddleBounce'), reset('brickHit'), reset('win'), and
reset('lose').breakoutScenarios probes with
{ name, before, after } for every deterministic scenario. Each probe must
be driven by live step()/physics, not by directly editing the after
snapshot.browserLaunchFromInitialLoad
or browserLaunchFromStart. Its before snapshot needs initial bricks and
its after snapshot needs changed ball coordinates after a browser Space
key event.reset('powerup:wide'): triggers wide; paddle.width or paddleWidth
increases, or the after snapshot records the wide powerup.reset('powerup:multi'): triggers multi; ballCount or balls.length
increases, or the after snapshot records the multi powerup.reset('powerup:slow'): triggers slow; ball.speed, ballSpeed, or
speed decreases, or the after snapshot records the slow powerup.reset('powerup:through'): triggers through; through,
ball.through, throughActive, powerups.through, or
activePowerups.through becomes truthy, or the after snapshot records the
through powerup.reset('powerup:life'): triggers life; lives, player.lives, or
state.lives increases, or the after snapshot records the life powerup.status match won, win, complete, or
cleared; lose evidence should make status match lost, lose,
failed, or gameover, or reduce lives to 0.requestAnimationFrame(loop) or an equivalent
browser loop before the script exits, and keep the canvas/game root focusable
so keyboard events reach the live controls.| Failure Code | Hint |
|---|---|
breakout 缺少 paddleX 可观测状态 | Expose paddleX or paddle.x from snapshot(). Wire ArrowLeft/ArrowRight or left/right input so reset('paddleMove') followed by live step() changes that value. |
breakout 缺少 ball 坐标/速度状态 | Expose ball.x, ball.y, and velocity/speed such as ball.vx, ball.vy, ball.dx, ball.dy, or ball.speed. Make Space launch move ball coordinates in both reset('launch') and the real initial browser state. |
breakout 缺少 wallBounceCount | Add wallBounceCount and increment it only when live ball-wall collision reverses direction. reset('wallBounce') should place the ball near a wall and prove wallBounceCount > before. |
breakout 缺少 paddleBounceCount | Add paddleBounceCount and increment it only when the ball hits the paddle. reset('paddleBounce') should place the ball above the paddle and prove the counter increases. |
breakout 缺少 brickCount/bricksRemaining 与 score | Expose brickCount or bricksRemaining plus score. reset('brickHit') should drive a real brick collision so brick count decreases or score increases. |
breakout 缺少 powerups | Add all five required powerups: wide, multi, slow, through, and life. Each needs its own quoted reset('powerup:<type>') scenario and a matching snapshot delta. |
breakout 缺少 deterministic reset scenario | Implement quoted reset ids for paddleMove, launch, wallBounce, paddleBounce, brickHit, win, lose, plus powerup:wide, powerup:multi, powerup:slow, powerup:through, and powerup:life. |
breakout runtime 初始首屏没有可打砖块 | Load a playable brick layout on the real initial screen. Do not create bricks only inside test-only reset scenarios. |
breakout runtime 缺少真实 Space 发球证据 | Normalize browser Space input from event.code === 'Space' or event.key === ' ' into the same launch action used by the live loop, focus the game root on load/click, and prove ball coordinates change from initial load. |
breakout runtime 缺少 powerup 触发证据 | Repair each powerup:<type> probe so wide increases paddle width, multi increases ball count, slow decreases ball speed, through sets a truthy through flag, and life increases lives. |
breakout runtime 缺少 win 证据 | Make reset('win') reach status: 'won', 'win', 'complete', or 'cleared' after clearing bricks. |
breakout runtime 缺少 lose 证据 | Make reset('lose') reach status: 'lost', 'lose', 'failed', or 'gameover', or set lives to 0 after a real miss/life-loss path. |
Other breakout-specific repair hints:
step() logic
used by the playable game.runSmokeTest().checks, also record
breakoutScenarios probes with real before/after snapshots. The checker
looks for named probes first for most breakout mechanics.snapshot(). Missing aliases are enough to
make a real mechanic invisible to validation.Breakout snapshots are expected to expose at least the following paths so declared verbs, deterministic scenarios, and runtime probes have stable selectors:
paddleX / paddle.x, plus paddle.width / paddleWidth for
wide.ball.x, ball.y, ball.vx, ball.vy, ball.dx,
ball.dy, ball.speed, ballSpeed, speed.balls, balls.length, ballCount, balls[0].x,
balls[0].y.wallBounceCount, paddleBounceCount.brickCount, bricksRemaining, bricks.length, score.lives, player.lives, state.lives, status, state,
mode, game.status, gameState, won, gameWon, levelComplete,
complete, victory, lost, gameOver, failed, player.dead.activePowerups, powerupsTriggered,
powerupsTriggered.length, through, ball.through, throughActive,
powerups.through, activePowerups.through.observations.breakoutScenarios or
observations.subtype.breakoutScenarios, each with name, before, and
after.coverage.mechanics,
coverage.stateChanges, coverage.risks, coverage.allLevelsReachable,
coverage.levelsPassed, coverage.totalLevels.src/host/agent/runtime/game/breakout/BreakoutChecker.tssrc/host/agent/runtime/game/breakout/BreakoutChecker.ts#repairGuidance