Как связать игру

Обновлено: 25.05.2024

В 2014 году я впервые побывал на CodeDay в Нью-Йорке. И хотя CodeDay не совсем хакатон, это было моё первое знакомство с подобными мероприятиями. Там мы с моим другом Кеннетом Ли написали многопользовательскую игру в танчики. Так как несколько моих друзей спрашивали меня о том, как я её написал, я решил описать процесс её создания.

В этом посте я вкратце опишу ход своих рассуждений и покажу, как воссоздать архитектуру, а также дам некоторые советы, если вы захотите сделать игру сами. Этот пост рассчитан на тех, кто владеет основами JavaScript и Node.js. Если вы с ними не знакомы, то есть много замечательных онлайн-ресурсов, где можно их изучить.

Прим. перев. На нашем сайте есть много познавательных материалов как по JavaScript, так и по Node.js — обязательно найдёте что-нибудь подходящее.

Бэкенд игры написан на Node.js с использованием веб-сокетов, которые позволяют серверу и клиенту общаться в режиме реального времени. Со стороны клиента игра отображается в HTML5-элементе Canvas . Для начала нам, конечно же, понадобится Node.js. В этой статье описана работа с версией 6.3.1, но вы можете использовать любую версию выше 0.12.

Прим. перев. Если вы не знакомы с веб-сокетами, рекомендуем прочитать наш вводный материал.

Создание проекта

Для начала установите зависимости. Создайте папку проекта, перейдите в неё и запустите следующий код:

Для быстрой настройки сервера целесообразно использовать фреймворк Express, а для обработки веб-сокетов на сервере — пакет socket.io. В файл server.js поместите следующий код:

Это довольно типичный код для сервера на связке Node.js + Express. Он устанавливает зависимости и основные маршруты сервера. Для этого демонстрационного приложения используется только один файл index.html и папка static . Создайте их в корневой папке проекта. Файл index.html довольно простой:

Ваш пользовательский интерфейс может содержать куда больше элементов, поэтому для более крупных проектов CSS-стили лучше помещать в отдельный файл. Для простоты я оставлю CSS в коде HTML. Обратите внимание, что я включил в код скрипт socket.io.js . Он автоматически заработает в рамках пакета socket.io при запуске сервера.

Теперь нужно настроить веб-сокеты на сервере. В конец файла server.js добавьте:

Пока что в игре нет никаких функций, поэтому в обработчик веб-сокетов ничего добавлять не нужно. Для тестирования допишите следующие строки в конец файла server.js :


Теперь пусть клиент отправляет некоторые состояния клавиатуры. Поместите следующий код в конец файла static/game.js :

Эта часть кода позволит отправлять на сервер информацию о состоянии клавиатуры клиента 60 раз в секунду. Теперь необходимо прописать эту ситуацию со стороны сервера. В конец файла server.js добавьте следующие строки:

Давайте разберёмся с этим кодом. Вы будете хранить информацию о всех подключенных пользователях в виде объектов JSON. Так как у каждого подключённого к серверу сокета есть уникальный id, клавиша будет представлять собой id сокета подключённого игрока. Значение же будет другим объектом JSON, содержащим координаты x и y .

На данном этапе клиент ещё ничего не делает с этой информацией, поэтому добавьте со стороны клиента обработчик, который будет отображать данные от сервера в Canvas .


Вот и всё! Если у вас возникли проблемы, посмотрите архив с исходным кодом.

Некоторые тонкости

Когда будете разрабатывать более функциональную игру, целесообразно разделить код на несколько файлов.

Такие многопользовательские игры — отличный пример архитектуры MVC (модель-представление-контроллер). Вся логическая часть должна обрабатываться на сервере, а всё, что должен делать клиент — это отправлять входные пользовательские данные на сервер и отображать информацию, которую получает от сервера.

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

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

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

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

Кроме того, старайтесь избегать такого кода:

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

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

Также попытайтесь создать собственный физический движок. Это сложно, но весело. Если захотите попробовать, то рекомендую прочитать книгу «The Nature of Code», в которой есть много полезных идей.

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

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

