# Catch the Stars — actual prototype result

Implemented an original, dependency-free Catch the Stars game with arrow-key and visible touch controls, three lives, ten-point win, terminal-state freezing, and full restart to Ready. Start begins a fresh round after Restart. The canvas has an accessible name; score, lives, and status are real HTML text. Game code is imported only after clicking Load playable prototype.

## Integration

Import `src/components/GameDemo.astro` and render `<GameDemo />` once within the existing game-prototyping article. No props and no new canonical route. Parent owns article integration and its final page checks.

Download: `/resources/v04/game-prototyping/catch-the-stars-source.zip`. The ZIP contains offline HTML with original shapes/CSS/JavaScript and a README. The downloadable HTML is not exposed as an indexable standalone site route. The same engine and client generate the download and temporary browser-test page.

## First result and corrections

The first implementation is preserved in `first-output/`. All four initial implementation/test files remain byte-identical. Engine tests passed on the first run (9/9). The first browser invocation could not bind localhost in the sandbox; an authorized escalation enabled testing. The first browser assertion expected a miss at 3.1 seconds, before the first star had crossed the bottom boundary. The harness wait was extended by 200ms; no game implementation change was needed. `browser-failure.json` preserves that failure and `correction.diff` records the harness adjustment and later added right-touch/cancellation/reset checks.

## Validation

- Nine deterministic engine tests pass: initial state, movement bounds, scoring, ten-point win, third-miss loss, both terminal states, immediate terminal cutoff, deterministic spawning, and fresh objects.
- Fourteen browser checks pass across 1440×900 and 390×844. Actual keyboard controls move both directions. Actual mobile touch holds move left/right; release and touch cancellation clear input. Both viewports reach score, win, and loss states. Six repeated restarts and a restart while a key is held preserve only one animation chain and clear score, lives, objects, timer, and input.
- Terminal games have zero pending animation frames and cannot continue scoring or losing lives.
- Targeted TypeScript compilation passes.
- Eight actual initial/score/loss/win captures are saved under `public/resources/v04/game-prototyping/`; metadata is in `media.json`. All eight were visually inspected for readable text, complete controls, and clipping.

The browser harness uses an external test-only controlled clock and centered random star positions, without injecting score/life/game state. Those controls are absent from ordinary gameplay and the source ZIP. Screenshots cover the temporary extracted prototype; final article integration remains a parent check. Browser and temporary server were closed after testing.
