ИО-игры (.io-games) – узкое направление в многопользовательских онлайн-играх, отличающееся упрощенным «песочным» геймплеем и огромной массовкой игроков, сосредоточенной в рамках единой локации («комнаты», room). Название этого класса игр произошло от Интернет-домена .io (Индийский Океан), на котором выкладывались пионеры жанра, например, agar.io и diep.io. Для начинающего разработчика такие игры интересны несложной технической реализацией и интуитивным построением геймплея в плане дизайна и поиска баланса. Ведь если создавать проект для одного пользователя, то придется немало сил приложить для создания интересной сюжетной части. Не менее важны и визуальная составляющая, и боевая система, и сеттинг. Переход к многопользовательскому проекту существенно упрощает реализацию, ведь основным лакомством становится не графика и сюжет, а взаимодействие с другими игроками, общение и психологические моменты вроде прокачки персонажа — все это приковывает игрока и создает у него интерес, а эти вещи с технической точки зрения более «дешевы», чем поддержка качества исполнения однопользовательского проекта. Но дьявол кроется в деталях — для многопользовательской игры необходимы сервера с высокой производительностью и возможностью хранения большого объема данных. Далеко не каждому разработчику под силу организовать подобное.


В IO-играх персонаж не хранит свою историю. Предполагается, что игрок заходит новым героем после каждой своей гибели — это подход казуального геймплея, просто расширенный на огромное количество игроков. И благодаря ему отпадает солидная часть разработки сервера, связанная с хранением данных. Также нет высоких требований к качеству графики. Наоборот, io-игры чаще всего работают в браузере и графическая составляющая должна быть примитивна и максимально оптимизирована, чтобы позволить качественно играть в «полевых условиях» рабочего офиса или на мобильном гаджете. Если пройтись по конкретным технологическим моментам, то чаще всего клиент .io-игры — это простая html-страничка с графикой, написанной на javascript. Можно использовать WebGL, он более производителен, чем, например, Flash или использование Canvas. Отдельным плюсом является то, что большинство современных игровых движков поддерживают интерпретацию проектов в коды Javascript с вкраплениями шейдеров WebGL. Например, в популярном Unreal Engine такая возможность появилась с версии 4.7.


Для общения с игровым сервером используют либо RestAPI, либо технологию WebSockets. Клиент при этом делают максимально тонким, чтобы с него на сервер уходило минимум информации. Это делается для того, чтобы исключить читерство игроков. Например, в oceanar.io, популярной игре про рыб, на сервер уходит только скорость и направление движения управляемой игроком рыбки. Основа логики клиентской части — это десериализация (диспетчеризация) данных, приходящих с сервера, и их визуализация. Основная игровая логика (при тонком клиенте) реализуется на стороне сервера. Технология тут не играет роли, клиенты пишутся на C++, Java, Ruby, Python и других ЯП. Если протокол взаимодействия клиента и сервера основан на http, то для повышения производительности код можно оформить в виде плагина к одному из популярных web-серверов вроде nginx.


В основе геймдизайна при создании .io-игр лежит решение проблемы выдерживания баланса между игроками, долго играющими сессию, и новичками, обладающими высокими навыками игры. Большое количество времени, проведенное в игровой комнате должно давать определенное преимущество персонажу, однако не решающее в противостоянии с новеньким героем, который должен иметь шансы против «ветеранов» за счет качества своей игры. Напоследок стоит коснуться отладки и нагрузочного тестирования проекта — очень важно реализовать адекватных ботов. Они позволят пересмотреть игровой дизайн «на лету», протестировать производительность и развлечь небольшое количество живых игроков на старте проекта.