# Hockey Game Design Specification ## 1. Game Overview A top-down autonomous hockey simulation where the user observes two teams playing. The game features 6v6 teams (1 goalie, 2 defenders, 3 forwards) plus 1 referee. The match duration is 10 minutes with goals, resets, and scoring. ## 2. Technical Stack - **Language**: Go - **Graphics Engine**: Ebitengine (2D rendering) - **Physics**: Simple 2D collision detection and response - **AI**: Steering Behaviors combined with tactical zone management ## 3. Game Rules & Setup - **Team Composition**: 6v6 (1 goalie, 2 defenders, 3 forwards) per team, plus 1 referee - **Match Duration**: 10 minutes - **Objective**: Score more goals than the opponent - **Reset**: After each goal, players and puck reset to starting positions - **Scoring**: Goals scored when puck enters opponent's goal area ## 4. Architecture ### 4.1 Simulation Engine - **World/Game State**: Manages all entities and game state - **Physics**: Handles collisions, bounces, and movement - **Game Timer**: Tracks match time and game state ### 4.2 Entities - **Puck**: Position, velocity, friction - **Player**: Role, team, steering behavior - **Referee**: Follows puck with larger arrival radius ### 4.3 AI System - **Zone Manager**: Defines defensive, middle, and attack zones - **Steering Logic**: Weighted sum of vectors (Seek, Separation, Arrival, Avoidance) - **Role-based Behaviors**: Specific AI for each player role ### 4.4 Rendering - Ebitengine-based 2D rendering of the rink, players, and puck ## 5. File Structure ``` cmd/game/main.go internal/game/engine.go internal/game/world.go internal/game/timer.go internal/entities/player.go internal/entities/puck.go internal/entities/referee.go internal/ai/steering.go internal/ai/zones.go internal/ai/brain.go internal/physics/collisions.go internal/render/renderer.go ``` ## 6. Detailed Logic ### 6.1 Game Loop 1. AI Update 2. Physics Update 3. Game State Update (goals, timer) 4. Render ### 6.2 Steering Behaviors - **Seek**: Calculate vector towards target - **Separation**: Avoid nearby teammates - **Arrival**: Slow down as target is reached - **Avoidance**: Prevent sticking to boards - **Weighted Sum**: Combine behaviors with tactical zone weights ### 6.3 Role-based AI #### Forwards - Aggressive Seek(Puck) in attack zone - Return to home zone if puck is far - Use Support behavior to create passing options #### Defenders - High Separation(Opponents) - Seek(Puck) in defense/middle zones - Use Support behavior to coordinate attacks and transitions #### Goalie - Restricted to goal area - Seek(Puck) primarily on X-axis - Maintain position in goal area #### Referee - Gentle Seek(Puck) to stay nearby - Larger arrival radius than players ### 6.4 Puck Interaction - **Possession**: When within radius R - **Shooting**: Triggered by probability or position - **Passing**: A player with the puck can pass to a teammate if they are in a favorable position (closer to the opponent's goal and not heavily blocked). A pass is a high-velocity impulse towards the teammate. - **Control**: Radius-based capture and release - **Friction**: Gradual velocity reduction over time ## 7. Physics - **Collisions**: Simple 2D elastic collisions (player-player, player-puck, puck-boards) - **Bounces**: Puck bounces off walls with energy loss - **Friction**: Puck gradually slows down over time - **Movement**: Velocity-based position updates