Контакты

Как создать сетевую игру

Симулятор боёв на кораблях, который создал 17-летний Сергей Качмар.

Ученик ростовской школы не только запустил многопользовательскую игру, но и наладил прием платежей через «Единую кассу» Wallet One . Мы поговорили с ним о том, как найти время для создания собственной игры и как на этой игре можно заработать.

Дайте мне знать, если вы хотите получить более подробную информацию о любом из этих материалов или если у вас есть более конкретные вопросы. Как синхронизировать ситуацию? Примечание. Какие вещи следует вычислять локально и какие вещи на сервере? Мы вычисляем все, что связано с логикой игры на сервере. Клиент будет прогнозировать определенные события, чтобы сделать игру гладко. Но в итоге сервер всегда прав.

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

Привет! Где взять время на такой большой проект, когда есть куча других дел?

Дело в том, что когда учишься в школе, найти свободное время не так сложно, ведь остается свободной, можно сказать, целая вторая половина дня. Почти всю ее и посвящал разработке проекта. А это почти несколько часов практически каждый день.

Чему нужно научиться, чтоб запустить свою игру?

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

Некоторые дополнительные глобальные службы необходимы с помощью: при входе в систему клиентам необходимо будет подключиться к правильному серверу зоны. И вам может понадобиться всемирная чат-система. Вы когда-нибудь задумывались, как работают многопользовательские игры?

Даже не знаю, могу ли я тут что-то советовать. Многие начинают с реализации как-то несложных игр, постепенно развивая свои проекты. Со временем люди получают более масштабные игры, как выросшие из маленьких, так и задуманные как крупные. С точки зрения конкретного обучения и того, что нужно осваивать - конечно же, языки программирования, причем серьезно. Я изучал Pascal, С# и HLSL. Движок написал самостоятельно. Стоит изучать дизайн, так как необходимо рисовать много элементов. Много чему приходится учиться, иногда в процессе.

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

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

Какой из этих вариантов твой? Расскажи, какие этапы были пройдены в создании и развитии игры?

Разработка этого проекта по сути являлась еще и обучением. Я открывал для себя новые возможности, постепенно создавая рендер, сетевую платформу, игровое ядро, работая с клиентской серверной частью. Разработку игры я начал в середине 2012 года, Первый прототип игры был создан в 2D, после началась работа над 3D-версией. И вот, 30 июня этого года началось бета-тестирование.

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

Кто тебе помогал?

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

Во что ты сам играешь? Изменились ли твои игровые предпочтения после запуска собственной игры?

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

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

Расскажи немного про то, как как можно зарабатывать на подобной игре?

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

Другими словами, перед тем, как вы могли повернуть, переместиться или стрелять, вам пришлось ждать ввода от самого отсталого модемного игрока. Теперь, вместо того, чтобы каждый игрок выполнял один и тот же код игры и общался напрямую друг с другом, каждый игрок теперь был «клиентом», и все они общались только с одним компьютером, называемым «сервером». Больше не нужно было, чтобы игра была детерминированной на всех машинах, потому что игра действительно существовала только на сервере. Каждый клиент фактически действовал как немой терминал, показывающий приближение игры, когда он играл на сервере.

Бизнес-модель - free-to-play, это значит, что скачать игру и играть можно абсолютно бесплатно, но в игре есть магазин различных платных предметов, причем в игре можно купить не столько платную валюту, сколько, например, различные дизайны для корабля и всякие полезные предметы.


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

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

Легко ли было разобраться с приемом платежей, учитывая что раньше у тебя опыта в этом не было?

На мой взгляд, когда первый раз в жизни встречаешься с платежными системами, все они кажутся довольно сложными. Но когда я увидел «Единую кассу» Wallet One , то решил, что на самом деле все может оказаться проще, чем я думал. Поэтому я сразу же все это дело прикрутил к сайту и стал разбираться.

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

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

Я думаю, есть смысл продолжать развивать эту игру. Можно сказать, что сейчас она не совсем еще доработана, судя по мнению текущих игроков, мне действительно стоит продолжать ее развивать: добавлять новые режимы, добавлять новые корабли и так далее.