Из всего множества современных игр мы выделим и подвергнем небольшому анализу on-line игры. Если быть еще более точными, то мы с Вами разберем общие вопросы взаимодействия между однопользовательским игровым клиентом и игровым сервером. В качестве наглядного примера рассмотрим реализацию подобного общения в "симуляторе жизни" MOBL (официальная страница продукта) компании K-D LAB. MOBL представляет собой WEB приложение, в котором серверная часть реализована на JSP, а клиентом выступает апплет.

Автор, избегая приведения рецептов вида: , старался выдержать данную статью в стиле , рассматривая один из возможных вариантов решения поставленной задачи. В процессе изложения не заостряется особое внимание на вопросах конкретной реализации, однако большинство приводимых примеров потребуют от читателя некоторых знаний языка программирования Java в целом и технологии JSP, в частности.

Для начала давайте определимся с терминологией и дадим несколько общих определений для таких понятий как игровой клиент, сервер и взаимодействие с ним.

Под on-line игрой мы будем понимать небольшую (порядка нескольких сотен килобайт) игровую программу, которая загружается с WWW-сервера, и требующая наличия соединения (возможно, непостоянного) со своим игровым сервером. Понятно, что чем меньше размер нашей игры, тем лучше, так как это позволяет увеличить количество наших потенциальных игроков за счет тех пользователей, которые являются "счастливыми" обладателями достаточно медленных каналов связи. Игра может быть реализована в виде апплета (Java) или при помощи Flash (Macromedia). Никаких ограничений на жанровую принадлежность не накладывается - наша игра может быть как небольшой обычной аркадой, так и стильной мозгодробильной головоломкой. On-line игры делятся на однопользовательские (игрок может играть только самостоятельно) и многопользовательские (игрок играет совместно с другими пользователями или против других игроков). Обращаю Ваше внимание на то, что подобное разделение игр, в общем случае, никак не влияет на количество одновременно играющих пользователей на одном игровом сервере.

На "плечи" сервера могут быть возложены и другие задачи. Реализация сервера, понятное дело, может быть выполнена на любом известном вам языке программирования и с дополнительным применением полезных технологий и будет представлять собою набор серверных сценариев (JSP, ASP, etc.)

Приступим же к рассмотрению вопросов реализации (здесь и далее будет использоваться Java/JSP). В общем случае происходит следующее:

Наш MOBL-сервер является обычным WEB-приложением. Было решено сделать регистрацию игроков и проверку регистрационных данных (при открытии пользователем игровой сессии) независимой от самого игрового клиента. Пользователю нужно заполнить регистрационную форму (см. Листинг 1; также см. формы HTML). Проверка корректности вводимых данных осуществляется на клиенте при помощи javascript-a. Такая же проверка осуществляется и при получении данных формы серверным сценарием регистрации. Отмечу, что приводимый в листинге код сильно упрощен и сокращен. Сделано это было для того, чтобы не загромождать изложение деталями JSP-реализации. Серверный сценарий регистрации, в случае корректности полученных регистрационных данных, осуществляет добавление нового игрока в свою базу данных. Кстати, применение СУБД и, как следствие, использование SQL для работы с информацией в БД, не только упрощает процесс разработки, но и повышает переносимость кода.

ЛИСТИНГ 1.
Регистрационная форма игрока

Взаимодействие клиента и сервера. Определение протокола.

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

MOBL-клиент является Java-апплетом, требующим для нормального функционирования игры периодического подключения к серверу для загрузки/сохранения игровой информации. Апплет должен знать о своем текущем игроке. Следовательно, сервер должен каким-то образом предоставить данную информацию апплету (желательно побеспокоиться о том, чтобы пароль не в открытом виде, в противном случае велика вероятность того, что Вам чего-то да ). К счастью, нам не нужно в данном вопросе изобретать велосипед и воспользуемся стандартным решением - передача параметров в апплет (см. Листинг 2). Кстати, использование элемента APPLET уже устарело, вместо него рекомендуется использовать элемент OBJECT.

Имеем следующее: после удачной регистрации, сервер генерирует HTML-страничку, в которой есть информация о самой игре (апплет), и данные текущего игрока, переданные в апплет в качестве параметров. Так как во время создания второй версии MOBL-а была включена поддержка русского языка (первая версия была исключительно английской), в апплет также передается информация о выбранном пользователем языке.

ЛИСТИНГ 2.
Передача регистрационных данных в апплет

