War Seasons

Mon fil rouge devenu un vrai jeu : tower defense en architecture hexagonale, quatre cartes saisonnières, multijoueur temps réel, en production sur mon VPS.

  • Next.js
  • TypeScript
  • Phaser
  • Spring Boot
  • Java
  • WebSocket
  • PostgreSQL
  • Docker
  • CI/CD
  • Architecture hexagonale
  • Canvas
🌐 Voir le site en ligne ↗
War Seasons

Besoin

Faire passer mon projet fil rouge d’un prototype d’école à un vrai jeu en ligne : robuste, maintenable et avec sa propre identité visuelle.

Mon rôle

Seul sur tout le projet, de l’architecture au déploiement, jusqu’à la direction artistique.

Résultat

Jeu en ligne sur kcd-formes.fr : solo, duel 1v1 et coop en temps réel sur quatre cartes saisonnières, déployé automatiquement à chaque push.

Difficulté résolue

Ma première architecture hexagonale, tenue jusqu’au bout : multijoueur, simulation serveur et 100+ tests branchés sans toucher au cœur du jeu. Puis des règles saisonnières (crues, grêle, boue, brume) écrites une seule fois dans le domaine et partagées par le solo et le moteur temps réel.

Détails techniques

Reprise de mon projet fil rouge de 2ᵉ année (anciennement KCD Formes), entièrement réarchitecturée puis devenue War Seasons : un tower defense médiéval-fantasy en ligne.

  • Architecture hexagonale (ports & adapters) : le domaine métier (tours, ennemis, vagues, économie, terrain saisonnier) est isolé des détails techniques (JPA/PostgreSQL, REST, WebSocket).
  • Quatre cartes, quatre saisons : au printemps, le château est au milieu d'un lac et des crues neutralisent les tours d'une berge ; la grêle rend les ennemis plus vulnérables. En automne, la boue ralentit les ennemis (sauf les géants) et la brume réduit la portée des tours ; toutes deux changent de place à chaque vague.
  • Simulation côté serveur : les vagues sont résolues sur le serveur puis rejouées à l'écran ; les règles saisonnières sont partagées par le solo et le moteur temps réel. 100+ tests unitaires et un harnais d'équilibrage multi-graines.
  • Multijoueur temps réel (WebSocket/STOMP) : Versus 1v1 (envoi d'ennemis chez l'adversaire, aperçu live de sa grille) et Coop ; chat de match et tutoriel contextuel.
  • Frontend Next.js / TypeScript + Phaser : 5 tours avec évolution et modes de ciblage, boss à capacités, paliers de bonus, classement par carte ; météo animée (pluie, grêle, crues, brume) et décor de saison trié en profondeur.
  • Direction artistique : accueil animé en Canvas (ennemis en marche, tirs des tours, catapultes, météo de chaque saison), connexion sur un étendard qui se déroule, blason et charte unifiée sur tout le jeu.
  • DevOps : Docker multi-stage, reverse-proxy Caddy, HTTPS Let's Encrypt auto-renouvelé, CI/CD GitHub Actions (déploiement auto sur mon VPS OVH à chaque push) et banc de performance de la scène de jeu.

En ligne sur kcd-formes.fr.

En cours : une version mobile.

Aperçu du projet

Accueil
AccueilCarte de guerre animée en Canvas : ennemis en marche sur les routes, tirs des tours, catapultes et météo de chaque saison. La connexion se déroule sur un étendard.
Choix du royaume
Choix du royaumeQuatre cartes saisonnières, chacune avec un aperçu réel du champ de bataille, une phrase et un niveau de difficulté.
Printemps : Les Jardins éveillés
Printemps : Les Jardins éveillésChâteau au milieu du lac, attaqué par quatre voies qui convergent sur deux ponts, ici sous la grêle qui rend les ennemis plus vulnérables. Toutes les trois vagues, une crue noie une berge et neutralise ses tours.
Automne : Le Val des feuilles
Automne : Le Val des feuillesSerpentin coupé par un raccourci. La boue ralentit les ennemis (sauf les géants) et la brume réduit la portée des tours ; elles changent de place à chaque vague.
Hiver : La Fourche
Hiver : La FourcheLa route se divise en trois branches qui rejoignent le château par des angles différents : la défense doit couvrir chaque voie.
Salon coop
Salon coopCréer une partie à deux et partager son code, ou rejoindre un ami, sur la carte de son choix.
Me contacter