Бэк-офис для игр или «результат борьбы с пенсионной скукой»

?v=1

Если всю профессиональную жизнь увлеченно развивать ИТ борясь с экономным начальством, бестолковостью юзеров, ночами восстанавливать упавшие системы, начинаешь ждать пенсию как избавление. И вот — УРА! Пришло время и ты вышел на пенсию. И здесь то и кроется самая засада. После небольшого отдыха наступает синдром абстиненции трудоголика. Никаких «хоббей» за время упорной работы не приобрел. И наступает Скука.           

Все началось с решения написать игру для Андроида. И сразу стало понятно, что для игры потребуется WEB сервис. Нужно же где-то хранить успехи и поражения игрока, и, далее — организовывать всякого вида соревнования. Ну может быть такое уже есть на просторах интернета? Искал, но, каюсь не слишком тщательно. Решил написать сам (заодно прокачать свои умения в WEB технологиях). Так появилось то, что я назвал «Бэк — офис для игр».

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

Основную идею и устройство системы вполне описывает структура сущностей определенных в ней. Итак:

  • Сервер системы. Это очевидно. WEB сервер, обеспечивающий выполнение заявленные сервисы системы.

  • Клиент. Игровая программа, использующая ресурсы системы.

  • Администратор системы. Уникальная роль в системе. Его функции:

§  Общее управление системой

§  Просмотр содержимого объектов системы

§  Поддержка разработчиков (администраторов) игр

§  Консультации и помощь в отладке игр.

§  Экспорт аккаунтов разработчиков (администраторов) игр из тестовой системы в рабочую

§  Публикация отлаженных на тестовой системе разработчиком игр в рабочей системе.

§  Блокировка/разблокировка разработчиков и/или их игр по тем или иным причинам.

§  Общение с администраторами игр в чате или посредством электронной почты.

§  Внутрисистемный арбитраж. Разрешение спорных вопросов.

§  Установка и изменение курсов виртуальной «валюты» системы для каждого из администратора игр.

  • Администратор (разработчик) игр. Уникальная роль в конкретной игре. Может быть владельцем нескольких игр. Его функции:

§  Создание и регистрация игр

§  Блокировка/разблокировка игроков

§  Определение стартовых ресурсов для новых игроков.

§  Настройка параметров игр.

§  Организация и ведение соревнований.

§  Установка курсов игровых валют.

§  Регулирование цен (в игровой валюте) на игровые ресурсы.

§  Внутри игровой арбитраж. Разрешение спорных вопросов на уровне собственных игр.

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

  • Игра. Ограничивает общепринятое понятие игры следующим определением: «Игра есть совокупность параметров, ресурсов, игроков и их активов полученных или выигранных игроками в процессе соревнований». Собственные обязательные свойства:

§  Название игры

§  Название игровой валюты

§  Стартовая сумма в единицах этой валюты при регистрации игрока в игре (стартовый бонус)

§  Параметр игры. Произвольный параметр, определяющий течение игры. Целое число. Разработчик имеет полную свободу назначения параметров. Параметры игры и их значения «по умолчанию» наследуются соревнованиями. Собственные обязательные (при создании) свойства:

  1. Название.

  2. Значение по умолчанию, целое.

Системой определен один фиксированный параметр, обязательный для всех соревнований. Это «Количество фреймов в матче». Удалять его или создавать параметр с таким же названием нельзя, допускается только изменять его значение в конкретных соревнованиях. Этот параметр автоматически создается при создании новой игры. Кроме того, разработчик может добавить единственный на игру параметр с признаком «Рейтинг». Этот параметр используется в соревнованиях как награда от администратора игры победителям, увеличивая их игровой рейтинг.

§  Тип игрового ресурса. Определяет перечень игровых ресурсов. Может принимать только два значения: «Число» и «Список». Ресурс со списочным типом полезен для группировки ресурсов с числовым типом по категориям. Присутствие списочного типа необязательно.

§  Игровой ресурс. Произвольное значение, получаемое, выигрываемое, покупаемое у администратора игры или у других игроков, продаваемое другим игрокам. Цена ресурса номинируется администратором игры в единицах игровой валюты, или на «бирже» игроком — продавцом. Целое число.

§  Системная валюта — Дублоны. Курс системной валюты устанавливается администратором системы для каждого администратора игр отдельно. Получается администратором игр при регистрации. Покупается у администратора системы. Расходуется при внутри игровых операциях в качестве комиссионных.

§  Игровая валюта.  Может обмениваться на другие ресурсы. Получается игроком при регистрации в игре. Может покупаться у администратора игр за реальные деньги. Расходуется при покупке игровых ресурсов у администратора игры или на бирже у других игроков.

