Бэк-офис для игр или «результат борьбы с пенсионной скукой»
Если всю профессиональную жизнь увлеченно развивать ИТ борясь с экономным начальством, бестолковостью юзеров, ночами восстанавливать упавшие системы, начинаешь ждать пенсию как избавление. И вот — УРА! Пришло время и ты вышел на пенсию. И здесь то и кроется самая засада. После небольшого отдыха наступает синдром абстиненции трудоголика. Никаких «хоббей» за время упорной работы не приобрел. И наступает Скука.
Все началось с решения написать игру для Андроида. И сразу стало понятно, что для игры потребуется WEB сервис. Нужно же где-то хранить успехи и поражения игрока, и, далее — организовывать всякого вида соревнования. Ну может быть такое уже есть на просторах интернета? Искал, но, каюсь не слишком тщательно. Решил написать сам (заодно прокачать свои умения в WEB технологиях). Так появилось то, что я назвал «Бэк — офис для игр».
Основным свойством системы является полная независимость от самого игрового процесса. То есть системе безразлично в какую игру играет игрок: шахматы, биллиард, карты головоломки на скорость и т.д. Систему интересуют только абстрактные (для нее) параметры игры, ресурсы игроков и их результаты, обеспечение канала взаимодействия игровых программ между собой в реальном времени.
Основную идею и устройство системы вполне описывает структура сущностей определенных в ней. Итак:
Сервер системы. Это очевидно. WEB сервер, обеспечивающий выполнение заявленные сервисы системы.
Клиент. Игровая программа, использующая ресурсы системы.
Администратор системы. Уникальная роль в системе. Его функции:
§ Общее управление системой
§ Просмотр содержимого объектов системы
§ Поддержка разработчиков (администраторов) игр
§ Консультации и помощь в отладке игр.
§ Экспорт аккаунтов разработчиков (администраторов) игр из тестовой системы в рабочую
§ Публикация отлаженных на тестовой системе разработчиком игр в рабочей системе.
§ Блокировка/разблокировка разработчиков и/или их игр по тем или иным причинам.
§ Общение с администраторами игр в чате или посредством электронной почты.
§ Внутрисистемный арбитраж. Разрешение спорных вопросов.
§ Установка и изменение курсов виртуальной «валюты» системы для каждого из администратора игр.
Администратор (разработчик) игр. Уникальная роль в конкретной игре. Может быть владельцем нескольких игр. Его функции:
§ Создание и регистрация игр
§ Блокировка/разблокировка игроков
§ Определение стартовых ресурсов для новых игроков.
§ Настройка параметров игр.
§ Организация и ведение соревнований.
§ Установка курсов игровых валют.
§ Регулирование цен (в игровой валюте) на игровые ресурсы.
§ Внутри игровой арбитраж. Разрешение спорных вопросов на уровне собственных игр.
Игрок. Обязанностей не имеет кроме как играть в созданную разработчиком игр игру. Имеет логин, е-мейл, игровую валюту, рейтинг и определенные разработчиком игр игровые ресурсы. Имея единственную (в системе) учетную запись, может играть в разные игры разных авторов.
Игра. Ограничивает общепринятое понятие игры следующим определением: «Игра есть совокупность параметров, ресурсов, игроков и их активов полученных или выигранных игроками в процессе соревнований». Собственные обязательные свойства:
§ Название игры
§ Название игровой валюты
§ Стартовая сумма в единицах этой валюты при регистрации игрока в игре (стартовый бонус)
§ Параметр игры. Произвольный параметр, определяющий течение игры. Целое число. Разработчик имеет полную свободу назначения параметров. Параметры игры и их значения «по умолчанию» наследуются соревнованиями. Собственные обязательные (при создании) свойства:
Название.
Значение по умолчанию, целое.
Системой определен один фиксированный параметр, обязательный для всех соревнований. Это «Количество фреймов в матче». Удалять его или создавать параметр с таким же названием нельзя, допускается только изменять его значение в конкретных соревнованиях. Этот параметр автоматически создается при создании новой игры. Кроме того, разработчик может добавить единственный на игру параметр с признаком «Рейтинг». Этот параметр используется в соревнованиях как награда от администратора игры победителям, увеличивая их игровой рейтинг.
§ Тип игрового ресурса. Определяет перечень игровых ресурсов. Может принимать только два значения: «Число» и «Список». Ресурс со списочным типом полезен для группировки ресурсов с числовым типом по категориям. Присутствие списочного типа необязательно.
§ Игровой ресурс. Произвольное значение, получаемое, выигрываемое, покупаемое у администратора игры или у других игроков, продаваемое другим игрокам. Цена ресурса номинируется администратором игры в единицах игровой валюты, или на «бирже» игроком — продавцом. Целое число.
§ Системная валюта — Дублоны. Курс системной валюты устанавливается администратором системы для каждого администратора игр отдельно. Получается администратором игр при регистрации. Покупается у администратора системы. Расходуется при внутри игровых операциях в качестве комиссионных.
§ Игровая валюта. Может обмениваться на другие ресурсы. Получается игроком при регистрации в игре. Может покупаться у администратора игр за реальные деньги. Расходуется при покупке игровых ресурсов у администратора игры или на бирже у других игроков.
§ Рейтинг игрока. Особый вид ресурса игрока в игре. Не покупается, не продается, только получается при регистрации в игре и зарабатывается/теряется в процессе соревнований. Вычисление изменений рейтинга выполняется игровой программой по результатам сыгранных игроком игр.
§ Соревнование. Непосредственный акт игры нескольких игроков с параметрами, настраиваемыми администратором игры. Параметры соревнования есть параметры игры с измененными значениями. Соревнования определены 3 видов: Чемпионат, Турнир, Первенство. Кроме соревнований разработчик может реализовать произвольный акт игры нескольких игроков с установкой значений параметров, определенных в игре (Свободный матч) одним из игроков. Система фиксирует состояние игрока относительно соревнования.
§ Фрейм. Минимальный игровой акт. Фрейм является неделимой единицей структуры любого соревнования.
§ Матч. Совокупность фреймов. Матч может состоять из одного или более фреймов. Иначе говоря, online встреча фиксированного состава игроков.
§ Раунд. Применим только к турниру. Совокупность матчей, проводимых «на одном уровне»
§ Турнир. Пирамидальная последовательность раундов. В каждом из матчей может быть только один победитель, выходящий в следующий раунд. Победитель матча определяется по вычисленным игровой программой результатам фреймов матча. Параметры могут изменяться от раунда к раунду. Собственные свойства:
Название.
Количество партнеров в матче (NP). От 2 до 10.
Количество раундов (NR). От 2 до 10. Важно: NPNR — общее количество игроков турнира не рекомендуется делать большим, чем 256.
Дата окончания подписки. Регистрация игроков для участия в турнире заканчивается не позднее истечения этой даты.
Дата начала. Турнир начинается не ранее этой даты.
Вступительный взнос. Целое. Сумма в единицах игровой валюты, уплачиваемая игроком при подписке.
Вступительный рейтинг. Игрок с меньшим рейтингом не может участвовать в турнире.
Стимул от Автора. Параметр в целых единицах игровой валюты. По умолчанию — 0.
Количество фреймов в матче. Устанавливаемое значение наследуется параметрами раундов. Количество фреймов в матче не должно быть меньше чем количество партнеров в матче.
Количество фреймов в матче. Устанавливаемое значение наследуется параметрами раундов. Количество фреймов в матче не должно быть меньше чем количество партнеров в матче.
§ Чемпионат. Соревнование, в котором каждый игрок играет в матче каждый с каждым. В матче участвуют только два игрока. Места по окончанию чемпионата определяются игровой программой. Допустима ничья в каждом из матчей. Собственные свойства:
Название.
Количество игроков. Не рекомендуется делать большим, чем 256.
Дата окончания подписки. Регистрация игроков для участия в чемпионате заканчивается не позднее истечения этой даты.
Дата начала. Чемпионат начинается не ранее этой даты.
Вступительный взнос. Целое. Сумма в единицах игровой валюты, уплачиваемая игроком при подписке.
Вступительный рейтинг. Игрок с меньшим рейтингом не может участвовать в турнире.
Стимул от Автора. Параметр в целых единицах игровой валюты. По умолчанию — 0.
Количество фреймов в матче.
§ Первенство. Игроки, участвующие в первенстве не состязаются друг с другом непосредственно. Выполняя некоторые, определяемые игрой, задания, игроки показывают результаты, по которым определяется победитель. Собственные свойства те же, что и у чемпионата.
§ Свободный матч. Не регламентируемые администратором игры матчи между игроками. Значения параметров, определенных в игре, устанавливаются самими игроками.
§ Чат. Система предоставляет сервис мгновенных сообщений как между администратором игры и игроками, так и между игроками. Возможно отправлять сообщения группам игроков. Группы в чате напрямую соответствуют играм. Администратор игр состоит во всех группах, соответствующих принадлежащим ему играм. Игрок состоит во всех группах, соответствующих играм, в которых он зарегистрирован.
С более детальным описанием системы можно ознакомиться непосредственно на сайте в разделе «Описание системы». Этот же сайт служит инструментом создания и управления игрой/играми для разработчика/администратора игр.
Автором предлагается также .NET Standard компонент GBOClientStd, предоставляющий все необходимые методы для доступа к API системы. Этот компонент доступен для скачивания на GitHub.
С целью проверки полноты и работоспособности системы автором написана Андроид игра — головоломка под названием «Медвежатник». Игра полностью подтвердила заявленные свойства системы, однако гарантировать отсутствие «багов» в ней автор не может гарантировать, поскольку он же и является на сегодня единственным тестировщиком как самой игры, так и системы в целом. По моему убеждению, «самый плохой тестировщик это разработчик» и, поэтому .apk игры выложен на 4pda по ссылке. Для тех, кто заинтересуется игрой — маленькая подсказка: Головоломка решена когда все «ручки» на двери сейфа приобретают зеленый цвет, и таких ручек четное количество.
Так и закончилась моя борьба с пенсионной скукой, борьба была интересной, а кто победил — неизвестно, она опять на горизонте. Есть правда надежда, то кто-то заинтересуется системой и обратится к автору за консультацией. Здесь другая опасность — один может не справиться. Но, как говорится «волков бояться, в лес не ходить». Приглашаю.