Презентация идеи игры «Run, Zombie, Run!»

в 7:13, , рубрики: игра, презентация проекта, я пиарюсь, метки: ,

Добрый день!

Идея этого игрового проекта родилась Презентация идеи игры «Run, Zombie, Run!»у меня достаточно давно, уже успела обрасти подробностями, и вот я готов представить его на суд строгой(но справедливой) хабраобщественности. Мне очень важно именно Ваше мнение о сильных и слабых сторонах проекта. Что именно Вы бы хотели в нем видеть, а чего бы не видеть, а также об аналогах, которые Вам известны. Оставляйте Ваши мысли и советы в комментариях или пишите мне в ПМ. Также я ищу, как отдельных талантливых разработчиков клиентских и серверной частей, так и слаженные коллективы, которые оценят перспективность данной игры и будут готовы войти в проект. Территориально я нахожусь в Санкт-Петербурге, готов посвящать этому проекту все свое время и ресурсы. Итак, приступим.

Эпиграф: “Человек человеку волк, а зомби зомби зомби”.

Введение

Игра “Run, Zombie, Run!” представляет собой кросс-платформенное (IOS, Android, other) многопользовательское приложение с дополненной реальностью, распространяемое по модели free-to-play. В начале каждой игры участники случайно делятся на две команды – команда “зомби” и команда “людей”. Каждый клиент постоянно определяет свое местоположение с помощью GPS и передает его на сервер. Сервер постоянно вычисляет взаимное положение игроков, и передает каждому позиции его ближайших соседей. Задача игрока-“зомби”, ориентируясь с помощью карты, на которой отмечен он сам и ближайшие к нему игроки, “поймать” как можно больше игроков-“людей”, приблизившись к ним на “игровое расстояние”. Задача игроков-“людей”, пользуясь той же картой, уклонятся от встречи с “зомби”. Каждый пойманный человек также становится “зомби”. Таким образом, за время игры число игроков команды “людей” постоянно уменьшается, а команды “зомби” – увеличивается. Игра заканчивается по истечению игрового времени, или после “смерти” последнего “человека”.

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

В процессе игры участники могут тратить игровое золото, покупая различные временные и постоянные бонусы, часть из которых подробнее описаны в разделе “Монетизация”.

Клиентская часть

Требования к клиенту

Apple IOS, Android, other
Использовать кроссплатформенную среду и достичь приемлемого качества приложения невозможно, клиентов надо разрабатывать на нативной среде разработки для каждой ОС. Прототип можно сделать, скажем, только под IOS, а потом портировать код под Android и остальные мобильные платформы. Код клиента должен быть достаточно простой, и его будет не так много, перенос кода под новые ОС не должен вызвать никаких проблем.

Модуль GPS или ГЛОНАСС, с разрешением для нашего приложения определять координаты пользователя.

Проблема аккумулятора

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

Проблема траффика

Так как клиент постоянно получает от сервера информацию о своих “соседях”, поток данных на клиента может быть достаточно большой. Учитывая то, что большинство игроков будет оплачивать траффик своих операторов связи помегабайтно, необходимо ограничивать максимальный траффик от сервера клиенту. 10 Мегабайт в час выглядит разумным ограничением. Разумеется, мы не будем постоянно считать траффик на каждого клиента или как-либо ограничивать клиента по достижению 10 мегабайт за прошедший час, но эту цифру надо заложить в проект, и стараться ее достичь в реальной разработке как расчетную.

Описание работы клиента

Две выше перечисленные проблемы задают основные требования к клиенту, и, исходя из них, мы будем высчитывать тот размер информации об окружении, который мы можем передавать каждому клиенту.
На клиенте это реализовано как аналог тумана войны в культовой игре Warcraft 2[5]. Клиент видит тип и местоположение других игроков только в некоторой области вокруг себя, или еще какого-то конечного числа различных мест(эта возможность доступна ему за счет игрового золота – см. «Монетизация»). Вся остальная часть карты затемнена, что подразумевает то, что на ней могут быть другие игроки, но эта информация клиенту неизвестна.

“Радиус видимости” надо подобрать так, чтобы удовлетворять проблеме по траффику. Второй глобальный параметр, который нужно подобрать путем экспериментов, это как часто клиент должен скидывать информацию о своем местоположении на сервер.

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

Данные необходимо эффективно сжимать!
Выглядит разумно отдавать серверу свое местоположение раз в 10-20 секунд. А получать данные об “окружении” раз в 20-40 секунд, причем видимо надо разработать протокол так, чтобы передавать только изменившиеся данные, а не все, если какие-то игроки не перемещаются – заново скидывать их GPS метки(соответствующие им Хеши) не логично.

Таким образом можно посчитать, что поток от клиента к серверу выглядит небольшим, его мы не будем считать вообще(но оптимизируем по максимуму!), а поток от сервера к клиенту можно рассчитать – 10 Мб делим на 60 минут, и на 2-3 сессии в минуту, получается раз в 20 секунд мы можем передать на клиента 56,9 килобайта данных. Это достаточно большой пакет, возможно стоит передавать меньше, но чаще, чтобы игра выглядела динамичнее.

Надо максимально оптимизировать передаваемые данные, возможно передавать координаты не целиком, а только относительно изменений на клиенте.

Важна проблема построения хеша по GPS координатам!
Нужно задать функцию так, чтобы длина хеша была минимальной, и чем ближе хеши друг к другу, тем ближе они находятся по GPS координатам! Тогда можно передавать только значимую часть хеша, чтобы уменьшить траффик в единицу времени, и подобрать больший “радиус видимости”. Задавать радиус видимости с сервера, менять его в зависимости от числа участвующих игроков!

Режимы работы клиента

Клиент может работать в двух логических режимах – “Игра” и “Вне игры”, соответственно.

Вне игры

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

Регистрация

Для работы в системе клиенту необходимо пройти обязательную регистрацию. Он принимает договор-соглашение с нами. См. приложение Требования к договору-соглашению с клиентом[6]. Согласие на разглашение его текущего местоположения только во время Игры

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

Режим “Игра” глазами игрока

Не хочется портить впечатлениеПрезентация идеи игры «Run, Zombie, Run!» своими рисунками, данное тз не представляет прототипа, а служит лишь предварительным заданием на него. Но обойтись без рисунков вообще было бы неправильно. Некое понимание об игровом процессе можно получить из Рисунка, он единственный в данном документе, не считая милой девушки на главной странице, и поэтому без номера. Скорее всего вы даже видите его где-то рядом, когда читаете этот текст, поэтому я не буду его подписывать.

Это лишь концепция, нам же надо прорисовать 4-6 эмблем-градаций для персонажей, которые будут присваиваться по рейтингу, и которые также можно купить за Золото. Видимо надо узнавать у игрока его пол, и рисовать отдельно для мужчин и женщин. Чем выше рейтинг, тем “круче” должен выглядеть персонаж, что у “людей”, что у “зомби”.

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

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

Также во все время игры участнику на экране показывается
— время до окончания игры
— текущее количество “людей” и “зомби”
— его место в рейтинге Игры на текущий момент.
— количество у игрока игрового золота

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

Серверная часть

Требования

ОС — Centos, язык разработки c++, MySQL(или что-то еще быстрее, сравнить производительность под наши задачи, построить модель и протестировать нагрузку)
Основной сервер – очень мощный сервер, с большим объемом оперативной памяти – 32-64Gb, с быстрыми винчестерами(RAID0) нужного размера.
Возможен со временем переход основного сервера в кластер, когда стоимость услуг кластера с нашими объемами вычислений, и отказоустойчивость станут выгоднее финансово.

Биллинговый сервер – простой выделенный сервер на доверенной площадке, также centos, MySQL, c++ движок, если понадобится, php.

Основной сервер

Описание работы основного сервера

Программирование кода основного сервера – наиболее сложная часть проекта. При простом клиенте и бизнес логике приложения, логика работы основного сервера также относительно проста – получать от клиентов их GPS координаты, высчитывать их взаимные расстояния друг до друга, реализовывать игровую логику и выдавать клиентам соответствующую информацию об их соседях – текущие статусы игроков, их координаты и т.п. Проблема заключается в том, что клиентов очень много, и они часто скидывают информацию о себе.
Возможно участие до 1 млн активных клиентов в одной игровой сессии!
Необходимо тщательно продумать структуру таблиц для хранения данных, провести исследование по поиску оптимальной структуры данных, и лучших методов работы с этой структурой. Сразу приходит в голову вычислять некие хеш, по GPS координатам клиента, расстояние между клиентами вычислять по этим хешам, и постоянно сортировать таблицу тоже по полю этого хеша, чтобы в дальнейшем упростить задачу нахождения соседей. То есть выдавать клиенту данное о местоположении его соседей прямо по этой таблице, сколько то записей вверх, сколько то вниз, это и будут те игроки, которые находятся ближе всего к клиенту географически.

Игровые сессии

Так как время игры у нас ограничено двумя часами, для оптимального использования серверных мощностей, мы будем начинать игру в каждом часовом поясе в одинаковое время. Нужно провести исследования нашей потенциальной аудитории, думаю, разумными были бы временные интервалы с 9 до 11 или с 10 до 12. Возможно, лучше использовать вечернее время, а именно с 18 до 20, нужно провести исследование, беря за основу аудиторию из США и Западной Европы, как наиболее платежеспособную.
Таким образом, у нас будет 12 игровых сессий по 2 часа, клиент будет причислятся к той или иной игровой сессии согласно своему положению по GPS. Целесообразно использовать официальное территориальное разбиение по часовым поясам[7], и в дальнейшем, при поддержке приложения, обновлять территориальное разбиение по часовым поясам по мере законодательных изменений в различных странах.

Биллинговый сервер и сервер авторизации.

Раздел в разработке

Монетизация игры

Покупка золота

Игроки могут покупать золото через Apple Store и Android Market, как во время игры, так и заранее, до ее начала. Покупка золота верифицируется через наш собственный биллинговый сервер. Часть золота распределяется в виде приза между лучшими игроками победившей команды после каждой игры.

Некоторые игровые возможности, доступные с помощью “золота”

До начала игры
Можно за золото выбрать команду – “зомби” или ”людей”, за которую хотите играть. Обе стороны стоят одинаково, если вы не хотите тратить на это игровое золото — выбор будет случайным(за вас выберет сервер, чтобы было примерно одинаковое количество игроков команд на момент начала игры).

Покупка эмблемы следующего уровня, персональная эмблема!

Общие
— игрок пропадает с карты на некоторое время, на карте все видят место, где он пропал. При этом, все прочие функции игрока сохраняются, “зомби” может “ловить”, а “человек” может быть “пойман”. После использования этой функции какое-то время ей пользоваться нельзя.
— на время для игрока убирается “туман” в любом месте карты по желанию, игрок, применивший функцию, видит всех игроков на этом месте.
— “туман” в конкретном месте по желанию игрока убирается для него на все время текущей игры
— за золото возможен апгрейд игрока до следующего уровня, что обычно дает рейтинг(доступно все время, не только во время игры)
— на короткое игрок может выставить фантом, фигурку самого себя на карте, которая будет стоять неподвижно на том месте, где ее создали. При приближении “зомби”, попадая в его игровой радиус, фантом “человека” сразу исчезает, очки за это не даются.
Фантом, сделанный “зомби”, просто существует заданное время
Для “зомби”
— кратковременно увеличивается игровой радиус, можно применять несколько раз подряд.
— в течение короткого времени сразу после “заражения” игрок может “вылечится” и стать опять “человеком”, что, впрочем, не дает ему возможности не быть пойманным опять. После использования этой функции какое-то время ей пользоваться нельзя.
Для “людей”
— кратковременно появляется иммунитет от атак зомби
— игрок может “выпить яд” и стать зомби. Функция необратима, “смерть” никому не засчитывается

Постоянные игровые возможности

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

Магазин сувениров и игровых гаджетов

С момента запуска игры, логично предложить игрокам, за дополнительную плату, приобретать сувениры с символикой игры – футболки, чтобы было издалека возможно отличать тех, кто участвует в игре, маски зомби, краску для нанесения искусственных ран. Также учитывая то, что в процессе активной игры, тяжело постоянно смотреть на экран смартфона, большой популярностью у игроков должен пользоваться гаджет типа Sony SmartWatch[3] или Google Glasses[8], который позволяет уточнить окружающую игровую обстановку, ни на секунду не прекращая активного движения.

Помечтаем

201X год.
Магазин игры RunZombieRun стал крупнейшим продавцом SmartWatch и Google Glasses за период, благодаря продуманной рекламной компании и естественным потребностям игрока в игре, решаемым этими гаджетами.

XX млн. игроков RunZombieRun из США подписали совместное послание Конгрессу США с просьбой убрать погрешность точности гражданских GPS навигаторов на территории их страны, мешающую им насладиться игрой в полной мере.

Повторно избранный на свой срок президент России Дмитрий Анатольевич Медведев заявил, что ГЛОНАСС заведомо выдает максимальную точность для всех клиентов сети ГЛОНАСС, с любым сертифицированным оборудованием, а сам он тоже два раза играл в RunZombieRun, используя именно ГЛОНАСС. И то, что его дочь “съела” его так быстро, показывает ему, что российская навигационная система отлично справляется со своими функциями.  

Идеи по оптимизации игры

Определение игрового расстояния на клиенте

Данная идея заключается в том, чтобы разгрузить сервер от вычислений взаимного положения игроков, а определять близость игроков друг к другу со стороны клиентской части, и просто уведомлять сервер о “смерти” того или иного игрока. Для этого можно использовать, например, Bluetooth.
Плюсы
Основным плюсом является возможность существенно разгрузить серверную часть, избавив ее от вычислений расстояния между игроками. Так как высокая нагрузка на серверную часть, при большом количестве игроков, является одной из основных проблем данного приложения, важность данного плюса сложно переоценить
Минусы
Невозможно менять игровой радиус, для всех игроков, в целях улучшения игровой динамики, или, как игровой бонус за золото, для конкретных участников. Игровой радиус будет четко задан радиусом действия модуля Bluetooth, причем, так как модули связи отличаются в различных аппаратах, будет зависеть еще и от модели смартфона участника.
Также возможны махинации со стороны игроков, с повреждением или “хитрым” отключением модуля Bluetooth.
Вывод
На текущем этапе данная идея признана мной нецелесообразной

Ссылки и список литературы

1. www.walkingdeadru.com/filmy_o_zombi_onlain.php
2. ru.wikipedia.org/wiki/%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%A4%D0%B8%D0%BB%D1%8C%D0%BC%D1%8B_%D0%BE_%D0%B7%D0%BE%D0%BC%D0%B1%D0%B8
3. www.sonymobile.com/us/products/accessories/smartwatch/
4. plus.google.com/+projectglass/posts
5. en.wikipedia.org/wiki/Warcraft_II:_Tides_of_Darkness
6. их еще нет
7. www.timeanddate.com/time/map/
8. en.wikipedia.org/wiki/Project_Glass

Автор: herbahabr

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js