# sysc3020-f2026/sysc-termproject-starter architecture

> Architecture diagram of the GitHub repository sysc3020-f2026/sysc-termproject-starter, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/sysc3020-f2026/sysc-termproject-starter
- Repository: https://github.com/sysc3020-f2026/sysc-termproject-starter

## Overview

JPacman is a Java Pac-Man game: the launcher assembles a map-backed level and single-player game, then presents it through a keyboard-and-button UI. During play, player movement traverses the board, collects pellets for points, and interacts with ghosts; ghost behavior includes navigation and AI. Sprites provide the visual layer. The tree and excerpts support the startup and map-construction links shown; some gameplay wiring is represented at the subsystem level because its implementation was not sampled.

Main entry points: [`src/main/java/nl/tudelft/jpacman/Launcher.java`](https://github.com/sysc3020-f2026/sysc-termproject-starter/blob/main/src/main/java/nl/tudelft/jpacman/Launcher.java) (Launcher), [`src/main/java/nl/tudelft/jpacman/level/Level.java`](https://github.com/sysc3020-f2026/sysc-termproject-starter/blob/main/src/main/java/nl/tudelft/jpacman/level/Level.java) (Level), [`src/main/java/nl/tudelft/jpacman/board/BoardFactory.java`](https://github.com/sysc3020-f2026/sysc-termproject-starter/blob/main/src/main/java/nl/tudelft/jpacman/board/BoardFactory.java) (Board Factory), [`src/main/java/nl/tudelft/jpacman/level/MapParser.java`](https://github.com/sysc3020-f2026/sysc-termproject-starter/blob/main/src/main/java/nl/tudelft/jpacman/level/MapParser.java) (Map Parser)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_startup["Startup and UI"]
  node_launcher["Launcher<br/>[Launcher.java]"]
  node_ui_builder["UI Builder"]
  node_ui["Game UI<br/>[PacManUI.java]"]
  node_keys["Key Listener"]
  node_board_panel["Board Panel<br/>[BoardPanel.java]"]
end

subgraph group_world["Board and Level"]
  node_board_factory["Board Factory<br/>[BoardFactory.java]"]
  node_board["Board and Squares<br/>[Board.java]"]
  node_map_parser["Map Parser<br/>[MapParser.java]"]
  node_level_factory["Level Factory<br/>[LevelFactory.java]"]
  node_level["Level<br/>[Level.java]"]
end

subgraph group_play["Gameplay and Scoring"]
  node_game_factory["Game Factory<br/>[GameFactory.java]"]
  node_game["Game<br/>[Game.java]"]
  node_player["Player Unit<br/>[Player.java]"]
  node_collisions["Collision Rules"]
  node_pellet["Pellet<br/>[Pellet.java]"]
  node_points["Point Calculator"]
end

subgraph group_ghosts["Ghost Behavior"]
  node_ghost_factory["Ghost Factory<br/>[GhostFactory.java]"]
  node_ghost["Ghost Units<br/>[Ghost.java]"]
  node_navigation["Navigation<br/>[Navigation.java]"]
end

subgraph group_visuals["Sprites"]
  node_sprites["Sprite Store<br/>[PacManSprites.java]"]
end

node_user(("Player"))

node_user -->|"presses keys"| node_keys
node_keys -->|"dispatches input"| node_ui
node_launcher -->|"parses map"| node_map_parser
node_launcher -->|"creates game"| node_game_factory
node_launcher -->|"builds interface"| node_ui_builder
node_launcher -->|"loads scoring"| node_points
node_ui_builder -->|"builds UI"| node_ui
node_ui -->|"controls game"| node_game
node_map_parser -->|"creates grid"| node_board_factory
node_map_parser -->|"creates level"| node_level_factory
node_board_factory -->|"links squares"| node_board
node_board_factory -->|"gets backgrounds"| node_sprites
node_level_factory -->|"creates ghosts"| node_ghost_factory
node_level_factory -->|"creates level"| node_level
node_game_factory -->|"creates game"| node_game
node_game_factory -->|"creates player"| node_player
node_game -->|"starts and moves"| node_level
node_level -->|"checks collisions"| node_collisions
node_player -->|"earns points"| node_points
node_level -->|"moves ghosts"| node_ghost
node_ghost_factory -->|"creates ghosts"| node_ghost
node_ghost -->|"uses paths"| node_navigation
node_board_panel -->|"renders board"| node_board
node_board_panel -->|"draws sprites"| node_sprites

click node_launcher "https://github.com/sysc3020-f2026/sysc-termproject-starter/blob/main/src/main/java/nl/tudelft/jpacman/Launcher.java"
click node_ui_builder "https://github.com/sysc3020-f2026/sysc-termproject-starter/blob/main/src/main/java/nl/tudelft/jpacman/ui/PacManUiBuilder.java"
click node_ui "https://github.com/sysc3020-f2026/sysc-termproject-starter/blob/main/src/main/java/nl/tudelft/jpacman/ui/PacManUI.java"
click node_keys "https://github.com/sysc3020-f2026/sysc-termproject-starter/blob/main/src/main/java/nl/tudelft/jpacman/ui/PacKeyListener.java"
click node_board_factory "https://github.com/sysc3020-f2026/sysc-termproject-starter/blob/main/src/main/java/nl/tudelft/jpacman/board/BoardFactory.java"
click node_board "https://github.com/sysc3020-f2026/sysc-termproject-starter/blob/main/src/main/java/nl/tudelft/jpacman/board/Board.java"
click node_map_parser "https://github.com/sysc3020-f2026/sysc-termproject-starter/blob/main/src/main/java/nl/tudelft/jpacman/level/MapParser.java"
click node_level_factory "https://github.com/sysc3020-f2026/sysc-termproject-starter/blob/main/src/main/java/nl/tudelft/jpacman/level/LevelFactory.java"
click node_level "https://github.com/sysc3020-f2026/sysc-termproject-starter/blob/main/src/main/java/nl/tudelft/jpacman/level/Level.java"
click node_game_factory "https://github.com/sysc3020-f2026/sysc-termproject-starter/blob/main/src/main/java/nl/tudelft/jpacman/game/GameFactory.java"
click node_game "https://github.com/sysc3020-f2026/sysc-termproject-starter/blob/main/src/main/java/nl/tudelft/jpacman/game/Game.java"
click node_player "https://github.com/sysc3020-f2026/sysc-termproject-starter/blob/main/src/main/java/nl/tudelft/jpacman/level/Player.java"
click node_collisions "https://github.com/sysc3020-f2026/sysc-termproject-starter/blob/main/src/main/java/nl/tudelft/jpacman/level/CollisionInteractionMap.java"
click node_pellet "https://github.com/sysc3020-f2026/sysc-termproject-starter/blob/main/src/main/java/nl/tudelft/jpacman/level/Pellet.java"
click node_points "https://github.com/sysc3020-f2026/sysc-termproject-starter/blob/main/src/main/java/nl/tudelft/jpacman/points/DefaultPointCalculator.java"
click node_ghost_factory "https://github.com/sysc3020-f2026/sysc-termproject-starter/blob/main/src/main/java/nl/tudelft/jpacman/npc/ghost/GhostFactory.java"
click node_ghost "https://github.com/sysc3020-f2026/sysc-termproject-starter/blob/main/src/main/java/nl/tudelft/jpacman/npc/Ghost.java"
click node_navigation "https://github.com/sysc3020-f2026/sysc-termproject-starter/blob/main/src/main/java/nl/tudelft/jpacman/npc/ghost/Navigation.java"
click node_sprites "https://github.com/sysc3020-f2026/sysc-termproject-starter/blob/main/src/main/java/nl/tudelft/jpacman/sprite/PacManSprites.java"
click node_board_panel "https://github.com/sysc3020-f2026/sysc-termproject-starter/blob/main/src/main/java/nl/tudelft/jpacman/ui/BoardPanel.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_launcher,node_ui_builder,node_ui,node_keys,node_board_panel toneBlue
class node_board_factory,node_board,node_map_parser,node_level_factory,node_level toneAmber
class node_game_factory,node_game,node_player,node_collisions,node_pellet,node_points toneMint
class node_ghost_factory,node_ghost,node_navigation toneRose
class node_sprites,node_user toneIndigo
```

## Components

### Startup and UI

- [Launcher](https://github.com/sysc3020-f2026/sysc-termproject-starter/blob/main/src/main/java/nl/tudelft/jpacman/Launcher.java): `src/main/java/nl/tudelft/jpacman/Launcher.java`
- [UI Builder](https://github.com/sysc3020-f2026/sysc-termproject-starter/blob/main/src/main/java/nl/tudelft/jpacman/ui/PacManUiBuilder.java): `src/main/java/nl/tudelft/jpacman/ui/PacManUiBuilder.java`
- [Game UI](https://github.com/sysc3020-f2026/sysc-termproject-starter/blob/main/src/main/java/nl/tudelft/jpacman/ui/PacManUI.java): `src/main/java/nl/tudelft/jpacman/ui/PacManUI.java`
- [Key Listener](https://github.com/sysc3020-f2026/sysc-termproject-starter/blob/main/src/main/java/nl/tudelft/jpacman/ui/PacKeyListener.java): `src/main/java/nl/tudelft/jpacman/ui/PacKeyListener.java`
- [Board Panel](https://github.com/sysc3020-f2026/sysc-termproject-starter/blob/main/src/main/java/nl/tudelft/jpacman/ui/BoardPanel.java): `src/main/java/nl/tudelft/jpacman/ui/BoardPanel.java`

### Board and Level

- [Board Factory](https://github.com/sysc3020-f2026/sysc-termproject-starter/blob/main/src/main/java/nl/tudelft/jpacman/board/BoardFactory.java): `src/main/java/nl/tudelft/jpacman/board/BoardFactory.java`
- [Board and Squares](https://github.com/sysc3020-f2026/sysc-termproject-starter/blob/main/src/main/java/nl/tudelft/jpacman/board/Board.java): `src/main/java/nl/tudelft/jpacman/board/Board.java`
- [Map Parser](https://github.com/sysc3020-f2026/sysc-termproject-starter/blob/main/src/main/java/nl/tudelft/jpacman/level/MapParser.java): `src/main/java/nl/tudelft/jpacman/level/MapParser.java`
- [Level Factory](https://github.com/sysc3020-f2026/sysc-termproject-starter/blob/main/src/main/java/nl/tudelft/jpacman/level/LevelFactory.java): `src/main/java/nl/tudelft/jpacman/level/LevelFactory.java`
- [Level](https://github.com/sysc3020-f2026/sysc-termproject-starter/blob/main/src/main/java/nl/tudelft/jpacman/level/Level.java): `src/main/java/nl/tudelft/jpacman/level/Level.java`

### Gameplay and Scoring

- [Game Factory](https://github.com/sysc3020-f2026/sysc-termproject-starter/blob/main/src/main/java/nl/tudelft/jpacman/game/GameFactory.java): `src/main/java/nl/tudelft/jpacman/game/GameFactory.java`
- [Game](https://github.com/sysc3020-f2026/sysc-termproject-starter/blob/main/src/main/java/nl/tudelft/jpacman/game/Game.java): `src/main/java/nl/tudelft/jpacman/game/Game.java`
- [Player Unit](https://github.com/sysc3020-f2026/sysc-termproject-starter/blob/main/src/main/java/nl/tudelft/jpacman/level/Player.java): `src/main/java/nl/tudelft/jpacman/level/Player.java`
- [Collision Rules](https://github.com/sysc3020-f2026/sysc-termproject-starter/blob/main/src/main/java/nl/tudelft/jpacman/level/CollisionInteractionMap.java): `src/main/java/nl/tudelft/jpacman/level/CollisionInteractionMap.java`
- [Pellet](https://github.com/sysc3020-f2026/sysc-termproject-starter/blob/main/src/main/java/nl/tudelft/jpacman/level/Pellet.java): `src/main/java/nl/tudelft/jpacman/level/Pellet.java`
- [Point Calculator](https://github.com/sysc3020-f2026/sysc-termproject-starter/blob/main/src/main/java/nl/tudelft/jpacman/points/DefaultPointCalculator.java): `src/main/java/nl/tudelft/jpacman/points/DefaultPointCalculator.java`

### Ghost Behavior

- [Ghost Factory](https://github.com/sysc3020-f2026/sysc-termproject-starter/blob/main/src/main/java/nl/tudelft/jpacman/npc/ghost/GhostFactory.java): `src/main/java/nl/tudelft/jpacman/npc/ghost/GhostFactory.java`
- [Ghost Units](https://github.com/sysc3020-f2026/sysc-termproject-starter/blob/main/src/main/java/nl/tudelft/jpacman/npc/Ghost.java): `src/main/java/nl/tudelft/jpacman/npc/Ghost.java`
- [Navigation](https://github.com/sysc3020-f2026/sysc-termproject-starter/blob/main/src/main/java/nl/tudelft/jpacman/npc/ghost/Navigation.java): `src/main/java/nl/tudelft/jpacman/npc/ghost/Navigation.java`

### Sprites

- [Sprite Store](https://github.com/sysc3020-f2026/sysc-termproject-starter/blob/main/src/main/java/nl/tudelft/jpacman/sprite/PacManSprites.java): `src/main/java/nl/tudelft/jpacman/sprite/PacManSprites.java`

### Other components

- **Player**

## Connections

- Player → Key Listener: presses keys
- Key Listener → Game UI: dispatches input
- Launcher → Map Parser: parses map
- Launcher → Game Factory: creates game
- Launcher → UI Builder: builds interface
- Launcher → Point Calculator: loads scoring
- UI Builder → Game UI: builds UI
- Game UI → Game: controls game
- Map Parser → Board Factory: creates grid
- Map Parser → Level Factory: creates level
- Board Factory → Board and Squares: links squares
- Board Factory → Sprite Store: gets backgrounds
- Level Factory → Ghost Factory: creates ghosts
- Level Factory → Level: creates level
- Game Factory → Game: creates game
- Game Factory → Player Unit: creates player
- Game → Level: starts and moves
- Level → Collision Rules: checks collisions
- Player Unit → Point Calculator: earns points
- Level → Ghost Units: moves ghosts
- Ghost Factory → Ghost Units: creates ghosts
- Ghost Units → Navigation: uses paths
- Board Panel → Board and Squares: renders board
- Board Panel → Sprite Store: draws sprites
