# CLAUDE.md This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. ## Running the Game No bundler required. Serve with any local HTTP server and open `http://localhost:8080`: ```bash python3 -m http.server 8080 # or npx serve . ``` ## Architecture ### Entry Point & Scene Flow `index.html` loads `src/main.js` as an ES6 module. Phaser is loaded via CDN (no bundler). Scene flow: 1. `MainMenu` — title screen, starts game 2. `GameManager` — reads `config/game.json`, randomly selects N mini-games for the current level, sequences through them, and manages global state (lives, current level) 3. Each mini-game scene — runs its level, then signals completion or failure back to `GameManager` ### Mini-Game Contract Each mini-game is a self-contained Phaser `Scene` exported from its subdirectory. Every mini-game must implement the same interface so `GameManager` can plug it in without knowing its internals: - Accept a `onComplete` and `onFail` callback (passed via Phaser scene data or events) - Emit/call `onComplete` when the level is beaten; `onFail` when a life is lost To add a new mini-game: create a subdirectory under `src/games/`, implement the Scene contract, and register it in `config/game.json`. ### Directory Structure ``` index.html config/ game.json # level-to-game-count mapping, lives, active game pool src/ main.js # Phaser game init, registers all scenes scenes/ MainMenu.js GameManager.js # sequences mini-games, tracks lives/level games/ colorado-defense/ ColoradoDefense.js config.json code-bug-invaders/ CodeBugInvaders.js config.json dot-dude/ DotDude.js config.json smash-out/ SmashOut.js config.json ``` ### Configuration - `config/game.json` — top-level settings: number of games per level, lives count, which games are in the pool - `src/games//config.json` — per-game tuning: speeds, enemy counts, timing, etc. ## Tech Stack & Constraints - **Phaser 3.90** — loaded via CDN, not npm - **Vanilla JS ES6 modules** — `import`/`export` only, no webpack/Vite/bundler - **Canvas:** 1600×900 with `Phaser.Scale.FIT` for responsive scaling - **Graphics:** Vector graphics only during initial development (no sprite sheets yet) - **Controls:** Arrow keys + `A` to fire for all games; mouse for aiming in Colorado Defense only - **Lives:** 3 lives global; game over on third loss - **Level 1:** 3 randomly selected games; **Level 2:** 4 randomly selected games