بنقرة واحدة
runner-game
Endless runner — auto-running player dodges obstacles and collects pickups while distance increases
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
Endless runner — auto-running player dodges obstacles and collects pickups while distance increases
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
Breakout/Arkanoid-style brick breaker with paddle, ball, bricks, lives, and required powerups
Mario-style 2D platformer with stomp/bump/ability/gate/combo mechanics
深度研究方法论 — 4 阶段结构化研究框架
TODO 一句话描述(给 LLM 看,soft dispatch 用)
Create a pull request after typecheck, targeted tests, branch, commit, and push are complete.
Word 文档 AI 助手 — 读取、编辑、生成、审阅 DOCX 文件
| name | runner-game |
| description | Endless runner — auto-running player dodges obstacles and collects pickups while distance increases |
| artifact_kind | game |
| subtype | runner |
| declared_verbs | [{"verb":"moveTo","selector":"distanceTraveled","success":{"op":"increase","path":"distanceTraveled"},"required":true},{"verb":"evade","selector":"obstaclesAvoided","success":{"op":"increase","path":"obstaclesAvoided"},"required":true},{"verb":"collect","selector":"pickupsCollected","success":{"op":"increase","path":"pickupsCollected"},"required":false},{"verb":"complete","selector":"distanceTraveled","success":{"op":"increase","path":"distanceTraveled"},"required":true},{"verb":"fail","selector":"gameOver","success":{"op":"truthy","path":"gameOver"},"required":false}] |
2D endless runner: auto-running character dodges obstacles, collects pickups, dies on collision. Distance is the score. No level progression — survival as long as possible.
Subtype identifier (subtype: runner) goes in __GAME_META__ and triggers the
RunnerChecker validation pipeline at
src/host/agent/runtime/game/runner/RunnerChecker.ts.
Genre conventions:
step() integrates runSpeed * frames
into distanceTraveled regardless of the input string.action (jump / slide / swap-lane) so generation and smoke tests
agree on the required input.gameOver: true.
HUD shows distance, pickups, optional best-distance.forwardAxis ("x" for horizontal runner, "y" for
vertical). No left/right input drives forward motion.jump = Space, slide = ArrowDown. Optional: laneLeft = ArrowLeft,
laneRight = ArrowRight.__GAME_META__ shape:
subtype: 'runner'autoRun: trueforwardAxis: 'x' (or 'y')runSpeed: <number> (units per frame; integrate every step)obstacles: [{ id, type, position, action }] — each entry mandatorypickups: [{ id, type, position, value }] — optional but recommendedsnapshot() MUST expose: { player: { x, y, vy }, distanceTraveled, obstaclesAvoided, pickupsCollected, gameOver, score, status }.progressPlan example:
[
{ "label": "auto-run", "input": "", "frames": 24, "metric": "distanceTraveled", "expect": "increase" },
{ "label": "jump dodge", "input": "Space", "frames": 12, "metric": "obstaclesAvoided", "expect": "increase" },
{ "label": "slide dodge", "input": "ArrowDown", "frames": 12, "metric": "obstaclesAvoided", "expect": "increase" }
]
player.x, distanceTraveled, obstaclesAvoided,
pickupsCollected, expect MUST be one of "increase" / "decrease" /
"change", never a numeric target. Boolean expects (e.g. gameOver: true)
are valid for terminal flags.Runner is the first genre with legitimate empty / "none" input in
progressPlan. The platformer validator currently rejects this because
platformer forward motion comes from ArrowRight presses; runner forward motion
comes from the time-step itself.
When generating a runner, declare the auto-run probe with input: "" (empty
string) — the validator should accept it for runner subtype because
autoRun: true in metadata makes forward motion implicit. If the validator
infrastructure rejects empty inputs uniformly, that's a gap to surface — runner
needs the validator to consult subtype before enforcing the "input must come
from controls" rule. Do not work around it by emitting bogus inputs like
"ArrowRight" for a game that ignores ArrowRight; that masks the architectural
gap and produces fake evidence.
runSmokeTest() must drive step() and prove:
step("", 24) → assert after.distanceTraveled > before.distanceTraveled.step("Space", 12) over a jump-action obstacle → assert
after.obstaclesAvoided > before.obstaclesAvoided.step("", N) past a pickup
→ assert after.pickupsCollected > before.pickupsCollected.after.gameOver === true.Coverage names returned by runSmokeTest().coverage:
coverage.mechanics = ["autoRun", "dodgeJump", "dodgeSlide", "collect"],
coverage.stateChanges = ["distanceTraveled", "obstaclesAvoided", "pickupsCollected", "gameOver"].
| Failure Code | Hint |
|---|---|
missing_runner_loop_metadata | Declare __GAME_META__.autoRun = true plus forwardAxis ("x" or "y") and runSpeed. step() must increment distanceTraveled even with empty input — forward motion is implicit from the time-step. |
missing_obstacle_metadata | Add __GAME_META__.obstacles = [{ id, type, position, action }] with at least one entry. The action field tells the player how to dodge (jump / slide / swap-lane). Hitting an unhandled obstacle should set gameOver: true. |
runner_no_distance_progression | Make step() unconditionally advance distanceTraveled by runSpeed * frames (or per-frame integration) regardless of input. runSmokeTest() must take a before snapshot, call step("", N) with empty input, take an after snapshot, and assert after.distanceTraveled > before.distanceTraveled. |
Other runner-specific repair hints:
player.x), refactor: forward speed should come from a runSpeed
constant integrated each frame, not from input handling. Input should only
control jump / slide / lane.step() early-returns on empty input. Remove that guard.obstaclesAvoided doesn't increment, check that the obstacle's action
field matches the input you're driving (Space for jump, ArrowDown for slide).Runner snapshots are expected to expose at least the following paths:
player.x, player.y, player.vydistanceTraveled (number, increases every step)obstaclesAvoided (number, increments on successful dodge)pickupsCollected (number)gameOver (boolean)score, status (e.g. 'running' | 'over')coverage.mechanics, coverage.stateChanges,
coverage.gameplayMechanics, coverage.mechanicsEvidencesrc/host/agent/runtime/game/runner/RunnerChecker.tssrc/host/agent/runtime/game/runner/repairCodes.tsdocs/audits/2026-05-07-game-acceptance-architecture.md §4.4 (runner column)