원클릭으로
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