# parsamohammadidev/terraguard architecture

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

- Interactive diagram: https://gitdiagram.com/parsamohammadidev/terraguard
- Repository: https://github.com/parsamohammadidev/terraguard

## Overview

TerraGuard is a JavaFX top-down defense game. Players choose a map and difficulty, then defend it by placing towers against enemy waves; the game tracks coins, collisions, levels, and defeat. The graph separates the documented player-facing flow from the runtime engine, wave handling, and game-domain components. The README documents maps, defender variety, and difficulty control; sampled engine and manager sources show several runtime calls. Other feature links are omitted where source excerpts do not establish their wiring.

Main entry points: [`src/main/java/ir/ac/kntu/services/game/core/TerraGuardGameEngine.java`](https://github.com/parsamohammadidev/terraguard/blob/master/src/main/java/ir/ac/kntu/services/game/core/TerraGuardGameEngine.java) (Game engine), [`src/main/java/ir/ac/kntu/services/game/core/managers/SimpleEnemyManager.java`](https://github.com/parsamohammadidev/terraguard/blob/master/src/main/java/ir/ac/kntu/services/game/core/managers/SimpleEnemyManager.java) (Enemy waves), [`src/main/java/ir/ac/kntu/services/app/scenes`](https://github.com/parsamohammadidev/terraguard/tree/master/src/main/java/ir/ac/kntu/services/app/scenes) (Scenes), [`src/main/java/ir/ac/kntu/services/game/core/managers/SimpleDifficultyManager.java`](https://github.com/parsamohammadidev/terraguard/blob/master/src/main/java/ir/ac/kntu/services/game/core/managers/SimpleDifficultyManager.java) (Difficulty manager)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App experience"]
  node_scenes["Scenes"]
  node_scene_manager["Scene manager"]
  node_prompts["Prompts"]
  node_prompt_manager["Prompt manager"]
  node_map_data["Map selection data"]
end

subgraph group_runtime["Game runtime"]
  node_game_engine["Game engine"]
  node_enemy_manager["Enemy waves"]
  node_difficulty_manager["Difficulty manager"]
  node_collision_manager["Collision manager"]
  node_collision_handler["Collision handler"]
  node_map_renderer["Map renderer<br/>[MapRenderer.java]"]
  node_enemy_renderer["Enemy renderer<br/>[EnemyRenderer.java]"]
end

subgraph group_domain["Game domain"]
  node_map["Maps and terrain"]
  node_enemies["Enemies"]
  node_defenders["Defenders"]
  node_bullets["Bullets"]
end

subgraph group_economy["Progress and economy"]
  node_wallet["Coin wallet"]
  node_coin_generator["Coin generation"]
  node_markets["Tower market"]
  node_difficulty["Difficulty and levels"]
end

node_player(("Player"))

node_player -.->|"navigates"| node_scenes
node_scenes -.->|"selects maps"| node_map_data
node_scenes -.->|"starts defense"| node_game_engine
node_game_engine -->|"runs waves"| node_enemy_manager
node_game_engine -->|"starts generation"| node_coin_generator
node_game_engine -->|"renders map"| node_map_renderer
node_game_engine -->|"renders enemies"| node_enemy_renderer
node_game_engine -->|"sets engine"| node_difficulty_manager
node_game_engine -->|"resets wallet"| node_wallet
node_game_engine -->|"shows defeat"| node_scene_manager
node_game_engine -->|"resets bullets"| node_bullets
node_game_engine -->|"pauses towers"| node_defenders
node_enemy_manager -->|"creates soldiers"| node_enemies
node_enemy_manager -->|"adds enemies"| node_enemy_renderer
node_enemy_manager -->|"reports outcomes"| node_game_engine
node_collision_manager -->|"dispatches collisions"| node_collision_handler
node_difficulty_manager -->|"manages levels"| node_difficulty
node_difficulty_manager -->|"shows level-up"| node_scene_manager
node_scene_manager -.->|"routes prompts"| node_prompts
node_prompt_manager -->|"creates and shows"| node_prompts
node_markets -->|"reads map"| node_map
node_markets -->|"mediates purchases"| node_wallet

click node_scenes "https://github.com/parsamohammadidev/terraguard/tree/master/src/main/java/ir/ac/kntu/services/app/scenes"
click node_scene_manager "https://github.com/parsamohammadidev/terraguard/blob/master/src/main/java/ir/ac/kntu/services/app/scenes/managers/SimpleSceneManager.java"
click node_prompts "https://github.com/parsamohammadidev/terraguard/tree/master/src/main/java/ir/ac/kntu/services/app/prompts"
click node_prompt_manager "https://github.com/parsamohammadidev/terraguard/blob/master/src/main/java/ir/ac/kntu/services/app/prompts/managers/SimplePromptManager.java"
click node_map_data "https://github.com/parsamohammadidev/terraguard/blob/master/src/main/java/ir/ac/kntu/services/app/database/HardCodedGameDataManager.java"
click node_game_engine "https://github.com/parsamohammadidev/terraguard/blob/master/src/main/java/ir/ac/kntu/services/game/core/TerraGuardGameEngine.java"
click node_enemy_manager "https://github.com/parsamohammadidev/terraguard/blob/master/src/main/java/ir/ac/kntu/services/game/core/managers/SimpleEnemyManager.java"
click node_difficulty_manager "https://github.com/parsamohammadidev/terraguard/blob/master/src/main/java/ir/ac/kntu/services/game/core/managers/SimpleDifficultyManager.java"
click node_collision_manager "https://github.com/parsamohammadidev/terraguard/blob/master/src/main/java/ir/ac/kntu/services/game/core/managers/SimpleCollisionManager.java"
click node_collision_handler "https://github.com/parsamohammadidev/terraguard/blob/master/src/main/java/ir/ac/kntu/services/game/core/managers/strategies/SimpleCollisionHandler.java"
click node_map_renderer "https://github.com/parsamohammadidev/terraguard/blob/master/src/main/java/ir/ac/kntu/services/game/components/maps/renderers/MapRenderer.java"
click node_enemy_renderer "https://github.com/parsamohammadidev/terraguard/blob/master/src/main/java/ir/ac/kntu/services/game/core/renderers/EnemyRenderer.java"
click node_map "https://github.com/parsamohammadidev/terraguard/tree/master/src/main/java/ir/ac/kntu/services/game/components/maps"
click node_enemies "https://github.com/parsamohammadidev/terraguard/tree/master/src/main/java/ir/ac/kntu/services/game/components/enemies"
click node_defenders "https://github.com/parsamohammadidev/terraguard/tree/master/src/main/java/ir/ac/kntu/services/game/components/defenders"
click node_bullets "https://github.com/parsamohammadidev/terraguard/tree/master/src/main/java/ir/ac/kntu/services/game/components/bullets"
click node_wallet "https://github.com/parsamohammadidev/terraguard/tree/master/src/main/java/ir/ac/kntu/services/game/components/wallets"
click node_coin_generator "https://github.com/parsamohammadidev/terraguard/blob/master/src/main/java/ir/ac/kntu/services/game/components/wallets/generators/AutoCoinGenerator.java"
click node_markets "https://github.com/parsamohammadidev/terraguard/blob/master/src/main/java/ir/ac/kntu/services/game/core/markets/TerraGuardMarket.java"
click node_difficulty "https://github.com/parsamohammadidev/terraguard/tree/master/src/main/java/ir/ac/kntu/services/game/core/difficulties"

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_scenes,node_scene_manager,node_prompts,node_prompt_manager,node_map_data toneBlue
class node_game_engine,node_enemy_manager,node_difficulty_manager,node_collision_manager,node_collision_handler,node_map_renderer,node_enemy_renderer toneAmber
class node_map,node_enemies,node_defenders,node_bullets toneMint
class node_wallet,node_coin_generator,node_markets,node_difficulty toneRose
class node_player toneIndigo
```

## Components

### App experience

- [Scenes](https://github.com/parsamohammadidev/terraguard/tree/master/src/main/java/ir/ac/kntu/services/app/scenes): `src/main/java/ir/ac/kntu/services/app/scenes`
- [Scene manager](https://github.com/parsamohammadidev/terraguard/blob/master/src/main/java/ir/ac/kntu/services/app/scenes/managers/SimpleSceneManager.java): `src/main/java/ir/ac/kntu/services/app/scenes/managers/SimpleSceneManager.java`
- [Prompts](https://github.com/parsamohammadidev/terraguard/tree/master/src/main/java/ir/ac/kntu/services/app/prompts): `src/main/java/ir/ac/kntu/services/app/prompts`
- [Prompt manager](https://github.com/parsamohammadidev/terraguard/blob/master/src/main/java/ir/ac/kntu/services/app/prompts/managers/SimplePromptManager.java): `src/main/java/ir/ac/kntu/services/app/prompts/managers/SimplePromptManager.java`
- [Map selection data](https://github.com/parsamohammadidev/terraguard/blob/master/src/main/java/ir/ac/kntu/services/app/database/HardCodedGameDataManager.java): `src/main/java/ir/ac/kntu/services/app/database/HardCodedGameDataManager.java`

### Game runtime

- [Game engine](https://github.com/parsamohammadidev/terraguard/blob/master/src/main/java/ir/ac/kntu/services/game/core/TerraGuardGameEngine.java): `src/main/java/ir/ac/kntu/services/game/core/TerraGuardGameEngine.java`
- [Enemy waves](https://github.com/parsamohammadidev/terraguard/blob/master/src/main/java/ir/ac/kntu/services/game/core/managers/SimpleEnemyManager.java): `src/main/java/ir/ac/kntu/services/game/core/managers/SimpleEnemyManager.java`
- [Difficulty manager](https://github.com/parsamohammadidev/terraguard/blob/master/src/main/java/ir/ac/kntu/services/game/core/managers/SimpleDifficultyManager.java): `src/main/java/ir/ac/kntu/services/game/core/managers/SimpleDifficultyManager.java`
- [Collision manager](https://github.com/parsamohammadidev/terraguard/blob/master/src/main/java/ir/ac/kntu/services/game/core/managers/SimpleCollisionManager.java): `src/main/java/ir/ac/kntu/services/game/core/managers/SimpleCollisionManager.java`
- [Collision handler](https://github.com/parsamohammadidev/terraguard/blob/master/src/main/java/ir/ac/kntu/services/game/core/managers/strategies/SimpleCollisionHandler.java): `src/main/java/ir/ac/kntu/services/game/core/managers/strategies/SimpleCollisionHandler.java`
- [Map renderer](https://github.com/parsamohammadidev/terraguard/blob/master/src/main/java/ir/ac/kntu/services/game/components/maps/renderers/MapRenderer.java): `src/main/java/ir/ac/kntu/services/game/components/maps/renderers/MapRenderer.java`
- [Enemy renderer](https://github.com/parsamohammadidev/terraguard/blob/master/src/main/java/ir/ac/kntu/services/game/core/renderers/EnemyRenderer.java): `src/main/java/ir/ac/kntu/services/game/core/renderers/EnemyRenderer.java`

### Game domain

- [Maps and terrain](https://github.com/parsamohammadidev/terraguard/tree/master/src/main/java/ir/ac/kntu/services/game/components/maps): `src/main/java/ir/ac/kntu/services/game/components/maps`
- [Enemies](https://github.com/parsamohammadidev/terraguard/tree/master/src/main/java/ir/ac/kntu/services/game/components/enemies): `src/main/java/ir/ac/kntu/services/game/components/enemies`
- [Defenders](https://github.com/parsamohammadidev/terraguard/tree/master/src/main/java/ir/ac/kntu/services/game/components/defenders): `src/main/java/ir/ac/kntu/services/game/components/defenders`
- [Bullets](https://github.com/parsamohammadidev/terraguard/tree/master/src/main/java/ir/ac/kntu/services/game/components/bullets): `src/main/java/ir/ac/kntu/services/game/components/bullets`

### Progress and economy

- [Coin wallet](https://github.com/parsamohammadidev/terraguard/tree/master/src/main/java/ir/ac/kntu/services/game/components/wallets): `src/main/java/ir/ac/kntu/services/game/components/wallets`
- [Coin generation](https://github.com/parsamohammadidev/terraguard/blob/master/src/main/java/ir/ac/kntu/services/game/components/wallets/generators/AutoCoinGenerator.java): `src/main/java/ir/ac/kntu/services/game/components/wallets/generators/AutoCoinGenerator.java`
- [Tower market](https://github.com/parsamohammadidev/terraguard/blob/master/src/main/java/ir/ac/kntu/services/game/core/markets/TerraGuardMarket.java): `src/main/java/ir/ac/kntu/services/game/core/markets/TerraGuardMarket.java`
- [Difficulty and levels](https://github.com/parsamohammadidev/terraguard/tree/master/src/main/java/ir/ac/kntu/services/game/core/difficulties): `src/main/java/ir/ac/kntu/services/game/core/difficulties`

### Other components

- **Player**

## Connections

- Player → Scenes: navigates (evidence: `README.md`)
- Scenes → Map selection data: selects maps (evidence: `README.md`)
- Scenes → Game engine: starts defense (evidence: `README.md`)
- Game engine → Enemy waves: runs waves (evidence: `src/main/java/ir/ac/kntu/services/game/core/TerraGuardGameEngine.java`)
- Game engine → Coin generation: starts generation (evidence: `src/main/java/ir/ac/kntu/services/game/core/TerraGuardGameEngine.java`)
- Game engine → Map renderer: renders map (evidence: `src/main/java/ir/ac/kntu/services/game/core/TerraGuardGameEngine.java`)
- Game engine → Enemy renderer: renders enemies (evidence: `src/main/java/ir/ac/kntu/services/game/core/TerraGuardGameEngine.java`)
- Game engine → Difficulty manager: sets engine (evidence: `src/main/java/ir/ac/kntu/services/game/core/TerraGuardGameEngine.java`)
- Game engine → Coin wallet: resets wallet (evidence: `src/main/java/ir/ac/kntu/services/game/core/TerraGuardGameEngine.java`)
- Game engine → Scene manager: shows defeat (evidence: `src/main/java/ir/ac/kntu/services/game/core/TerraGuardGameEngine.java`)
- Game engine → Bullets: resets bullets (evidence: `src/main/java/ir/ac/kntu/services/game/core/TerraGuardGameEngine.java`)
- Game engine → Defenders: pauses towers (evidence: `src/main/java/ir/ac/kntu/services/game/core/TerraGuardGameEngine.java`)
- Enemy waves → Enemies: creates soldiers (evidence: `src/main/java/ir/ac/kntu/services/game/core/managers/SimpleEnemyManager.java`)
- Enemy waves → Enemy renderer: adds enemies (evidence: `src/main/java/ir/ac/kntu/services/game/core/managers/SimpleEnemyManager.java`)
- Enemy waves → Game engine: reports outcomes (evidence: `src/main/java/ir/ac/kntu/services/game/core/managers/SimpleEnemyManager.java`)
- Collision manager → Collision handler: dispatches collisions (evidence: `src/main/java/ir/ac/kntu/services/game/core/managers/SimpleCollisionManager.java`)
- Difficulty manager → Difficulty and levels: manages levels (evidence: `src/main/java/ir/ac/kntu/services/game/core/managers/SimpleDifficultyManager.java`)
- Difficulty manager → Scene manager: shows level-up (evidence: `src/main/java/ir/ac/kntu/services/game/core/managers/SimpleDifficultyManager.java`)
- Scene manager → Prompts: routes prompts (evidence: `src/main/java/ir/ac/kntu/services/app/scenes/managers/SimpleSceneManager.java`)
- Prompt manager → Prompts: creates and shows (evidence: `src/main/java/ir/ac/kntu/services/app/prompts/managers/SimplePromptManager.java`)
- Tower market → Maps and terrain: reads map (evidence: `src/main/java/ir/ac/kntu/services/game/core/markets/TerraGuardMarket.java`)
- Tower market → Coin wallet: mediates purchases (evidence: `src/main/java/ir/ac/kntu/services/game/core/markets/TerraGuardMarket.java`)
