Files
escape-builder/CLAUDE.md
Claude Agent a4b0ff4154 Campanie multi-stil — PR1 (T1-T8 + TD1-TD6)
Adauga al 6-lea stil de joc: campanie multi-stil care leaga puzzle-urile
in camere de stiluri diferite (clasic/terminal/arcade/chat/point in rotatie),
conectate prin coridoare cu usa, litera si stele.

Contract de montare (verificat la gate T1):
- gameCampaign: un <iframe srcdoc> per camera; camerele cheama parent.*
  pe un nivel (merge si pe file://); template per stil cu sentinel __CFG__
  injectat prin replace-functie (D1) + json.replace(/</g,'<') (D6)
- roomReady/roomError + timeout 4s -> skip cu 0 stele + cod eroare;
  idx detinut de parinte, accepta nextRoom doar de la contentWindow activ (D5)
- parent.beep in mod campanie (un singur AudioContext, D2)
- resume prin safeStore try/catch (D3) + cheie djb2 peste CFG embedat (D11)

Builder:
- selector de stil per puzzle ("Auto (stil)") + optiunea Campanie multi-stil
- normalizePuzzle() la load + import (sursa unica pt forma puzzle, D8)
- blocare export+preview la 0 puzzle-uri; persist() guarded (D12)
- letter normalizat [A-Za-z0-9] + esc la SVG point (D13)

Design (DESIGN.md): tokens --c-*, intro poster, coridor "usa ca erou",
chrome unica sursa de progres, 5 usi CSS/SVG (normal/stuck/crescendo),
mod camera per motor, buget vertical mobil, baseline a11y.

Tooling: tests/smoke.mjs (Playwright, zero-dependente prin npx), TODOS.md,
sectiune ## Testing in CLAUDE.md. Demo-uri regenerate + exemplu-campanie.html.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-13 08:34:57 +00:00

3.8 KiB

CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

Ce este

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).

Dezvoltare

Nu există build sau lint. Produsul (HTML files) e vanilla HTML/CSS/JS, zero-dependențe.

# Verificare: deschide direct în browser (merge de pe file://)
# sau servește local:
python3 -m http.server 8000

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. Instalare o singură dată:

npm install              # instalează @playwright/test (devDependency)
npx playwright install chromium

Rulare:

npm run test:regresie    # regresie — exemplu-*.html rezolvate până la final + edge cases
npm run test:campanie    # campanie E2E — rulează după ce integrator anunță gata
npm test                 # suita completă (regresie + campanie)

# sau direct:
npx playwright test tests/smoke.mjs --grep "@regresie"
npx playwright test tests/smoke.mjs

Baseline curent (pre-campanie): 13/13 @regresie trec. Testele @campanie sunt marcate skip — se activează după implementarea gameCampaign.

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.
  • package.json + node_modules/ sunt doar dev tooling (Playwright). Produsul (fișierele HTML) rămâne zero-dependențe — merge offline de pe file://.