# mogara/qsanguosha architecture

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

## Overview

QSanguosha is a Qt-based online implementation of the Sanguosha board game. A player enters through the desktop application, joins a lobby or room, and plays through client/server messages that drive game state and present prompts, cards, and logs. The engine supplies shared game definitions, including packages, scenarios, cards, and Lua-backed extensions; server-side rules and AI support game execution. The README documents audio, font rendering, and Lua extension support. Some subsystem links are inferred from documented roles and the file tree because the sampled source is partial.

Main entry points: [`src/client/client.cpp`](https://github.com/mogara/qsanguosha/blob/master/src/client/client.cpp) (Game client), [`src/core/engine.cpp`](https://github.com/mogara/qsanguosha/blob/master/src/core/engine.cpp) (Game engine), [`src/main.cpp`](https://github.com/mogara/qsanguosha/blob/master/src/main.cpp) (Application startup), [`src/server/server.cpp`](https://github.com/mogara/qsanguosha/blob/master/src/server/server.cpp) (Network server)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Application and UI"]
  node_entry["Application startup<br/>[main.cpp]"]
  node_window["Main window<br/>[mainwindow.cpp]"]
  node_gameui["Game interface<br/>[roomscene.cpp]"]
  node_logui["Game log<br/>[clientlogbox.cpp]"]
end

subgraph group_rules["Game definitions"]
  node_engine["Game engine<br/>[engine.cpp]"]
  node_cards["Cards and skills<br/>[card.cpp]"]
  node_packages["Game packages<br/>[package.cpp]"]
  node_scenarios["Scenarios<br/>[scenario.cpp]"]
end

subgraph group_play["Online play"]
  node_client["Game client<br/>[client.cpp]"]
  node_server["Network server<br/>[server.cpp]"]
  node_room["Game room<br/>[room.cpp]"]
  node_ruleserver["Game rules and AI<br/>[gamerule.cpp]"]
  node_protocol["Message protocol<br/>[protocol.cpp]"]
end

subgraph group_integrations["Runtime integrations"]
  node_lua["Lua runtime<br/>[lua.c]"]
  node_audio["Audio service<br/>[audio.cpp]"]
  node_wifi["Wi-Fi discovery<br/>[wifimanager.cpp]"]
  node_crash["Crash reporting"]
end

node_player(("Player"))

node_player -->|"launches"| node_entry
node_entry -->|"creates"| node_window
node_entry -.->|"initializes"| node_audio
node_player -->|"uses"| node_window
node_window -->|"starts play"| node_client
node_client -->|"encodes messages"| node_protocol
node_server -->|"parses messages"| node_protocol
node_client -->|"sends packets"| node_server
node_server -->|"notifies"| node_client
node_server -->|"dispatches room packets"| node_room
node_room -->|"applies rules"| node_ruleserver
node_client -->|"updates interface"| node_gameui
node_client -->|"delivers logs"| node_logui
node_logui -->|"looks up cards"| node_engine
node_engine -->|"manages definitions"| node_cards
node_engine -->|"registers packages"| node_packages
node_engine -->|"registers scenarios"| node_scenarios
node_engine -.->|"uses scripting"| node_lua
node_window -.->|"discovers servers"| node_wifi
node_entry -.->|"uses crash handling"| node_crash

click node_entry "https://github.com/mogara/qsanguosha/blob/master/src/main.cpp"
click node_window "https://github.com/mogara/qsanguosha/blob/master/src/dialog/mainwindow.cpp"
click node_client "https://github.com/mogara/qsanguosha/blob/master/src/client/client.cpp"
click node_gameui "https://github.com/mogara/qsanguosha/blob/master/src/ui/roomscene.cpp"
click node_logui "https://github.com/mogara/qsanguosha/blob/master/src/ui/clientlogbox.cpp"
click node_engine "https://github.com/mogara/qsanguosha/blob/master/src/core/engine.cpp"
click node_cards "https://github.com/mogara/qsanguosha/blob/master/src/core/card.cpp"
click node_packages "https://github.com/mogara/qsanguosha/blob/master/src/package/package.cpp"
click node_scenarios "https://github.com/mogara/qsanguosha/blob/master/src/scenario/scenario.cpp"
click node_lua "https://github.com/mogara/qsanguosha/blob/master/src/lua/lua.c"
click node_server "https://github.com/mogara/qsanguosha/blob/master/src/server/server.cpp"
click node_room "https://github.com/mogara/qsanguosha/blob/master/src/server/room.cpp"
click node_ruleserver "https://github.com/mogara/qsanguosha/blob/master/src/server/gamerule.cpp"
click node_protocol "https://github.com/mogara/qsanguosha/blob/master/src/core/protocol.cpp"
click node_audio "https://github.com/mogara/qsanguosha/blob/master/src/core/audio.cpp"
click node_wifi "https://github.com/mogara/qsanguosha/blob/master/src/util/wifimanager.cpp"
click node_crash "https://github.com/mogara/qsanguosha/blob/master/src/breakpad/client/linux/handler/exception_handler.cc"

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_entry,node_window,node_gameui,node_logui toneBlue
class node_engine,node_cards,node_packages,node_scenarios toneAmber
class node_client,node_server,node_room,node_ruleserver,node_protocol toneMint
class node_lua,node_audio,node_wifi,node_crash toneRose
class node_player toneIndigo
```

## Components

### Application and UI

- [Application startup](https://github.com/mogara/qsanguosha/blob/master/src/main.cpp): `src/main.cpp`
- [Main window](https://github.com/mogara/qsanguosha/blob/master/src/dialog/mainwindow.cpp): `src/dialog/mainwindow.cpp`
- [Game interface](https://github.com/mogara/qsanguosha/blob/master/src/ui/roomscene.cpp): `src/ui/roomscene.cpp`
- [Game log](https://github.com/mogara/qsanguosha/blob/master/src/ui/clientlogbox.cpp): `src/ui/clientlogbox.cpp`

### Game definitions

- [Game engine](https://github.com/mogara/qsanguosha/blob/master/src/core/engine.cpp): `src/core/engine.cpp`
- [Cards and skills](https://github.com/mogara/qsanguosha/blob/master/src/core/card.cpp): `src/core/card.cpp`
- [Game packages](https://github.com/mogara/qsanguosha/blob/master/src/package/package.cpp): `src/package/package.cpp`
- [Scenarios](https://github.com/mogara/qsanguosha/blob/master/src/scenario/scenario.cpp): `src/scenario/scenario.cpp`

### Online play

- [Game client](https://github.com/mogara/qsanguosha/blob/master/src/client/client.cpp): `src/client/client.cpp`
- [Network server](https://github.com/mogara/qsanguosha/blob/master/src/server/server.cpp): `src/server/server.cpp`
- [Game room](https://github.com/mogara/qsanguosha/blob/master/src/server/room.cpp): `src/server/room.cpp`
- [Game rules and AI](https://github.com/mogara/qsanguosha/blob/master/src/server/gamerule.cpp): `src/server/gamerule.cpp`
- [Message protocol](https://github.com/mogara/qsanguosha/blob/master/src/core/protocol.cpp): `src/core/protocol.cpp`

### Runtime integrations

- [Lua runtime](https://github.com/mogara/qsanguosha/blob/master/src/lua/lua.c): `src/lua/lua.c`
- [Audio service](https://github.com/mogara/qsanguosha/blob/master/src/core/audio.cpp): `src/core/audio.cpp`
- [Wi-Fi discovery](https://github.com/mogara/qsanguosha/blob/master/src/util/wifimanager.cpp): `src/util/wifimanager.cpp`
- [Crash reporting](https://github.com/mogara/qsanguosha/blob/master/src/breakpad/client/linux/handler/exception_handler.cc): `src/breakpad/client/linux/handler/exception_handler.cc`

### Other components

- **Player**

## Connections

- Player → Application startup: launches
- Application startup → Main window: creates
- Application startup → Audio service: initializes
- Player → Main window: uses
- Main window → Game client: starts play
- Game client → Message protocol: encodes messages
- Network server → Message protocol: parses messages
- Game client → Network server: sends packets
- Network server → Game client: notifies
- Network server → Game room: dispatches room packets
- Game room → Game rules and AI: applies rules
- Game client → Game interface: updates interface
- Game client → Game log: delivers logs
- Game log → Game engine: looks up cards
- Game engine → Cards and skills: manages definitions
- Game engine → Game packages: registers packages
- Game engine → Scenarios: registers scenarios
- Game engine → Lua runtime: uses scripting
- Main window → Wi-Fi discovery: discovers servers
- Application startup → Crash reporting: uses crash handling
