Привет, Хаброжители! Ранее мы Вас спрашивали переводить ли книгу «Multiplayer Game Programming: Architecting Networked Games (Game Design)». Недавно новинка пришла из типографии.
В этой книге подробно рассматриваются все основные понятия, необходимые для создания сетевых многопользовательских игр. Вначале мы познакомимся с основами сетевых взаимодействий: как работает Интернет и как выполняется пересылка данных на другие компьютеры. Далее, после закладки фундамента, будут рассмотрены основы передачи данных в играх, как подготавливать игровые данные к передаче по сети, как изменять содержимое игровых объектов по сети и как организовать взаимодействие компьютеров, вовлеченных в игру. Затем мы поговорим о том, как компенсировать ненадежность соединения и задержки при передаче данных по сети и как обеспечить масштабируемость и безопасность игрового кода. В главах 12 и 13 рассматриваются службы объединения игроков для выделенных серверов и использование облачного хостинга — две темы, чрезвычайно важные для современных сетевых игр.
На страницах этой книги мы попытались совместить теорию c практикой: в большинстве глав не только обсуждаются важные понятия, но и приводятся примеры программного кода, необходимого для полноценной работы сетевой игры. На сайте книги вы найдете полные исходные коды двух игр. Одна из них — сюжетная игра (action game), а другая — стратегия в реальном времени (Real-Time Strategy, RTS). Чтобы помочь читателю в освоении рассматриваемых здесь тем, на протяжении всей книги мы будем изучать многочисленные версии этих двух игр.
Большая часть книги основана на программе обучения, разработанной для курса изучения программирования многопользовательских игр в Университете Южной Калифорнии. Она, в свою очередь, опирается на прекрасно зарекомендовавшую себя методику обучения разработке многопользовательских игр. Однако эту книгу не следует рассматривать только как учебное пособие — она пригодится любым разработчикам, желающим узнать, как создавать сетевые игры.
Несмотря на то что в приложении рассматриваются некоторые аспекты современного языка C++, используемого в книге, предполагается, что читатель хорошо знаком с этим языком программирования. Кроме того, предполагается, что читатель уже обладает базовыми знаниями о стандартных структурах данных, обычно рассматриваемых в курсе CS2. Для тех, кто не знаком с C++ или желает освежить в памяти сведения о структурах данных, мы рекомендуем отличную книгу Эрика Робертса (Eric Roberts) «Programming Abstractions in C++».
Также предполагается, что читатель имеет представление о технологии программирования однопользовательских игр. В идеале желательно, чтобы он имел представление об игровых циклах, приемах моделирования игровых объектов, векторной математике и основах игровой физики. Если вы не знакомы с этими вещами, вам следует сначала прочитать какую-нибудь вводную книгу о программировании игр, например «Game Programming Algorithms and Techniques» Санджая Мадхава.
Как упоминалось ранее, книга одинаково хорошо подходит и студентам, и игровым программистам, желающим освоить приемы создания сетевых игр. И даже те из вас, кто давно работает в игровой индустрии, но прежде не занимался созданием сетевых игр, найдут в этой книге немало полезного.
Подавляющее большинство примеров программного кода в этой книге написано на языке C++, потому что он фактически остается основным языком программирования, используемым в игровой индустрии и программистами, разрабатывающими игровые движки (game engine). Некоторые движки позволяют написать большую часть игры на других языках, например Unity — на C#, тем не менее важно помнить, что львиная доля низкоуровневого кода в таких движках все еще написана на C++. Поскольку главной темой книги является разработка сетевых многопользовательских игр, что называется, «с нуля», определенно имеет смысл рассматривать эту тему с использованием языка, на котором написаны игровые движки. Но даже если весь сетевой код для своих игр вы будете писать на каком-то другом языке, основные принципы останутся практически теми же. И все же весьма желательно, чтобы вы были знакомы с C++, иначе примеры кода будут вам непонятны.
Появившийся на свет как наспех сделанный язык сценариев для поддержки браузера Netscape, JavaScript эволюционировал до стандартизованного, полноценного и до некоторой степени функционального языка. Его популярность как языка клиентских сценариев помогла ему перебраться на сторону сервера, где его процедуры, имеющие форму объектов, простой синтаксис замыканий и динамическая типизация весьма эффективно ускоряют разработку служб, управляемых событиями. Программный код на этом языке труднее поддается рефакторингу и имеет худшую производительность, чем код на C++, что делает его не лучшим выбором для разработки клиентской части игр. Но эти качества не являются проблемой для серверной части, когда для вертикального масштабирования службы иногда достаточно лишь сдвинуть бегунок вправо. Примеры серверных служб в главе 13 написаны на JavaScript, и для их понимания требуется довольно близкое знакомство с этим языком. На момент написания книги JavaScript был, по оценкам GitHub, самым активно используемым языком. Его доля составляла 50 % всех проектов. Следование за тенденциями ради тенденций редко приводит к хорошим результатам, но умение программировать на самом популярном в мире языке дает определенные выгоды.
Для этой книги создан вспомогательный веб-сайт, на нем вы найдете ссылки на примеры кода из книги. Кроме того, там содержатся список ошибок и опечаток, ссылки на слайды PowerPoint и план курса обучения в университете.
Джошуа Глейзер (Joshua Glazer) — сооснователь и технический директор Naked Sky Entertainment, независимой студии, занимающейся разработкой игр для приставок и персональных компьютеров, таких как «RoboBlitz», «MicroBot», «Twister Mania», а кроме того, модных хитов для мобильных устройств: «Max Axe» и «Scrap Force». Как руководитель Naked Sky он консультировал несколько внешних проектов, включая «Unreal Engine» в Epic Games, «League of Legends» в Riot Games, «Destroy All Humans» в THQ и множество других проектов для Electronic Arts, Midway, Microsoft и Paramount Pictures.
По совместительству Джошуа читает лекции в Университете Южной Калифорнии, где и заинтересовался курсами по программированию многопользовательских игр и разработке игровых движков.
Санджай Мадхав (Sanjay Madhav) — старший преподаватель Университета Южной Калифорнии, ведет несколько курсов по программированию и созданию видеоигр. Основной из них — программирование игр для студентов старших курсов, который он читает с 2008 года. Также он ведет несколько других курсов, по таким темам, как игровые движки, структуры данных и разработка компиляторов. Является автором книги «Game Programming Algorithms and Techniques».
До поступления на работу в Университет Южной Калифорнии Санджай работал программистом в нескольких компаниях, занимавшихся разработкой видеоигр, включая Electronic Arts, Neversoft и Pandemic Studios. Участвовал в создании множества игр, включая «Medal of Honor: Pacific Assault», «Tony Hawk’s Project 8», «Lord of the Rings: Conquest» и «The Saboteur», — большинство из которых в той или иной степени можно назвать многопользовательскими сетевыми играми.
» Более подробно с книгой можно ознакомиться на сайте издательства
» Оглавление
» Отрывок
Для Хаброжителей скидка 25% по купону — Game
В этой книге подробно рассматриваются все основные понятия, необходимые для создания сетевых многопользовательских игр. Вначале мы познакомимся с основами сетевых взаимодействий: как работает Интернет и как выполняется пересылка данных на другие компьютеры. Далее, после закладки фундамента, будут рассмотрены основы передачи данных в играх, как подготавливать игровые данные к передаче по сети, как изменять содержимое игровых объектов по сети и как организовать взаимодействие компьютеров, вовлеченных в игру. Затем мы поговорим о том, как компенсировать ненадежность соединения и задержки при передаче данных по сети и как обеспечить масштабируемость и безопасность игрового кода. В главах 12 и 13 рассматриваются службы объединения игроков для выделенных серверов и использование облачного хостинга — две темы, чрезвычайно важные для современных сетевых игр.
На страницах этой книги мы попытались совместить теорию c практикой: в большинстве глав не только обсуждаются важные понятия, но и приводятся примеры программного кода, необходимого для полноценной работы сетевой игры. На сайте книги вы найдете полные исходные коды двух игр. Одна из них — сюжетная игра (action game), а другая — стратегия в реальном времени (Real-Time Strategy, RTS). Чтобы помочь читателю в освоении рассматриваемых здесь тем, на протяжении всей книги мы будем изучать многочисленные версии этих двух игр.
Большая часть книги основана на программе обучения, разработанной для курса изучения программирования многопользовательских игр в Университете Южной Калифорнии. Она, в свою очередь, опирается на прекрасно зарекомендовавшую себя методику обучения разработке многопользовательских игр. Однако эту книгу не следует рассматривать только как учебное пособие — она пригодится любым разработчикам, желающим узнать, как создавать сетевые игры.
Кому адресована эта книга
Несмотря на то что в приложении рассматриваются некоторые аспекты современного языка C++, используемого в книге, предполагается, что читатель хорошо знаком с этим языком программирования. Кроме того, предполагается, что читатель уже обладает базовыми знаниями о стандартных структурах данных, обычно рассматриваемых в курсе CS2. Для тех, кто не знаком с C++ или желает освежить в памяти сведения о структурах данных, мы рекомендуем отличную книгу Эрика Робертса (Eric Roberts) «Programming Abstractions in C++».
Также предполагается, что читатель имеет представление о технологии программирования однопользовательских игр. В идеале желательно, чтобы он имел представление об игровых циклах, приемах моделирования игровых объектов, векторной математике и основах игровой физики. Если вы не знакомы с этими вещами, вам следует сначала прочитать какую-нибудь вводную книгу о программировании игр, например «Game Programming Algorithms and Techniques» Санджая Мадхава.
Как упоминалось ранее, книга одинаково хорошо подходит и студентам, и игровым программистам, желающим освоить приемы создания сетевых игр. И даже те из вас, кто давно работает в игровой индустрии, но прежде не занимался созданием сетевых игр, найдут в этой книге немало полезного.
Почему C++?
Подавляющее большинство примеров программного кода в этой книге написано на языке C++, потому что он фактически остается основным языком программирования, используемым в игровой индустрии и программистами, разрабатывающими игровые движки (game engine). Некоторые движки позволяют написать большую часть игры на других языках, например Unity — на C#, тем не менее важно помнить, что львиная доля низкоуровневого кода в таких движках все еще написана на C++. Поскольку главной темой книги является разработка сетевых многопользовательских игр, что называется, «с нуля», определенно имеет смысл рассматривать эту тему с использованием языка, на котором написаны игровые движки. Но даже если весь сетевой код для своих игр вы будете писать на каком-то другом языке, основные принципы останутся практически теми же. И все же весьма желательно, чтобы вы были знакомы с C++, иначе примеры кода будут вам непонятны.
Почему JavaScript?
Появившийся на свет как наспех сделанный язык сценариев для поддержки браузера Netscape, JavaScript эволюционировал до стандартизованного, полноценного и до некоторой степени функционального языка. Его популярность как языка клиентских сценариев помогла ему перебраться на сторону сервера, где его процедуры, имеющие форму объектов, простой синтаксис замыканий и динамическая типизация весьма эффективно ускоряют разработку служб, управляемых событиями. Программный код на этом языке труднее поддается рефакторингу и имеет худшую производительность, чем код на C++, что делает его не лучшим выбором для разработки клиентской части игр. Но эти качества не являются проблемой для серверной части, когда для вертикального масштабирования службы иногда достаточно лишь сдвинуть бегунок вправо. Примеры серверных служб в главе 13 написаны на JavaScript, и для их понимания требуется довольно близкое знакомство с этим языком. На момент написания книги JavaScript был, по оценкам GitHub, самым активно используемым языком. Его доля составляла 50 % всех проектов. Следование за тенденциями ради тенденций редко приводит к хорошим результатам, но умение программировать на самом популярном в мире языке дает определенные выгоды.
Веб-сайт книги
Для этой книги создан вспомогательный веб-сайт, на нем вы найдете ссылки на примеры кода из книги. Кроме того, там содержатся список ошибок и опечаток, ссылки на слайды PowerPoint и план курса обучения в университете.
Об авторах
Джошуа Глейзер (Joshua Glazer) — сооснователь и технический директор Naked Sky Entertainment, независимой студии, занимающейся разработкой игр для приставок и персональных компьютеров, таких как «RoboBlitz», «MicroBot», «Twister Mania», а кроме того, модных хитов для мобильных устройств: «Max Axe» и «Scrap Force». Как руководитель Naked Sky он консультировал несколько внешних проектов, включая «Unreal Engine» в Epic Games, «League of Legends» в Riot Games, «Destroy All Humans» в THQ и множество других проектов для Electronic Arts, Midway, Microsoft и Paramount Pictures.
По совместительству Джошуа читает лекции в Университете Южной Калифорнии, где и заинтересовался курсами по программированию многопользовательских игр и разработке игровых движков.
Санджай Мадхав (Sanjay Madhav) — старший преподаватель Университета Южной Калифорнии, ведет несколько курсов по программированию и созданию видеоигр. Основной из них — программирование игр для студентов старших курсов, который он читает с 2008 года. Также он ведет несколько других курсов, по таким темам, как игровые движки, структуры данных и разработка компиляторов. Является автором книги «Game Programming Algorithms and Techniques».
До поступления на работу в Университет Южной Калифорнии Санджай работал программистом в нескольких компаниях, занимавшихся разработкой видеоигр, включая Electronic Arts, Neversoft и Pandemic Studios. Участвовал в создании множества игр, включая «Medal of Honor: Pacific Assault», «Tony Hawk’s Project 8», «Lord of the Rings: Conquest» и «The Saboteur», — большинство из которых в той или иной степени можно назвать многопользовательскими сетевыми играми.
» Более подробно с книгой можно ознакомиться на сайте издательства
» Оглавление
» Отрывок
Для Хаброжителей скидка 25% по купону — Game