S4: extinde suita cu gameplay bomberman + overworld + audio (24/24)
3 teste noi commitate (mutate din scratch in suita): - audio S1: beep._ctx 'running' dupa Incepe aventura (era NO_CTX) - overworld: mers cu tastatura (ArrowRight) + iesire blocata pana la final - arcade bomberman: bomba sparge cutie, BFS AI se apropie, respawn pastreaza progres Arbore AGENTS.md/CLAUDE.md/tests actualizat 21→24 (14 @regresie + 10 @campanie). Iteratia 2 COMPLETA (S1+S2+S3+S4). Board: TODOS.md S4 [x]. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
67
CLAUDE.md
67
CLAUDE.md
@@ -1,60 +1,23 @@
|
||||
# CLAUDE.md
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||
Ghid pentru Claude Code în acest repo.
|
||||
|
||||
## Ce este
|
||||
## Sursa de adevăr: arborele AGENTS.md
|
||||
|
||||
Generator de jocuri escape room: un singur fișier HTML (`escape-builder.html`), fără backend, fără build, fără dependențe. Același set de puzzle-uri se exportă în 5 stiluri de joc diferite (clasic/quiz, terminal retro, arcade pixel, story chat, point-and-click).
|
||||
Adevărul tehnic (arhitectură, reguli de editare, testare) trăiește în arborele `AGENTS.md`, nu aici.
|
||||
Înainte să editezi un path, citește lanțul DOX din rădăcină:
|
||||
|
||||
## Dezvoltare
|
||||
- [`AGENTS.md`](AGENTS.md) — root: ce e produsul, Quick Reference, Durable Rules (zero-dep, un singur
|
||||
fișier, backslash dublu, sentinel `__CFG__`, demo-uri generate, `libJS`/`SNIP` partajate, dispatch
|
||||
pe 6 motoare).
|
||||
- [`tests/AGENTS.md`](tests/AGENTS.md) — harness Playwright (fără `package.json` commitat, `npx`,
|
||||
tag-uri `@regresie`/`@campanie`, 24/24).
|
||||
- `scratch/AGENTS.md` — prototipuri & QA (gitignored).
|
||||
|
||||
Nu există build sau lint. Produsul (HTML files) e vanilla HTML/CSS/JS, zero-dependențe.
|
||||
Documente de conținut: `DESIGN.md` (design campanie), `TODOS.md` (backlog), `HANDOFF.md` (handoff sesiune),
|
||||
`README.md` (utilizator final).
|
||||
|
||||
```bash
|
||||
# Verificare: deschide direct în browser (merge de pe file://)
|
||||
# sau servește local:
|
||||
python3 -m http.server 8000
|
||||
```
|
||||
## Specific Claude Code
|
||||
|
||||
Testarea manuală: deschide `escape-builder.html`, schimbă "Stil joc" și verifică preview-ul live (iframe), apoi exportă și verifică jocul standalone. Testele automate → vezi `## Testing`.
|
||||
|
||||
## Arhitectură
|
||||
|
||||
Toată aplicația trăiește în `escape-builder.html`, organizată în secțiuni comentate (`stare`, `editor`, `preview`, `template-urile jocului exportat`):
|
||||
|
||||
- **Stare**: obiectul `state` (titlu, poveste, culoare, `style`, listă `puzzles`), persistat automat în `localStorage` sub cheia `escape-builder-v1`. Export/import ca JSON.
|
||||
- **Editor** (stânga): formularele scriu direct în `state` via `data-g`; orice modificare cheamă `onChange()` → persist + refresh preview cu debounce 400ms.
|
||||
- **Preview** (dreapta): `refreshPreview()` setează `iframe.srcdoc = gameHTML(cleanState())` — preview-ul este exact jocul exportat, jucabil.
|
||||
- **Generare joc**: `gameHTML(cfg)` face dispatch pe `cfg.style` către cele 5 motoare: `gameClassic`, `gameTerminal`, `gameArcade`, `gameChat`, `gamePoint`. Fiecare motor returnează un string HTML complet, standalone (jocul exportat merge offline).
|
||||
|
||||
Cod partajat între motoare (injectat în HTML-ul generat):
|
||||
- `libJS(cfg)`: `CFG` (config serializat), `norm` (normalizare răspuns: fără diacritice/majuscule, virgulă→punct), `checkAnswer`, `starsFor` (3/2/1 stele după încercări/indiciu), `finalWord` (literele puzzle-urilor formează cuvântul final), `beep` (WebAudio), `confetti`.
|
||||
- `SNIP.*`: fragmente de template partajate — `baseCss`, modal de întrebare (`modalCss/Html/Js`, folosit de arcade și point) și ecranul final (`finalCss/Html/Js`).
|
||||
|
||||
Tipuri de puzzle: `free` (răspuns liber), `tf` (adevărat/fals), `choice` (variante pe linii separate în `choices`, cea corectă prefixată cu `*`).
|
||||
|
||||
## Testing
|
||||
|
||||
Harness Playwright în `tests/smoke.mjs`. **Nu există `package.json` commitat** — produsul rămâne zero-dependențe. Instalare dev o singură dată:
|
||||
|
||||
```bash
|
||||
npm i -D @playwright/test && npx playwright install chromium
|
||||
```
|
||||
|
||||
Rulare (fără npm scripts — direct `npx`):
|
||||
|
||||
```bash
|
||||
npx playwright test tests/smoke.mjs --grep "@regresie" # regresie: 13 teste
|
||||
npx playwright test tests/smoke.mjs --grep "@campanie" # campanie E2E: 8 teste
|
||||
npx playwright test tests/smoke.mjs # suita completă: 21 teste
|
||||
```
|
||||
|
||||
**Status curent:** 21/21 trec (13 `@regresie` + 8 `@campanie`).
|
||||
|
||||
## Atenție la editare
|
||||
|
||||
- Motoarele de joc sunt template literals mari — backslash-urile din codul generat trebuie dublate (`\\u0300`, `\\n`), iar codul generat folosește `var`/`function` clasic intenționat.
|
||||
- O schimbare în `libJS`/`SNIP` afectează toate cele 5 motoare; verifică fiecare stil în preview.
|
||||
- `exemplu-*.html` sunt jocuri demo exportate din builder (câte unul per stil). Nu le edita manual — după modificări la motoare, regenerează-le prin exportul din builder.
|
||||
- `index.html` e doar pagina de landing care leagă builder-ul și demo-urile.
|
||||
- `node_modules/` (gitignored) e doar dev tooling Playwright. Produsul (fișierele HTML) rămâne zero-dependențe — merge offline de pe `file://`.
|
||||
- Regulile de mediu și modul non-interactiv (`claude -p`) sunt în `/workspace/CLAUDE.md` (părinte).
|
||||
- Skill relevant: `/dox` — bootstrap/update al acestui arbore `AGENTS.md`.
|
||||
|
||||
Reference in New Issue
Block a user