Многопользовательские игры

10.07.2012

Многопользовательские игры — это наиболее быстрорастущий и прибыльный сегмент игростроя. Все мы слышали о таких лидерах жанра, как World of Warcraft, Lineage, Танки Онлайн. В данной статье мы хотим дать краткий обзор технологиям, используемым при написании подобной игры.
Статья ни в коем случае не претендует на полноту изложения. По очевидным причинам мы не можем вместить весь материал, касающийся данной тематики в одну статью.

Massive online и multiplayer игры

Прежде всего, необходимо определиться с терминами. Все многопользовательские игры можно разделить на Massive online игры и просто multiplayer игры. Разница между ними довольно условна, и сводится к количеству игроков.

Технологии, необходимые для написания Massive online и multiplayer игр, также различные. Очевидно, что Massive online игры намного сложнее, чем просто multiplayer игры. Оба типа игр в большинстве случаев строятся по технологии клиент-сервер.

Peer-to-peer в играх используется редко. Сервером для Massive online игр обычно является либо выделенный сервер, либо кластер серверов, либо даже облачные серверы. Сервером для multiplayer игры обычно является одна из машин игроков. Сервер создает сессию. Другие игроки просто подсоединяются к нему.

Так как в большинстве случаев сервером для multiplayer игры является обычная клиентская машина, существует понятие выделенного (dedicated) сервера. Dedicated сервер — это обычный сервер игры с обрезанным функционалом. С этого сервера удалены все несвойственные серверу функции, такие как вывод графики, обработка ввода, физики и т.д.

Фактически, этот сервер может лишь принимать игроков и обеспечивать сетевую игру между ними. Как распределяются функции между клиентом и сервером в среднестатистической клиент-серверной игровой архитектуре? В большинстве случаев ситуацию стараются регулировать следующим образом — так как отношение сервер к клиентам один ко многим, нагрузку на сервер стараются минимизировать. Фактически, идеальный сервер должен лишь проверять правила игры. Обычно вся сложная игровая механика, включая физику, происходит на стороне клиента. Серверу отправляются лишь результирующие данные, которые он проверяет на валидность, после чего сервер рассылает эти данные остальным игрокам.

Два ключевых вопроса клиент-серверного взаимодействия — это ширина канала между клиентом и сервером, и латенси. Ширина канала – это количественная характеристика, которая показывает, какой объём информации может быть передан со стороны клиента на сервер и обратно за единицу времени. Латенси – это количество времени, которое необходимо одному пакету для того чтобы дойти с сервера на клиент или с клиента на сервер.

В практике программирования клиент-серверных приложений существует большое количество способов, которые позволяют уменьшить объем данных, необходимых для передачи между клиентом и сервером. Помимо этого есть технологии, которые позволяют симулировать на стороне клиента отсутствие задержки в передачи пакета между клиентом и сервером. Тоесть сгладить негативное влияние латенси.

Более подробно об этих технологиях и технологиях разработки клиент-серверных играх мы поговорим в соответствующих туториалах.

Обзор клиентсайд

Клиентсайд или сторона клиента – это та часть приложения, которая располагается на машине игрока. Эта сторона обычно ответственна за вывод графики, расчет игровой механики, симуляцию физики и ввод игрока.

Необходимо отметить, что самое сложные с точки зрения процессорного времени операции происходят именно на стороне клиента. Иначе ваш сервер не будет справляться с возложенной на него нагрузкой.

На стороне клиента используются обычные однопользовательские технологии, такие как графические и физические движки. Об этих технологиях вы можете узнать из наших туториалов.

Обзор серверсайд

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

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

Тоесть существует серверный движок, который менеджит сессии, пакеты, чаты игроков и прочее, а наша задача – написать для него расширение, которое вберет в себя уникальную для приложения логику. В качестве примера можно посмотреть движки Smartfox server 2 и Electrotank.

Заключение

Сетевые игры обычно строятся по архитектуре клиент-сервер. На стороне клиента используются обычные технологии, применяемые для однопользовательских игр. Сторона сервера представляет собой серверный движок с вкраплениями уникальной логики приложения. Обмен сообщениями между клиентом и сервером происходит по каналам TCP и UDP. Более подробную информацию и пример разработки многопользовательской игры вы можете взять из наших туториалов.

Заполнен: Общее
Присвоен тэг:

avatar

Об Авторе ()

sex, drugs & computer science!

Комментарии ()

Обратная URL | RSS фид комментариев

Страницы связанные с этим постом

  1. Пишем 2D RPG roguelike на C++ и Ogre3D | gameinstitute.ru: как написать игру? | 24.07.2012

Наверх