Навигация по статье:

Теперь вы можете удивиться. Эй, если вы используете код на клиенте - почему бы просто не сделать клиента авторитетным по отношению к своему игровому персонажу? Клиент может запускать код моделирования для своего персонажа и просто указывать серверу, где они каждый раз при отправке пакета.

Вот где это становится интересным. Если клиент и сервер не согласны, клиент должен принять обновление для позиции с сервера, но из-за задержки между клиентом и сервером эта коррекция обязательно в прошлом. Например, если он берет 100 мс от клиента к серверу и обратно 100 мс, то любая коррекция сервера для позиции персонажа игрока будет казаться 200 м в прошлом, относительно времени, до которого клиент предсказал свое движение.

1. Введение. Основные понятия организации многопользовательских игр.

Как мы все знаем, для многопользовательской игры мы должны быть подключены к локальной сети или интернету. За счет которых клиент игры получает данные от сервера или от других игроков. Данные могут содержать информацию различного рода: позиция игрока, смена инвентаря, текст в чате, действия игроков и многое другое. Обычно данные отправляются "пачками", т.е. берутся определенные параметры (позиция игрока, угол поворота, выбранное оружие и т.д.) и располагаются в массиве в определенной последовательности, после чего отправляется весь массив. Это позволяет уменьшить пинг между игроками, т.к. частая отправка маленьких пакетов данных намного медленней чем редкая отправка массива данных. Для организации обмена данными между клиентами в основном используются две схемы: клиент-сервер, клиент-клиент.

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

! Клиент-сервер - в этой схеме создается сервер игры, к которому подключаются клиенты. Главным выступает сервер, клиенты только отправляют ему данные и получают их, связи между клиентами нет. При использовании данной схемы у сервера появляется возможность перед отправкой данных всем игрокам откорректировать данные. Данная схема является наиболее распространенной, т.к. снимает нагрузку с клиента, переводя всю работу по рассылке данных на сервер.

Пример: к серверу подключено 10 игроков. Игрок 1 отправил серверу информацию, после чего сервер обработал ее и отправил эту информацию остальным 9-и игрокам.

! Клиент-клиент - один из клиентов запускает игру, после чего остальные игроки подключаются к нему. Происходит обмен данными между клиентами и они узнают информацию друг о друге. В данной схеме каждый клиент отправляет данные остальным сам. Данная схема используется редко, т.к. дает неоправданную нагрузку на клиент игры.

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

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

Если вы хотите сэкономить деньги и играть вместе с друзьями, вы можете попробовать многопользовательский режим в игре. Здесь до 16 фермеров могут заказывать поля и разводить животных одновременно. Что вы должны обратить внимание в многопользовательском режиме, вы узнаете в этой статье.

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

Моделирование 17: многопользовательская игра

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

Для передачи данных есть несколько видов протоколов (TCP, UDP, IPX и т.д.), каждый из которых обладает своими особенностями. К примеру протокол UDP не гарантирует доставку данных и их порядок, поэтому придется проверять пришли данные или нет и корректировать их порядок. В свою очередь TCP протокол гарантирует доставку данных и их порядок, но имеет меньшую скорость чем UDP.

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

  • Вы можете указать номер версии, отображаемый в игре.
  • Если это не так, этим фермерам необходимо загружать обновления.
  • В настройках многопользовательского режима вы также можете выбрать.
  • Так что сравните заранее, какие изменения вы все установили.
Вы все еще ищете все золотые самородки?

! Game Maker поддерживает следующие типы подключений: IPX, TCP/IP, Modem и Serial.

В данной статье будет рассмотрен TCP/IP набор сетевых протоколов, т.к. остальные виды, которые поддерживает Game Maker уже почти не используются или не используются вовсе. Сразу стоит оговориться, что он не создан для организации среднестатистических ММО игр, но для кооператива из 2-6 игроков или простой ММО игры вполне подойдет.

Понравилась статья? Поделитесь ей