Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #64, МАРТ 2006 г.

сетевые игры

КРИС КАСПЕРСКИ АКА МЫЩЪХ

Спецвыпуск: Хакер, номер #064, стр. 064-062-1


РЕШЕНИЕ ПРОБЛЕМ ПРИ РЕАЛИЗАЦИИ

СЕГОДНЯ КАЖДАЯ УВАЖАЮЩАЯ СЕБЯ ИГРА ОБЯЗАНА ПОДДЕРЖИВАТЬ МУЛЬТИПЛЕЕР — РЕЖИМ, ПРЕДНАЗНАЧЕННЫЙ ДЛЯ НЕСКОЛЬКИХ ИГРОКОВ, СВЯЗАННЫХ ЛОКАЛЬНОЙ СЕТЬЮ, МОДЕМОМ ИЛИ ИНТЕРНЕТОМ. НА ПЕРВЫЙ ВЗГЛЯД, ПРОСТАЯ ОБЯЗАННОСТЬ, НО ПОПЫТКА ПРАКТИЧЕСКОЙ РЕАЛИЗАЦИИ ОТКРЫВАЕТ ЦЕЛЫЙ ВОРОХ ПРОБЛЕМ, КОТОРЫЕ ИНОГДА ТРЕБУЮТ НЕОБЫЧНЫХ РЕШЕНИЙ

Когда игровые миры соприкасаются

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

Идея: чтобы организовать сетевую игру, достаточно загнать весь ввод-вывод в магистральный кабель, реализовав удаленный монитор и клавиатуру (джойстик/мышь). Получится точно так же, как и раньше, только намного круче. С клавиатурой все просто, но чтобы осуществить передачу видеоизображения в реальном времени, даже если применить компрессию, понадобится локальная сеть или, по меньшей мере, DSL.

Игра для двух игроков

Рассмотрим простейший случай — игру для двоих игроков. Один компьютер будет «ведомым», второй — «ведущим». Ведущий компьютер обсчитывает игровое пространство, управляет движением монстров (если они есть), обрабатывает столкновения и т.д. Для синхронизации игровых миров все события игрового пространства (перемещение объектов, взрывы мин, полеты торпед) передаются ведомому компьютеру, который отображает события на экране и отмечает их на своей карте. При этом неявно предполагается, что обе карты (ведомого и ведущего компьютеров) абсолютно идентичны. Если же в игровом пространстве присутствуют случайные элементы (например аптечки, расставленные в разных местах), они должны быть переданы ведомому компьютеру, что достаточно сделать всего один раз — перед началом игры. При желании можно даже передать всю карту целиком (нужно учитывать, что ведущий компьютер может использовать дополнительные или «самопальные» миссии, которых нет у ведомого). Ведомый компьютер, в свою очередь, управляет локальным игроком, отслеживая нажатия клавиш и отправляя эту информацию ведущему.

Из локальной сети в интернет

Кажется, что все просто и никаких граблей здесь нет. В локальной сети — может быть, но передача данных через интернет сопряжена с периодичными задержками. Если не предпринять дополнительных мер, монстры будут двигаться как припадочные. Как же быть? А что если передавать не сами перемещения, а их предполагаемый сценарий? Обычно движение монстров подчиняется набору шаблонов, и компьютеру достаточно передать что-то типа «Двигайся от меня и до обеда/упора», «Атакуй по сценарию D» или «Уклоняйся по сценарию A». Количество передаваемой информации резко сокращается, и для обеспечения синхронизации становится достаточно периодически (скажем раз в секунду) передавать «квитки», сигнализирующие о пересечении объектом некоторой клетки игрового поля. Очевидно, что такой протокол передачи устойчив даже к длительным задержкам, что немаловажно при работе на сильно загруженных каналах.

Содержание  Вперед на стр. 064-062-2