Développement de jeuxDéveloppement WebÀ la une

Bannermarch

Jeu de stratégie médiévale persistant dans le navigateur, centré sur l'essor d'une Maison à travers fiefs, alliances, marchés et guerres.

ReactTypeScriptCloudflare WorkersDurable ObjectsSQLiteWebSockets
Un chevalier solitaire domine une colonie fluviale, une caravane, des soldats en marche et un donjon lointain sous des nuages d'orage.

J'ai créé Bannermarch comme un jeu de stratégie persistant pensé pour le navigateur, où le joueur commence comme chevalier sans terre et développe une Maison sur plusieurs fiefs. Le monde continue d'avancer lorsque le navigateur est fermé. Les joueurs gèrent la production, construisent des bâtiments, recrutent de l'infanterie, déplacent ressources et armées, attaquent des Maisons rivales, forment des alliances, commercent sur des marchés avec transport et suivent chaque résultat dans la Chronique. React et TypeScript font fonctionner le client, tandis que Cloudflare Workers, des Durable Objects adossés à SQLite et les WebSockets rendent la simulation autoritative et persistante.

Le problème

Un jeu de stratégie persistant doit faire progresser les économies, les déplacements et les conflits pendant de longues absences sans faire confiance au navigateur ni exécuter une boucle de jeu globale coûteuse. Les actions multijoueurs doivent aussi être résolues à partir de l'état courant, même lorsque deux Maisons agissent presque au même moment.

L'approche

Le client React gère la présentation et envoie des commandes à un Cloudflare Worker autoritatif. Des Durable Objects adossés à SQLite contrôlent chaque Maison et les systèmes partagés du monde. L'état lié au temps est résolu à la demande au retour d'un joueur, tandis que des alarmes traitent les événements qui ne peuvent pas attendre la prochaine connexion. Des sessions de bataille WebSocket dédiées diffusent des états validés pour les combats de coalition en temps réel.

Décisions notables

  • Autorité serveur pour l'économie, les campagnes, les marchés et les combats. Le client ne décide jamais d'un résultat qui affecte un autre joueur.
  • Évaluation différée des ressources au lieu d'un tick global. Chaque lecture ou action résout d'abord le temps écoulé, avec des limites de stockage et un plafond d'accumulation de 72 heures.
  • Durable Objects spécialisés par domaine pour les Maisons, Chroniques, régions, alliances, la diplomatie, les marchés, territoires, guerres, la correspondance et les comptes.
  • Actions idempotentes et transactions SQLite afin que les nouvelles tentatives ne dupliquent ni construction, ni livraison, ni recrutement, ni récompense.
  • Les sessions de bataille WebSocket gardent le champ de bataille réactif tandis que le Durable Object reste la source de vérité.
  • Connexion par mot de passe ou Google, récupération à usage unique, sessions HttpOnly, contrôles Turnstile et e-mails localisés du Héraut sur la même plateforme Worker.

État

L'alpha jouable est en ligne sur play.bannermarch.com et activement développée. La version actuelle comprend une économie multi-fiefs, des raids contre des PNJ et des joueurs, des alliances, des traités, des marchés avec transport, des guerres territoriales, des occupations, de la correspondance et des batailles de coalition en temps réel.

Vous souhaitez un travail similaire pour votre équipe ?

Ingénierie senior pour les produits IA, cloud et web, de l'architecture à la mise en production.