§  Рейтинг игрока. Особый вид ресурса игрока в игре. Не покупается, не продается, только получается при регистрации в игре и зарабатывается/теряется в процессе соревнований. Вычисление изменений рейтинга выполняется игровой программой по результатам сыгранных игроком игр.

§  Соревнование. Непосредственный акт игры нескольких игроков с параметрами, настраиваемыми администратором игры. Параметры соревнования есть параметры игры с измененными значениями. Соревнования определены 3 видов: Чемпионат, Турнир, Первенство. Кроме соревнований разработчик может реализовать произвольный акт игры нескольких игроков с установкой значений параметров, определенных в игре (Свободный матч) одним из игроков. Система фиксирует состояние игрока относительно соревнования.

§  Фрейм. Минимальный игровой акт. Фрейм является неделимой единицей структуры любого соревнования.

§  Матч. Совокупность фреймов. Матч может состоять из одного или более фреймов. Иначе говоря, online встреча фиксированного состава игроков.

§  Раунд. Применим только к турниру. Совокупность матчей, проводимых «на одном уровне»

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

  • Название.

  • Количество партнеров в матче (NP). От 2 до 10.

  • Количество раундов (NR). От 2 до 10. Важно: NPNR — общее количество игроков турнира не рекомендуется делать большим, чем 256.

  • Дата окончания подписки. Регистрация игроков для участия в турнире заканчивается не позднее истечения этой даты.

  • Дата начала. Турнир начинается не ранее этой даты.

  • Вступительный взнос. Целое. Сумма в единицах игровой валюты, уплачиваемая игроком при подписке.

  • Вступительный рейтинг. Игрок с меньшим рейтингом не может участвовать в турнире.

  • Стимул от Автора. Параметр в целых единицах игровой валюты. По умолчанию — 0.

  • Количество фреймов в матче. Устанавливаемое значение наследуется параметрами раундов. Количество фреймов в матче не должно быть меньше чем количество партнеров в матче.

  • Количество фреймов в матче. Устанавливаемое значение наследуется параметрами раундов. Количество фреймов в матче не должно быть меньше чем количество партнеров в матче.

§  Чемпионат. Соревнование, в котором каждый игрок играет в матче каждый с каждым. В матче участвуют только два игрока. Места по окончанию чемпионата определяются игровой программой. Допустима ничья в каждом из матчей. Собственные свойства:

  • Название.

  • Количество игроков. Не рекомендуется делать большим, чем 256.

  • Дата окончания подписки. Регистрация игроков для участия в чемпионате заканчивается не позднее истечения этой даты.

  • Дата начала. Чемпионат начинается не ранее этой даты.

  • Вступительный взнос. Целое. Сумма в единицах игровой валюты, уплачиваемая игроком при подписке.

  • Вступительный рейтинг. Игрок с меньшим рейтингом не может участвовать в турнире.

  • Стимул от Автора. Параметр в целых единицах игровой валюты. По умолчанию — 0.

  • Количество фреймов в матче.

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

§  Свободный матч. Не регламентируемые администратором игры матчи между игроками. Значения параметров, определенных в игре, устанавливаются самими игроками.

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

С более детальным описанием системы можно ознакомиться непосредственно на сайте в разделе «Описание системы».  Этот же сайт служит инструментом создания и управления игрой/играми для разработчика/администратора игр.

Автором предлагается также .NET Standard компонент GBOClientStd, предоставляющий все необходимые методы для доступа к API системы. Этот компонент доступен для скачивания на GitHub.

С целью проверки полноты и работоспособности системы автором написана Андроид игра — головоломка под названием «Медвежатник». Игра полностью подтвердила заявленные свойства системы, однако гарантировать отсутствие «багов» в ней автор не может гарантировать, поскольку он же и является на сегодня единственным тестировщиком как самой игры, так и системы в целом. По моему убеждению, «самый плохой тестировщик это разработчик» и, поэтому .apk игры выложен на 4pda по ссылке. Для тех, кто заинтересуется игрой — маленькая подсказка: Головоломка решена когда все «ручки» на двери сейфа приобретают зеленый цвет, и таких ручек четное количество.

Так и закончилась моя борьба с пенсионной скукой, борьба была интересной, а кто победил — неизвестно, она опять на горизонте. Есть правда надежда, то кто-то заинтересуется системой и обратится к автору за консультацией. Здесь другая опасность — один может не справиться. Но, как говорится «волков бояться, в лес не ходить». Приглашаю.

© Habrahabr.ru