Книга: Multiplayer Game Programming: Architecting Networked Games (2015)
Перед новым годом я неожиданно для себя самого закончил все личные микропроектики и дочитал последнюю из запланированных на уходящий год книг, и руки дошли до Multiplayer Game Programming за авторством Джошуа Глейзера и Санджая Мархава (англ. Joshua Glazer и Sanjay Madhav).
Заходят авторы издалека, начиная с устройства сетей в целом, потом - стека TCP/IP, в результате представляя код оберток вокруг интерфейсов TCP- и UDP-сокетов.
После сетей объясняются центральные задачи движков многопользовательских игр: синхронизация состояния игрового мира, и следующие из нее топология сетей (p2p или клиент-серверная архитектура) сериализация объектов, преодоление задержек и так далее. По ходу дела разрабатываемая библиотека начинает использоваться в коде демонстрационных игр.
Сам для себя из книги я вынес два основных архитектурных решения для синхронизации состояния мира: распространение команд и распространение положения игровых сущностей.
- В распространении команд состояние синхронизируется передачей на все машины команд игроков, после чего каждая машина проигрывает результаты выполнения команд у себя. Подход этот используется обычно в стратегиях в реальном времени (real-time strategies), когда юнитов слишком много, чтобы можно было синхронизировать все их перемещения.
- Если юнитов немного, и каждому соответствует единственный игрок, то проще состояние распространять в сети для каждого из активных юнитов-игроков. Подход популяризован играми компании idSoftware и до сих считается стандартом для шутеров от первого лица.
Баланс теории и практики, как мне кажется, соблюдается; пускай финальные главы, обсуждающие большие фреймворки, играют роль наполнителя.
Резюме: материал качественный, примеры рабочие, преподавательский опыт авторов чувствуется, и для для начинающих игроделов книга вполне подходит. Каждая глава, что достойно как минимум поощрения, сопровождается ссылками на источники и дополнительные материалы, в том числе статьи, книги или даже код.
Впрочем, лично мне было скучновато в очередной раз читать про сокеты и сети, тем более что по-настоящему тема здесь не раскрывается; но любопытно было ознакомиться с типовыми подходами в играх.