Система возрождения в глазах программиста
(Автор: Стюарт, разработчик)
В прошлый раз мы завели с вами
разговор о новой системе возрождения, над которой мы сейчас работаем. Сегодня мы собираемся углубиться в техническую сторону этого вопроса. Это первая статья в блоге, которую написал один из членов команды программистов. Стюарт расскажет нам о процессе создания системы возрождения. Специально для тех, кто плохо знаком с программированием, мы расскажем о некоторых основных принципах разработки чего-либо.
ОсновыКак и любая другая компьютерная программа,
APB состоит из двух основных ингредиентов:
Кода, который представляет собой список инструкций: сообщает компьютеру, что и когда нужно сделать;
Данных, содержащих информацию об игровом мире и обо всех составляющих этого мира.
Мы пишем код, который работает с данными, превращая строки текста в игру. Вот только их взаимодействие устроено специфическим образом.
В
APB всё является
объектом. Программисты рассматривают игру именно как набор объектов. Объектом называют небольшой автономный кусок кода и часть данных. Взаимодействие объектов заставляет игру работать.
Код
APB невероятно сложен, но во время разработки я могу сфокусироваться на одном объекте, не беспокоясь о чем-то еще. В
APB тысячи объектов, и все они взаимодействуют друг другом.
По бо̀льшей части объекты соответствуют предметам в игре. Каждый персонаж — это объект, каждый автомобиль, пешеход, светофор или пожарный гидрант — всё это объекты. В игре также присутствуют объекты, которые нельзя увидеть. Хорошим примером являются зоны возрождения — они располагаются в конкретном месте, но представляют собой пустую область. Некоторые объекты (такие как расчет повреждений или запуск миссий) работают незаметно для игрока.
В APB всё является объектомВсе объекты в
APB представляют собой иерархическую модель данных. Мы можем выделить два вида взаимодействия объектов.
«Один объект преобладает над другим».
Волна возрождения — это группа персонажей, которые возродятся в одно время. Так как в
APB всё является объектом, можно сказать, что мы создали новый объект (волну возрождения). Персонажи волны всегда будут из одной команды, значит, они образуют
объект команды.
Скажем, объект команды владеет объектом волны возрождения. Это значит, что объект волны зависит от объекта команды. Другими словами, объект команды отвечает за создание объекта волны возрождения и помещает туда персонажей после их смерти.
Второй способ взаимодействия объектов можно охарактеризовать так:
«Один объект является разновидностью другого объекта».
Одной из особенностей новой системы возрождения является возможность возрождаться прямо в автомобиле. Раньше можно было возрождаться лишь в зонах возрождения, заранее разбросанных по карте.
Мы используем термин «точка возрождения» — это точка, где вы можете возродиться. Зона возрождения — это разновидность точки возрождения, тогда автомобиль — одна из разновидностей точки возрождения.
Важно понимать, что новая система возрождения предназначена для работы с точками возрождения. Ей не важно, что именно является точкой возрождения. Тип точки возрождения задается в конкретном объекте. Это значит, что в теории мы можем использовать что-нибудь еще в виде точки возрождения. Получается, нам не придется изменять саму систему возрождения, если нам понадобиться поработать над точками возрождения.
Новая системаИтак, мы решили разработать новую систему возрождения. Сначала нужно было четко определиться, чего мы хотим достичь. Наш дизайнер подготовил документ, в котором изложил основные требования к новой системе:
Выбор точки возрождения: игрок выбирает место возрождения самостоятельно на карте района.
Волны возрождения: позволяют взаимодействовать с возрождающимися членами команды.
Возрождение игрока прямо в автомобиле.
Большая часть информации была представлена в виде временной шкалы, которая описывала ход действий от момента смерти персонажа до его возрождения:
Персонаж умирает и присоединяется к волне возрождения.
Камера показывает модель умершего персонажа.
Появляется карта возрождения с таймером. Она представляет собой карту района, отображающую точки возрождения и автомобили для данной волны возрождения. Одна точка по умолчанию выбрана.
Игрок может выбирать другие точки. Он также может следить за действиями своих напарников.
Точка возрождения пропадает, если рядом с ней оказывается соперник. Это может привести к недействительности выбора игрока, ему придется выбрать другую точку.
Когда таймер достигает нуля, игрок возрождается в выбранной точке. Если выбранная точка оказалось недоступной, и игрок не выбрал другую, то появляется красный таймер.
Если игрок кликает по точке возрождения во время красного таймера, то он мгновенно возрождается.
Если игрок не меняет точку возрождения, то после таймера игра сама выбирает точку и возрождает игрока.
В документе каждый шаг был описан более подробно, а также содержал графические наброски:
Пример интерфейса новой системы возрождения. Условные обозначения.
Примечание: Видимость противника работает таким же образом, как и радар. Соперника видно, если он движется в автомобиле или стреляет. Мы организовали несколько встреч, на которых обсудили тонкости этого документа, обозначали основные моменты, которые должен был реализовать программист. Сам же процесс создания называется реализацией.
Клиент против сервераУ каждой медали есть обратная сторона,
APB — не исключение. Существуют клиент игры (с которым вы хорошо знакомы) и сервер, который поддерживает мир игры и позволяет играть с другими людьми.
Перед разработкой мы должны спросить у себя: какие функции новой системы будет выполнять сервер, а какие клиент? Другими словами, кто за что отвечает?
В нашем случае сервер имеет высшую власть. Он имеет полный контроль над миром игры:
удаляет персонажей из мира после их смерти и возвращает их обратно,
создает волны возрождения и помещает в них персонажей,
выбирает лучшую точку возрождения,
ищет автомобили с нужным модификатором,
подтверждает выбор игрока.
Клиент игры не может обрабатывать информацию, которая затрагивает других игроков. Клиент лишь:
выводит на экран карту возрождения,
фиксирует выбор игрока.
Разделив обязанности, мы поняли, какую информацию необходимо передавать между клиентом и сервером. Сервер должен отправлять информацию о точках возрождения данной волне. Клиент должен посылать информацию о выбранной точке серверу.
Исключения из правилНовая система возрождения должна справляться с нестандартными ситуациями (когда всё идет не так, как задумано). Мы пытаемся обыграть в голове такие случаи и найти решение. Вот некоторые из них:
Что делать, если выбранный для возрождения автомобиль взорвется? Запретить возрождение в поврежденных автомобилях.
Что делать, если миссия закончится в тот момент, когда вы выбираете точку возрождения?
Что делать, если вас удалили с миссии, пока вы выбирали место возрождения?
Такое происходит редко, но на эти моменты нельзя закрывать глаза.
Поиск и решение казусных случаев может отнять много времени, особенно на стадии тестирования. Тем не менее, мы прибегли к небольшой хитрости — установили таймер возрождения на 60 секунд. Конечно, в игре будет не так, но это дает нам достаточно времени для проведения тестов.
Что ж, теперь вы представляете, как видит игру программист. В следующий раз мы расскажем об…
А картинка выше вообще похожа на какое то школярское произведение искусства
К сожалению, возможность оставлять комментарии доступна только зарегистрированным пользователям! Пожалуйста, авторизуйтесь сейчас или зарегистрируйтесь.
Если вы уже прошли процедуру авторизации, попробуйте обновить страницу.