54 lines
2.6 KiB
Markdown
54 lines
2.6 KiB
Markdown
# AGENTS.md
|
||
|
||
Repo de práctica: clon de Pac-Man (Vanilla JS + Canvas) usado para aprender
|
||
Spec Driven Development. No hay build, no hay tests, no hay linter.
|
||
|
||
## Stack
|
||
- HTML + CSS + Vanilla JS, sin dependencias ni package.json.
|
||
- Todo se ejecuta desde `src/index.html`. Se puede abrir directamente
|
||
en el navegador (`file://`) — no usa módulos ES ni fetch.
|
||
|
||
## Cómo correrlo
|
||
- Abrir `src/index.html` en un navegador, o servir la carpeta `src/` con
|
||
cualquier servidor estático (`python3 -m http.server` desde `src/`).
|
||
- Controles: flechas del teclado. Botón Start en el overlay.
|
||
|
||
## Estructura de `src/`
|
||
- `index.html` — canvas `#game`, overlay `#overlay`, y carga los scripts
|
||
en este orden estricto (es importante):
|
||
1. `js/maze.js` — expone `window.MAZE`, `TUNNEL_ROW`, `PACMAN_START`, `GHOST_STARTS`
|
||
2. `js/game.js` — expone `window.createGame`, `window.update`, `window.DIRS`
|
||
3. `js/render.js` — expone `window.draw`
|
||
4. `js/main.js` — bucle, teclado, overlays (lee los globales de los anteriores)
|
||
- Los scripts se comunican por `window.*` (no por imports). No convertir
|
||
a módulos ES sin refactorizar las 4 capas.
|
||
- `MAZE` (en `maze.js`) es la matriz prístina del laberinto (28×31).
|
||
`createGame()` la clava con `.map(row => row.slice())` por partida.
|
||
No mutar `MAZE` directamente.
|
||
|
||
## Convenciones de código
|
||
- Los archivos existentes usan comillas simples y espacios dentro de los
|
||
paréntesis (`function ( x )`, `'left'`). Mantener ese estilo al editar.
|
||
- Los archivos JS sí llevan comentarios explicativos por sección
|
||
(a diferencia de la regla global por defecto). No quitarlos al editar
|
||
a menos que el usuario lo pida.
|
||
- El render dibuja a `TILE = 20` px sobre el canvas de 560×620.
|
||
Cambiar `TILE` rompe el layout (CSS `#game-wrap` está dimensionado
|
||
a 560×620).
|
||
|
||
## Flujo de trabajo: Spec Driven Development
|
||
- Este proyecto existe para practicar SDD. Antes de añadir funcionalidad
|
||
usar el skill `.agents/skills/spec` (`/spec`) y guardar el resultado
|
||
en `specs/`. Para implementar a partir de un spec ya escrito, usar
|
||
`.agents/skills/spec-impl` (`/spec-impl`).
|
||
- `specs/` aún no existe; crearlo al primer spec.
|
||
- El template vive en `.agents/skills/spec/template.md`.
|
||
|
||
## Lo que NO hacer
|
||
- No añadir `package.json`, bundler, framework, ni dependencias.
|
||
- No convertir los `<script>` a módulos ES sin refactorizar — el orden
|
||
de carga y los globales en `window` son parte del diseño actual.
|
||
- No introducir tests automatizados, linter ni CI sin que el usuario
|
||
lo pida: el repo está deliberadamente vacío de tooling.
|
||
- No correr `npm install` ni similares — no hay nada que instalar.
|