2026-05-04 03:42:47 +02:00
2026-05-04 03:42:47 +02:00
2026-05-04 03:42:47 +02:00
2026-05-04 03:42:47 +02:00

Soulgate

Jeu coop 3 joueurs en ligne, jouable dans le navigateur. Horde survival isométrique : on défend un portail (le Soulgate) contre 3 vagues d'ennemis avec 2 boss à la fin.

Projet de fin d'année DSP — CNAM Paris.

Stack

  • Serveur : Python 3.13, FastAPI, WebSocket
  • Client : JavaScript (ES modules), PixiJS 8 (WebGL)
  • BDD : SQLite (leaderboard)
  • Tests : pytest

Le serveur est autoritaire : il fait tous les calculs et envoie le state aux clients 20 fois par seconde via WebSocket.

Setup

Serveur

# venv + dépendances
python3 -m venv server/.venv
source server/.venv/bin/activate
pip install -r server/requirements-dev.txt

# lancer
cd server
uvicorn main:app --reload --host 0.0.0.0 --port 8000

Client

Le client a besoin d'être servi en HTTP (pas en file://) à cause des ES modules.

cd client
python3 -m http.server 3000

Puis ouvrir http://localhost:3000 dans 3 navigateurs (ou onglets).

Tester

cd server
pytest tests/

49 tests, tous en vert.

Contrôles

Action Touche
Déplacement ZQSD ou flèches
Attaque Clic gauche
Compétences 1, 2
Déplacement spécial E

Comment jouer

  1. Tape ton pseudo
  2. Un joueur clique Create Game (il devient host) et partage le code à 6 lettres
  3. Les 2 autres font Join Game et entrent le code
  4. Chacun choisit une classe (Kael / Seris / Aldric) puis clique Ready
  5. Le host lance la partie avec Start Game
  6. Survivez aux 3 vagues, achetez des upgrades entre les vagues, battez Vexaris (vague 2) puis Morveth (vague 3)

Structure

soulgate/
├── server/         backend Python (FastAPI + game loop)
├── client/         frontend JS + assets
└── README.md

Notes

  • Une seule partie active à la fois sur le serveur (mono-instance)
  • Les sprites des persos / ennemis sont en pixel art, fait à la main
  • L'arène est faite avec Tiled (assets Kenney isometric-miniature-dungeon, CC0)
Description
No description provided
Readme 9.4 MiB
Languages
JavaScript 43.3%
Python 40.3%
CSS 9.4%
HTML 7%