# joshua122388/ponggame architecture

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

- Interactive diagram: https://gitdiagram.com/joshua122388/ponggame
- Repository: https://github.com/joshua122388/ponggame

## Overview

Ping Pong is a local Android Pong game: the player configures a match, starts it, moves the left paddle by touch, and plays against a difficulty-configured CPU while the score and game status update. The app separates its Compose presentation from game state and rules. The README documents physics, collisions, CPU behavior, and scoring, but the sampled source does not show the implementation or exact call wiring; those links are therefore limited to the documented MVC relationship and the visible app structure.

Main entry points: [`app/src/main/java/com/example/pingpong/ui/PongGameScreen.kt`](https://github.com/joshua122388/ponggame/blob/main/app/src/main/java/com/example/pingpong/ui/PongGameScreen.kt) (Game screen), [`app/src/main/java/com/example/pingpong/game/GameModels.kt`](https://github.com/joshua122388/ponggame/blob/main/app/src/main/java/com/example/pingpong/game/GameModels.kt) (Game state and rules), [`app/src/main/java/com/example/pingpong/MainActivity.kt`](https://github.com/joshua122388/ponggame/blob/main/app/src/main/java/com/example/pingpong/MainActivity.kt) (Main activity), [`app/src/main/java/com/example/pingpong/ui/components`](https://github.com/joshua122388/ponggame/tree/main/app/src/main/java/com/example/pingpong/ui/components) (Match selectors)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["App entry"]
  node_main["Main activity<br/>[MainActivity.kt]"]
end

subgraph group_presentation["Compose UI"]
  node_screen["Game screen<br/>[PongGameScreen.kt]"]
  node_selectors["Match selectors"]
  node_scoreboard["Scoreboard<br/>[Scoreboard.kt]"]
  node_playerlabels["Player labels<br/>[PlayerLabels.kt]"]
  node_pause["Pause overlay<br/>[PauseOverlay.kt]"]
  node_gameover["Game-over overlay<br/>[GameOverOverlay.kt]"]
  node_theme["UI theme"]
end

subgraph group_gameplay["Game logic"]
  node_engine["Game state and rules<br/>[GameModels.kt]"]
end

subgraph group_domain["Game options"]
  node_modes["Game modes<br/>[GameMode.kt]"]
  node_winner["Winner<br/>[Winner.kt]"]
  node_difficulty["Difficulty<br/>[Difficulty.kt]"]
end

node_player(("Player"))
node_android["Android app"]

node_player -->|"launches"| node_android
node_android -->|"opens"| node_main
node_main -->|"shows"| node_screen
node_player -->|"touches"| node_screen
node_screen -->|"controls game"| node_engine
node_engine -->|"provides state"| node_screen
node_screen -->|"renders"| node_selectors
node_player -->|"chooses options"| node_selectors
node_screen -->|"renders score"| node_scoreboard
node_screen -->|"renders players"| node_playerlabels
node_screen -->|"renders pause"| node_pause
node_screen -->|"renders result"| node_gameover
node_screen -->|"uses styling"| node_theme
node_engine -->|"uses difficulty"| node_difficulty
node_engine -->|"uses mode"| node_modes
node_engine -->|"determines winner"| node_winner

click node_main "https://github.com/joshua122388/ponggame/blob/main/app/src/main/java/com/example/pingpong/MainActivity.kt"
click node_screen "https://github.com/joshua122388/ponggame/blob/main/app/src/main/java/com/example/pingpong/ui/PongGameScreen.kt"
click node_selectors "https://github.com/joshua122388/ponggame/tree/main/app/src/main/java/com/example/pingpong/ui/components"
click node_scoreboard "https://github.com/joshua122388/ponggame/blob/main/app/src/main/java/com/example/pingpong/ui/components/Scoreboard.kt"
click node_playerlabels "https://github.com/joshua122388/ponggame/blob/main/app/src/main/java/com/example/pingpong/ui/components/PlayerLabels.kt"
click node_pause "https://github.com/joshua122388/ponggame/blob/main/app/src/main/java/com/example/pingpong/ui/components/PauseOverlay.kt"
click node_gameover "https://github.com/joshua122388/ponggame/blob/main/app/src/main/java/com/example/pingpong/ui/components/GameOverOverlay.kt"
click node_theme "https://github.com/joshua122388/ponggame/tree/main/app/src/main/java/com/example/pingpong/ui/theme"
click node_engine "https://github.com/joshua122388/ponggame/blob/main/app/src/main/java/com/example/pingpong/game/GameModels.kt"
click node_modes "https://github.com/joshua122388/ponggame/blob/main/app/src/main/java/com/example/pingpong/game/GameMode.kt"
click node_winner "https://github.com/joshua122388/ponggame/blob/main/app/src/main/java/com/example/pingpong/game/Winner.kt"
click node_difficulty "https://github.com/joshua122388/ponggame/blob/main/app/src/main/java/com/example/pingpong/model/Difficulty.kt"

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_main toneBlue
class node_screen,node_selectors,node_scoreboard,node_playerlabels,node_pause,node_gameover,node_theme toneAmber
class node_engine toneMint
class node_modes,node_winner,node_difficulty toneRose
class node_player,node_android toneIndigo
```

## Components

### App entry

- [Main activity](https://github.com/joshua122388/ponggame/blob/main/app/src/main/java/com/example/pingpong/MainActivity.kt): `app/src/main/java/com/example/pingpong/MainActivity.kt`

### Compose UI

- [Game screen](https://github.com/joshua122388/ponggame/blob/main/app/src/main/java/com/example/pingpong/ui/PongGameScreen.kt): `app/src/main/java/com/example/pingpong/ui/PongGameScreen.kt`
- [Match selectors](https://github.com/joshua122388/ponggame/tree/main/app/src/main/java/com/example/pingpong/ui/components): `app/src/main/java/com/example/pingpong/ui/components`
- [Scoreboard](https://github.com/joshua122388/ponggame/blob/main/app/src/main/java/com/example/pingpong/ui/components/Scoreboard.kt): `app/src/main/java/com/example/pingpong/ui/components/Scoreboard.kt`
- [Player labels](https://github.com/joshua122388/ponggame/blob/main/app/src/main/java/com/example/pingpong/ui/components/PlayerLabels.kt): `app/src/main/java/com/example/pingpong/ui/components/PlayerLabels.kt`
- [Pause overlay](https://github.com/joshua122388/ponggame/blob/main/app/src/main/java/com/example/pingpong/ui/components/PauseOverlay.kt): `app/src/main/java/com/example/pingpong/ui/components/PauseOverlay.kt`
- [Game-over overlay](https://github.com/joshua122388/ponggame/blob/main/app/src/main/java/com/example/pingpong/ui/components/GameOverOverlay.kt): `app/src/main/java/com/example/pingpong/ui/components/GameOverOverlay.kt`
- [UI theme](https://github.com/joshua122388/ponggame/tree/main/app/src/main/java/com/example/pingpong/ui/theme): `app/src/main/java/com/example/pingpong/ui/theme`

### Game logic

- [Game state and rules](https://github.com/joshua122388/ponggame/blob/main/app/src/main/java/com/example/pingpong/game/GameModels.kt): `app/src/main/java/com/example/pingpong/game/GameModels.kt`

### Game options

- [Game modes](https://github.com/joshua122388/ponggame/blob/main/app/src/main/java/com/example/pingpong/game/GameMode.kt): `app/src/main/java/com/example/pingpong/game/GameMode.kt`
- [Winner](https://github.com/joshua122388/ponggame/blob/main/app/src/main/java/com/example/pingpong/game/Winner.kt): `app/src/main/java/com/example/pingpong/game/Winner.kt`
- [Difficulty](https://github.com/joshua122388/ponggame/blob/main/app/src/main/java/com/example/pingpong/model/Difficulty.kt): `app/src/main/java/com/example/pingpong/model/Difficulty.kt`

### Other components

- **Player**
- **Android app**

## Connections

- Player → Android app: launches
- Android app → Main activity: opens
- Main activity → Game screen: shows
- Player → Game screen: touches
- Game screen → Game state and rules: controls game
- Game state and rules → Game screen: provides state
- Game screen → Match selectors: renders
- Player → Match selectors: chooses options
- Game screen → Scoreboard: renders score
- Game screen → Player labels: renders players
- Game screen → Pause overlay: renders pause
- Game screen → Game-over overlay: renders result
- Game screen → UI theme: uses styling
- Game state and rules → Difficulty: uses difficulty
- Game state and rules → Game modes: uses mode
- Game state and rules → Winner: determines winner
