# nyanmyr/flappy-toys architecture

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

- Interactive diagram: https://gitdiagram.com/nyanmyr/flappy-toys
- Repository: https://github.com/nyanmyr/flappy-toys

## Overview

Flappy Toys is a Swing arcade game: players choose a toy and world, steer through hazards, collect rewards, and try to improve their score. The sampled game loop owns timed movement, obstacle and collectible spawning, level scenery, and ability use; toys hold score and reward state. The tree also identifies account, registration, leaderboard, and options screens, while the README documents character abilities, themed levels, randomized challenges, and competitive scoring. Those broader screen connections are not fully visible in the excerpts, so uncertain wiring is omitted.

Main entry points: [`src/game/Game.java`](https://github.com/nyanmyr/flappy-toys/blob/main/src/game/Game.java) (Game loop), [`src/toys/Toy.java`](https://github.com/nyanmyr/flappy-toys/blob/main/src/toys/Toy.java) (Playable toys), [`src/database/DatabaseConnection.java`](https://github.com/nyanmyr/flappy-toys/blob/main/src/database/DatabaseConnection.java) (Database access), [`src/game/Main.java`](https://github.com/nyanmyr/flappy-toys/blob/main/src/game/Main.java) (Application startup)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Game entry"]
  node_main["Application startup<br/>[Main.java]"]
  node_menu["Menu<br/>[Menu.java]"]
end

subgraph group_play["Gameplay"]
  node_game["Game loop<br/>[Game.java]"]
  node_input["Mouse controls"]
  node_toy["Playable toys<br/>[Toy.java]"]
  node_characters["Toy characters<br/>[ToyCharacter.java]"]
  node_abilities["Abilities<br/>[Ability.java]"]
  node_collectibles["Collectibles<br/>[Collectible.java]"]
  node_obstacles["Obstacle columns<br/>[Column.java]"]
end

subgraph group_world["World content"]
  node_levels["Level selection<br/>[Level.java]"]
  node_levelruntime["Level runtime<br/>[AbstractLevel.java]"]
  node_worlds["Themed worlds"]
  node_scenery["Backgrounds and parallax<br/>[Background.java]"]
  node_ground["Ground hazards<br/>[Ground.java]"]
end

subgraph group_services["Accounts and services"]
  node_account["Account screens<br/>[Account.java]"]
  node_login["Login and registration<br/>[Login.java]"]
  node_leaderboards["Leaderboards<br/>[Leaderboards.java]"]
  node_dbconnection["Database access"]
  node_playmanager["Play summary<br/>[PlayManager.java]"]
  node_audio["Music and sound<br/>[MusicPlayer.java]"]
end

node_player(("Player"))
node_mysql[("MySQL database")]

node_player -->|"opens"| node_menu
node_main -->|"shows"| node_menu
node_main -->|"checks connection"| node_dbconnection
node_main -->|"starts menu music"| node_audio
node_player -->|"provides mouse input"| node_input
node_input -->|"supplies controls"| node_game
node_game -->|"updates and scores"| node_toy
node_toy -->|"uses"| node_abilities
node_game -->|"spawns and tracks"| node_collectibles
node_toy -->|"receives rewards"| node_collectibles
node_game -->|"selects"| node_levels
node_game -->|"generates world elements"| node_levelruntime
node_levelruntime -->|"implemented by"| node_worlds
node_game -->|"spawns"| node_obstacles
node_game -->|"checks and replaces"| node_ground
node_game -->|"displays and scrolls"| node_scenery
node_game -->|"changes level music"| node_audio
node_dbconnection -->|"queries and updates"| node_mysql
node_account -.->|"account data"| node_dbconnection
node_login -.->|"handles credentials"| node_account
node_leaderboards -.->|"score data"| node_dbconnection
node_playmanager -->|"reads run totals"| node_toy

click node_main "https://github.com/nyanmyr/flappy-toys/blob/main/src/game/Main.java"
click node_menu "https://github.com/nyanmyr/flappy-toys/blob/main/src/game/Menu.java"
click node_game "https://github.com/nyanmyr/flappy-toys/blob/main/src/game/Game.java"
click node_input "https://github.com/nyanmyr/flappy-toys/blob/main/src/utility/inputhandling/MouseInputHandler.java"
click node_toy "https://github.com/nyanmyr/flappy-toys/blob/main/src/toys/Toy.java"
click node_characters "https://github.com/nyanmyr/flappy-toys/blob/main/src/toys/ToyCharacter.java"
click node_abilities "https://github.com/nyanmyr/flappy-toys/blob/main/src/abilities/Ability.java"
click node_collectibles "https://github.com/nyanmyr/flappy-toys/blob/main/src/collectibles/Collectible.java"
click node_obstacles "https://github.com/nyanmyr/flappy-toys/blob/main/src/obstacles/columns/Column.java"
click node_levels "https://github.com/nyanmyr/flappy-toys/blob/main/src/levels/Level.java"
click node_levelruntime "https://github.com/nyanmyr/flappy-toys/blob/main/src/levels/AbstractLevel.java"
click node_worlds "https://github.com/nyanmyr/flappy-toys/tree/main/src/levels"
click node_scenery "https://github.com/nyanmyr/flappy-toys/blob/main/src/levels/backgrounds/Background.java"
click node_ground "https://github.com/nyanmyr/flappy-toys/blob/main/src/obstacles/grounds/Ground.java"
click node_account "https://github.com/nyanmyr/flappy-toys/blob/main/src/game/Account.java"
click node_login "https://github.com/nyanmyr/flappy-toys/blob/main/src/game/Login.java"
click node_leaderboards "https://github.com/nyanmyr/flappy-toys/blob/main/src/game/Leaderboards.java"
click node_dbconnection "https://github.com/nyanmyr/flappy-toys/blob/main/src/database/DatabaseConnection.java"
click node_playmanager "https://github.com/nyanmyr/flappy-toys/blob/main/src/database/PlayManager.java"
click node_audio "https://github.com/nyanmyr/flappy-toys/blob/main/src/sfx/music/MusicPlayer.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_main,node_menu toneBlue
class node_game,node_input,node_toy,node_characters,node_abilities,node_collectibles,node_obstacles,node_mysql toneAmber
class node_levels,node_levelruntime,node_worlds,node_scenery,node_ground toneMint
class node_account,node_login,node_leaderboards,node_dbconnection,node_playmanager,node_audio toneRose
class node_player toneIndigo
```

## Components

### Game entry

- [Application startup](https://github.com/nyanmyr/flappy-toys/blob/main/src/game/Main.java): `src/game/Main.java`
- [Menu](https://github.com/nyanmyr/flappy-toys/blob/main/src/game/Menu.java): `src/game/Menu.java`

### Gameplay

- [Game loop](https://github.com/nyanmyr/flappy-toys/blob/main/src/game/Game.java): `src/game/Game.java`
- [Mouse controls](https://github.com/nyanmyr/flappy-toys/blob/main/src/utility/inputhandling/MouseInputHandler.java): `src/utility/inputhandling/MouseInputHandler.java`
- [Playable toys](https://github.com/nyanmyr/flappy-toys/blob/main/src/toys/Toy.java): `src/toys/Toy.java`
- [Toy characters](https://github.com/nyanmyr/flappy-toys/blob/main/src/toys/ToyCharacter.java): `src/toys/ToyCharacter.java`
- [Abilities](https://github.com/nyanmyr/flappy-toys/blob/main/src/abilities/Ability.java): `src/abilities/Ability.java`
- [Collectibles](https://github.com/nyanmyr/flappy-toys/blob/main/src/collectibles/Collectible.java): `src/collectibles/Collectible.java`
- [Obstacle columns](https://github.com/nyanmyr/flappy-toys/blob/main/src/obstacles/columns/Column.java): `src/obstacles/columns/Column.java`

### World content

- [Level selection](https://github.com/nyanmyr/flappy-toys/blob/main/src/levels/Level.java): `src/levels/Level.java`
- [Level runtime](https://github.com/nyanmyr/flappy-toys/blob/main/src/levels/AbstractLevel.java): `src/levels/AbstractLevel.java`
- [Themed worlds](https://github.com/nyanmyr/flappy-toys/tree/main/src/levels): `src/levels`
- [Backgrounds and parallax](https://github.com/nyanmyr/flappy-toys/blob/main/src/levels/backgrounds/Background.java): `src/levels/backgrounds/Background.java`
- [Ground hazards](https://github.com/nyanmyr/flappy-toys/blob/main/src/obstacles/grounds/Ground.java): `src/obstacles/grounds/Ground.java`

### Accounts and services

- [Account screens](https://github.com/nyanmyr/flappy-toys/blob/main/src/game/Account.java): `src/game/Account.java`
- [Login and registration](https://github.com/nyanmyr/flappy-toys/blob/main/src/game/Login.java): `src/game/Login.java`
- [Leaderboards](https://github.com/nyanmyr/flappy-toys/blob/main/src/game/Leaderboards.java): `src/game/Leaderboards.java`
- [Database access](https://github.com/nyanmyr/flappy-toys/blob/main/src/database/DatabaseConnection.java): `src/database/DatabaseConnection.java`
- [Play summary](https://github.com/nyanmyr/flappy-toys/blob/main/src/database/PlayManager.java): `src/database/PlayManager.java`
- [Music and sound](https://github.com/nyanmyr/flappy-toys/blob/main/src/sfx/music/MusicPlayer.java): `src/sfx/music/MusicPlayer.java`

### Other components

- **Player**
- **MySQL database**

## Connections

- Player → Menu: opens
- Application startup → Menu: shows
- Application startup → Database access: checks connection
- Application startup → Music and sound: starts menu music
- Player → Mouse controls: provides mouse input
- Mouse controls → Game loop: supplies controls
- Game loop → Playable toys: updates and scores
- Playable toys → Abilities: uses
- Game loop → Collectibles: spawns and tracks
- Playable toys → Collectibles: receives rewards
- Game loop → Level selection: selects
- Game loop → Level runtime: generates world elements
- Level runtime → Themed worlds: implemented by
- Game loop → Obstacle columns: spawns
- Game loop → Ground hazards: checks and replaces
- Game loop → Backgrounds and parallax: displays and scrolls
- Game loop → Music and sound: changes level music
- Database access → MySQL database: queries and updates
- Account screens → Database access: account data
- Login and registration → Account screens: handles credentials
- Leaderboards → Database access: score data
- Play summary → Playable toys: reads run totals
