Разработка игрВеб-разработкаИзбранное

Bannermarch

Постоянная средневековая стратегия в браузере о развитии Дома через феоды, союзы, рынки и войны.

ReactTypeScriptCloudflare WorkersDurable ObjectsSQLiteWebSockets
Одинокий рыцарь смотрит на поселение у реки, караван, марширующих солдат и далекую крепость на холме под грозовыми тучами.

Я создал Bannermarch как постоянную браузерную стратегию, в которой игрок начинает безземельным рыцарем и развивает Дом с несколькими феодами. Мир продолжает жить, даже когда браузер закрыт. Игроки управляют производством, строят здания, нанимают пехоту, перемещают ресурсы и армии, совершают набеги на соперничающие Дома, заключают союзы, торгуют через рынки с перевозкой товаров и отслеживают каждый результат в Хронике. Клиент работает на React и TypeScript, а Cloudflare Workers, Durable Objects на базе SQLite и WebSockets делают симуляцию авторитетной и постоянной.

Проблема

Постоянная стратегия должна поддерживать развитие экономики, перемещения и конфликты во время долгого отсутствия игроков, не доверяя браузеру и не запуская дорогой глобальный игровой цикл. Многопользовательские действия также должны разрешаться по актуальному состоянию, даже если два Дома действуют почти одновременно.

Подход

Клиент на React отвечает за представление и отправляет команды авторитетному Cloudflare Worker. Durable Objects на базе SQLite управляют каждым Домом и общими системами мира. Состояние, зависящее от времени, вычисляется отложенно при возвращении игрока, а сигналы обрабатывают события, которые не могут ждать следующего входа. Отдельные боевые сессии WebSocket передают проверенные снимки состояния для коалиционных сражений в реальном времени.

Ключевые решения

  • Авторитет сервера для экономики, кампаний, рынков и боя. Клиент никогда не определяет исходы, влияющие на другого игрока.
  • Отложенное вычисление ресурсов вместо глобального тика. Каждое чтение или действие сначала учитывает прошедшее время, ограничения хранилища и предел накопления в 72 часа.
  • Отдельные Durable Objects для Домов, Хроник, регионов, союзов, дипломатии, рынков, территорий, войн, переписки и учетных записей.
  • Идемпотентные действия и транзакции SQLite не позволяют повторным запросам дублировать строительство, отправления, найм или награды.
  • Боевые сессии WebSocket сохраняют отзывчивость поля боя, а Durable Object остается источником истины.
  • Вход по паролю и через Google, одноразовое восстановление, сессии HttpOnly, проверки Turnstile и локализованные письма Герольда работают на одной платформе Worker.

Статус

Играбельная альфа доступна на play.bannermarch.com и активно развивается. Текущая версия включает экономику нескольких феодов, набеги на NPC и игроков, союзы, договоры, рынки с перевозкой товаров, территориальные войны, оккупации, переписку и коалиционные сражения в реальном времени.

Нужна похожая работа для вашей команды?

Senior-инжиниринг AI-, cloud- и web-продуктов: от архитектуры до продакшена.