Также нам на сервере нужны сценарии для взаимодействия с клиентскими апплетами, а именно:
· получение исходных данных для начала новой игры;
· сохранение на сервере результатов игры;
· загрузка игровых данных для просмотра сохраненной игры.

Реализация взаимодействия: серверная часть.

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

Реализация функциональности серверных сценариев для сохранения/загрузки выполняется аналогично рассмотренному выше материалу.

ЛИСТИНГ 3.
Создание новой игры и генерация стартовых параметров

Реализация взаимодействия: игровой клиент

Взаимодействие игрового клиента с сервером, в нашем случае, можно разделить на несколько небольших задач:

1. перед началом любой игры нужно попросить сервер сгенерировать нам стартовые параметры игры;
2. в случае удачного окончания игры, её конфигурация передается на сервер для сохранения;
3. игровой клиент также должен уметь загружать с сервера сохраненные игры (страница "лучшие игры").

Конечно же, можно было бы сделать и собственную реализацию работы с сервером через класс Socket, но это порождает дополнительные проблемы.

ЛИСТИНГ 4.
Класс-обертка для установления соединения с определенным хостом,
передачи параметров методом POST и получением результирующего потока-ответа

Оставшаяся работа — сущие пустяки. Продемонстрируем это на примере загрузки с сервера начальных параметров для новой игры (см. Листинг 5). Для начала нам нужно сформировать строку адреса, для подключения к соответствующему серверному сценарию (address). Метод getCodeBase() возвращает реальный базовый путь к апплету, что позволяет нам не задумываться над сохранением адреса сервера в игровом апплете. Нам важно лишь знать имя и параметры нужного нам server-side script (хранится в константах класса AppSettings, в частности, skstrScriptInitURL - имя сценария для создания новой игры на сервере и получения её стартовых параметров). После этого воспользуемся функциональностью класса из Листинга 4 и пошлем запрос серверу и пробуем получить поток с ответом сервера.

Дальнейшее же действо - простая загрузка полученных данных и инициализация внутренних переменных игрового энжина (loading).

ЛИСТИНГ 5.
Загрузка с сервера начальных параметров для новой игры

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

Но это уже совсем другая история.

Чтобы не повторяться, просто приведу эту ссылку, для интересующихся историей MOBL-а. Здесь же я просто сообщу несколько фактов:

· первоначальная реализация была сделана на С++;
· первая on-line версия была сделана на Java (игровой апплет) и C++ (CGI-scripts, Win32 platform);
· текущая (вторая по счету) версия является полностью переписанной первой версией, портированной на Java. В частности, сервер был реализован на JSP. Также, во время портирования, были сделаны многие дополнительные изменения и улучшения.

Java Server Pages (JSP) - независимая от платформы технология, предлагаемая в SUN's J2EE. Альтернативная методика разработки приложений, динамически генерирующих ответ по запросам клиента

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

SQL - структурированный язык запросов. Используется для работы с БД

WEB-контейнер - программная среда, обеспечивающая поддержку полного жизненного цикла WEB-приложений и их компонент.

WEB-приложение - приложение, построенное для работы в сети Internet. Представляет собой набор взаимосвязанных скриптов (сценариев), работающих под управлением WEB-контейнера.

База данных (БД) - множество взаимосвязанной структурированной информации. Так, в роли БД, может выступать и набор текстовых файлов, хранящих нужную информацию)

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

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

Как привязать игру к гугл плей

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

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

Чтобы это сделать, существует три способа. Для привязки аккаунта игры к Фейсбуку или Гугл Плей можно действовать так:

  1. в первом случае вы можете попробовать связать аккаунты еще при регистрации, выбрав авторизацию через учетную запись Facebook. Здесь необходим логин и пароль социальной сети;
  2. если это уже давно созданная учетная запись игры, соединение можно осуществить в любой другой момент;
  3. третий вариант предполагает добавление игры из центра приложений Facebook или Google Play.

Как привязать игру к существующему аккаунту Google Play

У большинства разработчиков есть функция привязки уже существующего аккаунта к Facebook или Google Play. И хотя визуальная составляющая может отличаться от сайта к сайту и от игры к игре, выполнение следующих действий одинаково в большинстве случаев.

  • Зайдите в игру под своим логином и паролем;
  • перейдите в личный кабинет и нажмите на кнопку с Гугл или Фейсбуком;
  • вы войдете на сайт социальной сети, где вам предложат установить то же имя, что закреплено в профиле;
  • нажимаете на подтверждение.

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


