Commit Graph

23 Commits

Author SHA1 Message Date
Dabit
77071a52ff feat(02-02): implement state machine, scoring, match-end, mode/difficulty selection
- Added mode/difficulty/restart key handlers to Input._handleKeyDown
- Rewrote GameLoop.main() with full state machine (modeSelect, diffSelect, playing, scored, gameover)
- Added score detection in GameLoop (ball exits left/right edge)
- Added 1s pause after score then auto-serve
- Added match-end check (first to 7 wins) with winner overlay
- Added center divider line and real-time score display
- Renders both paddles during gameplay
- Removed Physics out-of-bounds auto-serve (GameLoop now owns scoring)
- Removed Phase 1 debug speed display
- Added pauseTime field to GameLoop
2026-03-10 21:10:08 +01:00
Dabit
836cb01ec8 docs(02-01): complete paddle2 and AI opponent plan
- Create 02-01-SUMMARY.md with task commits, decisions, and dependency graph
- Update STATE.md: position at 02-02, add AI/difficulty decisions to context
- Update ROADMAP.md: Phase 2 in progress (1/2 plans)
- Mark REQUIREMENTS.md complete: CORE-08, AI-01, AI-02, AI-03, AI-04

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-10 21:08:12 +01:00
Dabit
398bc4a20e feat(02-01): add AI module and extend Physics for paddle2 movement and collision
- Add AI object with init(), update(), _predictBallY() methods
- AI uses predictive ray-cast with wall bounce simulation to intercept ball
- AI respects difficulty config (speed, reactionDelay, errorMargin) from GameConfig
- Add Physics._checkPaddle2Collision() with 5-zone deflection, ball goes LEFT
- Extend Physics.update() with paddle2 movement branch (2p/ai modes)
- Add AI.init() to initialization block
2026-03-10 21:06:07 +01:00
Dabit
a2f0bc391b feat(02-01): extend GameConfig, GameState, and Input for two-player support
- Add WIN_SCORE, AI_EASY, AI_MEDIUM, AI_HARD to GameConfig
- Add paddle2, score1, score2, mode, difficulty, gameState, winner to GameState
- Replace anonymous Input handlers with named refs + cleanup() method
- Add Input.getVerticalInput2() for ArrowUp/ArrowDown keys
- Position paddle2 on right side in Physics.init()
- Update Physics.onResize() to call init() for full repositioning
2026-03-10 21:05:13 +01:00
Dabit
8029a383e3 docs(02-core-gameplay): create phase 2 plan
Two-wave plan for Core Gameplay phase: paddle2 + AI system (wave 1),
then game state machine + scoring + rendering (wave 2).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-10 21:01:21 +01:00
Dabit
9905b25d63 docs(phase-2): add validation strategy 2026-03-10 20:55:10 +01:00
Dabit
2cd0462a46 docs(phase-02): research core gameplay — Player 2 control, AI opponent, scoring system
Documented standard stack (vanilla JS, HTML5 Canvas), architecture patterns (extend Physics for paddle2, add AI module, score detection at GameLoop level), common pitfalls (tunneling, AI balance, input lag, memory leaks), and validation architecture for Phase 2 requirements. Verified with locked decisions from CONTEXT.md and prior phase research. Ready for planning.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-10 20:54:02 +01:00
Dabit
687fa0d43d docs(state): record phase 2 context session 2026-03-10 20:50:52 +01:00
Dabit
038b4ba9c3 docs(02): capture phase context 2026-03-10 20:50:44 +01:00
Dabit
5de4c6e9c1 docs(phase-01): complete phase execution 2026-03-10 20:41:30 +01:00
Dabit
ae98af98df docs(01-02): complete ball physics plan — Phase 1 fully playable
- Add 01-02-SUMMARY.md documenting physics implementation, GameConfig, zone angles, and Phase 2 extension notes
- Update STATE.md: Phase 1 complete (2/2 plans), add decisions 8-10 for zone angles/GameConfig/vx-vy decomposition
- Update ROADMAP.md: Phase 1 progress shows 2/2 plans complete
- Mark CORE-01, CORE-02, CORE-03, CORE-04 complete in REQUIREMENTS.md

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-10 14:53:23 +01:00
Dabit
46b8f7bcc7 feat(01-02): add ball physics — movement, wall bounce, zone deflection, and GameConfig
- Add GameConfig with initialBallSpeed (220px/s), speedIncrement (18px/s), paddleSpeed (400px/s)
- Add Physics.serveBall(): centers ball, sets random angle (-45 to +45 deg), random left/right dir
- Replace Physics.update() skeleton with full ball movement and wall bounce logic
- Add Physics._checkPaddleCollision() with 5-zone angle deflection and speed increment per hit
- Ball exits left/right bounds → immediate re-serve from center
- Ball pushed out of paddle on collision to prevent double-hit next frame
- Add on-canvas speed debug display (Phase 1 verification aid)
2026-03-10 14:50:41 +01:00
Dabit
8625d8ed5f docs(01-01): complete HTML scaffold plan — HiDPI canvas, game loop, Player 1 input
- Created 01-01-SUMMARY.md documenting objects built, decisions, patterns
- Updated STATE.md: position advanced to plan 2/2 in Phase 1
- Updated ROADMAP.md: Phase 1 plan 1/2 complete (in progress)
- Marked CORE-07 and VFX-05 requirements as complete in REQUIREMENTS.md
2026-03-10 14:48:47 +01:00
Dabit
e43b82b4cb feat(01-01): HTML scaffold with HiDPI canvas, Renderer, and full-window layout
- Created index.html with valid HTML5 structure and black full-window canvas
- Renderer object with devicePixelRatio-aware resize() using logical vs bitmap coords
- CSS enforces overflow:hidden with no scrollbars
- Minimum 4:3 aspect ratio enforcement in resize logic
- window.addEventListener('resize') handler for live canvas rescaling
2026-03-10 14:46:17 +01:00
Dabit
558fe20271 docs(01-foundation): create phase plan 2026-03-10 14:42:41 +01:00
Dabit
23f9c15213 docs(phase-1): add validation strategy 2026-03-10 14:38:44 +01:00
Dabit
11dd79425e docs(01-foundation): research phase domain
Investigate HTML5 Canvas game loop, HiDPI rendering, keyboard input handling, ball physics, and collision detection patterns for Phase 1 Foundation. Document standard stack (vanilla JS + requestAnimationFrame + delta-time physics), architecture patterns (game loop, HiDPI scaling, responsive canvas, input state tracking, AABB collision, physics updates), common pitfalls (tunneling, frame-rate dependency, blur on HiDPI, input lag, aspect ratio bugs, floating point drift), and validation approach (manual visual testing on Retina/120Hz displays).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-10 14:37:37 +01:00
Dabit
ad0443ea2b docs(01): capture phase context 2026-03-10 14:33:38 +01:00
Dabit
43ee1ae9aa docs: create roadmap (5 phases) 2026-03-10 14:26:16 +01:00
Dabit
b02acb9f7f docs: define v1 requirements 2026-03-10 14:23:38 +01:00
Dabit
28f86d781c docs: complete project research synthesis
Synthesized 4 parallel research efforts into comprehensive SUMMARY.md:
- STACK.md: Vanilla Canvas 2D, fixed timestep, Web Audio, no dependencies
- FEATURES.md: MVP features + v1.x enhancements + defer list
- ARCHITECTURE.md: Game loop + state machine + entity patterns, 10-phase build order
- PITFALLS.md: 8 critical pitfalls with prevention strategies

Key recommendations:
- Use fixed timestep accumulator (60 Hz physics, variable rendering)
- Implement 10 phases from game loop foundation to cross-browser testing
- Address critical pitfalls early (tunneling, timing, DPI, autoplay, AI, power-ups, lag, memory)
- MVP ships with core Pong + AI + menus + basic polish
- v1.x adds particles, trails, power-ups, arenas

All research backed by official sources (MDN, web.dev, Chrome docs) and established patterns.
Confidence: HIGH. Ready for requirements definition.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-10 14:18:11 +01:00
Dabit
7035b20ac9 chore: add project config 2026-03-10 14:11:12 +01:00
Dabit
b7cfe5f60d docs: initialize project 2026-03-10 14:09:24 +01:00