# ankitgundewar/adaptive_difficulty-leveraging_reinforcement_learning_for_player_driven_immersion architecture

> Architecture diagram of the GitHub repository ankitgundewar/adaptive_difficulty-leveraging_reinforcement_learning_for_player_driven_immersion, 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/ankitgundewar/adaptive_difficulty-leveraging_reinforcement_learning_for_player_driven_immersion
- Repository: https://github.com/ankitgundewar/adaptive_difficulty-leveraging_reinforcement_learning_for_player_driven_immersion

## Overview

This repository is a Pygame platform game project exploring adaptive difficulty with reinforcement learning. The principal loop runs a game episode, lets a player (keyboard-controlled or agent-controlled) traverse platforms, and uses score/state/reward transitions to train agents. The platform agent adapts platform placement; the player agent learns movement. The README identifies several runnable variants, while sampled code shows their differing platform-generation and control modes. Some variant wiring is based on file-level descriptions because their complete source was not sampled.

Main entry points: [`AdverseGame.py`](https://github.com/ankitgundewar/adaptive_difficulty-leveraging_reinforcement_learning_for_player_driven_immersion/blob/main/AdverseGame.py) (Adverse system), [`assets`](https://github.com/ankitgundewar/adaptive_difficulty-leveraging_reinforcement_learning_for_player_driven_immersion/tree/main/assets) (Images), [`game.py`](https://github.com/ankitgundewar/adaptive_difficulty-leveraging_reinforcement_learning_for_player_driven_immersion/blob/main/game.py) (Keyboard game), [`playerDQN.py`](https://github.com/ankitgundewar/adaptive_difficulty-leveraging_reinforcement_learning_for_player_driven_immersion/blob/main/playerDQN.py) (Player DQN)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_gameplay["Game modes"]
  node_game["Keyboard game<br/>[game.py]"]
  node_adverse["Adverse system<br/>[AdverseGame.py]"]
  node_player_rl["Random platforms<br/>[playerRL.py]"]
  node_player_random["Fixed variant A<br/>[playerRandom.py]"]
  node_player_random2["Fixed variant B<br/>[playerRandom2.py]"]
end

subgraph group_learning["RL agents"]
  node_platform_agent["Platform DQN<br/>[DQN.py]"]
  node_player_agent["Player DQN<br/>[playerDQN.py]"]
end

subgraph group_resources["Game resources"]
  node_assets["Images"]
  node_buffer["Screenshot buffer"]
end

node_user(("Player"))
node_pygame{{"Pygame runtime"}}

node_user -->|"controls"| node_game
node_game -->|"renders and polls"| node_pygame
node_game -->|"chooses platforms"| node_platform_agent
node_adverse -->|"renders and polls"| node_pygame
node_adverse -->|"trains platform policy"| node_platform_agent
node_adverse -->|"trains player policy"| node_player_agent
node_player_rl -->|"renders and polls"| node_pygame
node_player_rl -->|"selects and trains actions"| node_player_agent
node_player_random -->|"renders and polls"| node_pygame
node_player_random -.->|"uses player policy"| node_player_agent
node_player_random2 -->|"renders and polls"| node_pygame
node_player_random2 -.->|"uses player policy"| node_player_agent
node_game -->|"loads images"| node_assets
node_adverse -->|"loads images"| node_assets
node_player_rl -->|"loads images"| node_assets
node_player_random -->|"loads images"| node_assets
node_player_random2 -->|"loads images"| node_assets
node_adverse -->|"writes screenshot"| node_buffer

click node_game "https://github.com/ankitgundewar/adaptive_difficulty-leveraging_reinforcement_learning_for_player_driven_immersion/blob/main/game.py"
click node_adverse "https://github.com/ankitgundewar/adaptive_difficulty-leveraging_reinforcement_learning_for_player_driven_immersion/blob/main/AdverseGame.py"
click node_player_rl "https://github.com/ankitgundewar/adaptive_difficulty-leveraging_reinforcement_learning_for_player_driven_immersion/blob/main/playerRL.py"
click node_player_random "https://github.com/ankitgundewar/adaptive_difficulty-leveraging_reinforcement_learning_for_player_driven_immersion/blob/main/playerRandom.py"
click node_player_random2 "https://github.com/ankitgundewar/adaptive_difficulty-leveraging_reinforcement_learning_for_player_driven_immersion/blob/main/playerRandom2.py"
click node_platform_agent "https://github.com/ankitgundewar/adaptive_difficulty-leveraging_reinforcement_learning_for_player_driven_immersion/blob/main/DQN.py"
click node_player_agent "https://github.com/ankitgundewar/adaptive_difficulty-leveraging_reinforcement_learning_for_player_driven_immersion/blob/main/playerDQN.py"
click node_assets "https://github.com/ankitgundewar/adaptive_difficulty-leveraging_reinforcement_learning_for_player_driven_immersion/tree/main/assets"
click node_buffer "https://github.com/ankitgundewar/adaptive_difficulty-leveraging_reinforcement_learning_for_player_driven_immersion/tree/main/buffer"

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_game,node_adverse,node_player_rl,node_player_random,node_player_random2 toneBlue
class node_platform_agent,node_player_agent toneAmber
class node_assets,node_buffer toneMint
class node_user,node_pygame toneIndigo
```

## Components

### Game modes

- [Keyboard game](https://github.com/ankitgundewar/adaptive_difficulty-leveraging_reinforcement_learning_for_player_driven_immersion/blob/main/game.py): `game.py`
- [Adverse system](https://github.com/ankitgundewar/adaptive_difficulty-leveraging_reinforcement_learning_for_player_driven_immersion/blob/main/AdverseGame.py): `AdverseGame.py`
- [Random platforms](https://github.com/ankitgundewar/adaptive_difficulty-leveraging_reinforcement_learning_for_player_driven_immersion/blob/main/playerRL.py): `playerRL.py`
- [Fixed variant A](https://github.com/ankitgundewar/adaptive_difficulty-leveraging_reinforcement_learning_for_player_driven_immersion/blob/main/playerRandom.py): `playerRandom.py`
- [Fixed variant B](https://github.com/ankitgundewar/adaptive_difficulty-leveraging_reinforcement_learning_for_player_driven_immersion/blob/main/playerRandom2.py): `playerRandom2.py`

### RL agents

- [Platform DQN](https://github.com/ankitgundewar/adaptive_difficulty-leveraging_reinforcement_learning_for_player_driven_immersion/blob/main/DQN.py): `DQN.py`
- [Player DQN](https://github.com/ankitgundewar/adaptive_difficulty-leveraging_reinforcement_learning_for_player_driven_immersion/blob/main/playerDQN.py): `playerDQN.py`

### Game resources

- [Images](https://github.com/ankitgundewar/adaptive_difficulty-leveraging_reinforcement_learning_for_player_driven_immersion/tree/main/assets): `assets`
- [Screenshot buffer](https://github.com/ankitgundewar/adaptive_difficulty-leveraging_reinforcement_learning_for_player_driven_immersion/tree/main/buffer): `buffer`

### Other components

- **Player**
- **Pygame runtime**

## Connections

- Player → Keyboard game: controls
- Keyboard game → Pygame runtime: renders and polls
- Keyboard game → Platform DQN: chooses platforms
- Adverse system → Pygame runtime: renders and polls
- Adverse system → Platform DQN: trains platform policy
- Adverse system → Player DQN: trains player policy
- Random platforms → Pygame runtime: renders and polls
- Random platforms → Player DQN: selects and trains actions
- Fixed variant A → Pygame runtime: renders and polls
- Fixed variant A → Player DQN: uses player policy
- Fixed variant B → Pygame runtime: renders and polls
- Fixed variant B → Player DQN: uses player policy
- Keyboard game → Images: loads images
- Adverse system → Images: loads images
- Random platforms → Images: loads images
- Fixed variant A → Images: loads images
- Fixed variant B → Images: loads images
- Adverse system → Screenshot buffer: writes screenshot