Вот как связать свою учетную запись, чтобы вы могли играть в Ni no Kui: Cross Worlds на ПК.

Ni no Kuni: Cross Worlds снова приглашает фанатов в сказочный мир Ni no Kuni в этой новой MMORPG. Игра доступна для устройств iOS и Android, но в нее также можно играть через клиент для ПК для тех, кто хочет более традиционного опыта.

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

Как играть в Ni No Kuni: Cross Worlds на ПК

Загрузить клиент для ПК

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

ВИДЕО ИГРОВОГО ДНЯ

Загрузить мобильную версию

Загрузить мобильную версию Cross Worlds на свое устройство iOS или Android, создать персонажа и зайти в игру.

Связать свой аккаунт

Перейти в меню(справа вверху экрана).

Затем нажмите значок настроек в внизу экрана.

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

Используя мобильную версию, не забудьте нажать кнопку 'Награда за ссылку на аккаунт' в разделе 'Учетная запись' screen, чтобы получить 30 000 золотых за ссылку на вашу электронную почту! Вы можете связать другие учетные записи, чтобы получить еще больше вознаграждений.

Войти на ПК-клиенте

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

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


Андрей Кольский - помощник редактора. Его страсть к играм началась с его первой консоли (Sega Genesis), и с тех пор он не переставал играть. Его любимые игры: The Legend of Zelda: Ocarina of Time, Team Fortress 2, Rainbow Six Siege, Pokémon Sword & Shield, Old School Runescape, Skyrim и Breath of the Wild.


Игроки, которые хотят насладиться ПК-версией Ni no Kuni: Cross Worlds, могут узнать, как ввести связанный адрес электронной почты в этом руководстве.

После загрузки и запуска ПК-версия Ni no Kuni: Cross Worlds, игрокам будет предложено ввести связанный адрес электронной почты и пароль. Некоторые фанаты, несомненно, сочтут эту инструкцию довольно запутанной, поскольку у них не будет связанного адреса электронной почты или пароля, который они могут ввести. Для тех игроков, которые находятся в такой ситуации, это руководство предоставит полное пошаговое руководство о том, как пройти этот предварительный этап и начать играть в Ni no Kuni: Cross Worlds на ПК.

Ni no Kuni: Cross Worlds — введите связанный адрес электронной почты

Чтобы играть Ni no Kuni: Cross Worlds на ПК игроки должны сначала использовать мобильное приложение игры, чтобы связать учетную запись электронной почты. Действительно, поклонникам MMO необходимо загрузить мобильную версию игры на свое устройство Android или iOS, если они заинтересованы в игре на ПК, и эту версию можно найти в Google Play и App Store соответственно. После того, как игрок приобрел мобильное приложение, он должен выполнить следующие действия, чтобы связать учетную запись электронной почты:

  • Создайте персонажа в Ni no Kuni: Cross Worlds.
  • Нажмите на значок шестеренки в правом верхнем углу.
  • Нажмите "Учетная запись" слева, чтобы войти в настройки учетной записи.
  • Нажмите «Войти с помощью электронной почты».
  • Нажмите "Зарегистрироваться по электронной почте" и введите соответствующую информацию.
  • Дождитесь получения письма с подтверждением на указанный адрес.

После того, как игрок успешно привяжет свой адрес электронной почты через мобильное приложение, он свободен. чтобы вернуться к ПК-версии игры и войти под своей информацией. Поклонники также могут установить флажок рядом с «сохранить адрес электронной почты». на этом шаге, и это ускорит их вход в систему при будущих попытках. Кроме того, игроки могут воспользоваться этой возможностью, чтобы погасить некоторые коды купонов в Ni no Kuni: Cross Worlds и начать свои путешествия с некоторыми бесплатными вещами в руках.

Ni no Kuni: Cross Worlds доступна на ПК и мобильных устройствах.


Андрей Кольский - помощник редактора. Его страсть к играм началась с его первой консоли (Sega Genesis), и с тех пор он не переставал играть. Его любимые игры: The Legend of Zelda: Ocarina of Time, Team Fortress 2, Rainbow Six Siege, Pokémon Sword & Shield, Old School Runescape, Skyrim и Breath of the Wild.

Читайте также: