Геолокационные игры (ПокемонГо, Ингресс)

Привет всем.

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

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

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

Тема хайповая, наверняка есть какие-то стартапы-сервисы, опенсорс.

нагуглил:

небольшой обзор сервисов и методов (осторожно, передоз смайликов :partyparrot:)

туториал какого-то движка, юзают Redis для кэша

на хабре еще недавно видел пост о сложностях автоматического выбора точек на карте

Они там вроде бесплатно раздают движок, правда по заявкам: https://niantic.dev

это наверно не специфично данному жанру, во многих мультиплеерах так, или даже просто сайтах, от этого форума до фейсбука (тут вроде тупо периодический polling по HTTP, реже когда вкладка не активна, в более реалтаймовом вебе типа чатов - веб-сокеты)

Спасибо, гляну.

Я делаю Крестики-нолики на Node.js в виде браузерной. Можно будет комнаты создавать для двух человек. Вместо прямого использования веб-сокетов я взял обёртку над ними - socket.io. На Node.js мне удобнее делать, потому что я разобрался, как хостить на бесплатном Heroku. Мне нравится, что сразу можно быстро разворачивать при “git push”. Можно с другом тестировать сервер. Связаться по скайпу и тестить. Я взял Крестики-нолики, потому что это, пожалуй, самая простая игру в мире, в которую можно играть по сети. Для 2D графики я взял Phaser, потому что быстрее, чем на чистом WebGL. На WebGL размер приложение получается меньше и GLSL даёт больше возможностей для обработки графики. Если есть наработки на WebGL, то можно на нём, если нет, то для 2D можно взять Phaser или Pixi.js, а для 3D - Babylon.js или Three.js. Если полной свободы хочется и максимальной эффективности, то чистый WebGL/GLSL, но его изучать намного дольше, нужно много практики и понимание общей математики компьютерной графики.

А геолокация тут причем?))

Я думал, что можно начать с написания сервера на socket.io Далее, исходить из того, что есть по геолокации для Node.js. Выбор технологий может определять выбор других технологий. Может быть на ASP .NET и SingalR делать - это один стек технологий. Если на Python писать сервер - то другой. Мой выбор пал на данный стек технологий, что я описал. Выбор - что использовать для графики тоже важен. А вообще, лучше начинать тренироваться на маленьких сетевых играх. Я поэтому не берусь за большие проекты. Можно отрабатывать стек на мелких сетевых играх, а дальше по нарастающей.

1 лайк

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

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

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

Если это хобби, то, конечно, да. У меня это далеко не хобби. За плечами, помимо маленьких учебных, уже около десятка крупных(правда, сделанных не в одно лицо). Время делать тестовые маленькие проектики, от которых главный проект не зависит, прошло.

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

Разработка игровых серверов - это пока хобби. Я когда набью руки на маленьких сетевых играх, то параллельно буду изучать монетизацию браузерных многопользовательских игр. Я не знал, что вы уже много маленьких игровых серверов написали и участвовали в разработке крупных игровых серверов. Я думал, что вы ещё ни одной многопользовательской игры не написали и даже простую игру на двоих. Для метя самое сложное - это компенсация сетевых задержек через прогнозирование на клиенте и интерполяция движений других клиентов, чтобы создать плавное перемещение других клиентов, когда игра крутится на одном авторитарном сервере. Я рад, что у вас уже большой опыт написания маленьких учебных игровых серверов и написание крупных игровых серверов. Я знаю, как это не просто, сколько это времени требует и огромное количество практики. Я тоже сейчас тренируюсь на маленьких игровых серверках, чтобы зарабатывать на более серьёзным браузерных многопользовательских играх. На большие доходы я не рассчитываю. Главное, что мне очень нравится учиться писать игровые серверы на практике.

А у меня так устроен мозг, что я быстро, к сожалению, могу забывать в чём не практикуюсь. Какое-то время не писал графику, то есть шейдеры и стал забывать. Либо с SQL не работал - и опять. Много времени на unit-тестирование и TDD тратил, особенно, на Mock-объекты и тоже сейчас приходится вспоминать и практиковаться. Так же я регулярные выражения подзабыл без написания тестовых примерчиков. Это кошмар, что у меня за память. Мне чтобы что-то запомнить, нужно много-много раз повторить, чтобы я мог код писать из головы. Но я нашёл ключ к себе. Когда мне не требуются заказы, то я открываю пустой проект и начинаю писать, что я много раз до этого писал. Банально - кубик на OpenGL. Либо какие-то старые туториалы достаю, которые я делал и начинаю переписывать на другие языки. Или просто простые примеры переписываю, как тут в теме про Phaser, где я один пример переписал и то я его на бумаге ручкой пишу, чтобы мои мозги могли его запомнить и чтобы я не обращался к нему, а раз за разом мог его воспроизводить из головы. Мне всё приходится доводить до автоматизма через переписывание маленьких примеров, чтобы сделать это частью себя, частью долговременной памяти.