Как использовать ботов в пиксель батле

Обновлено: 06.07.2024

Впрочем, для начала надо описать, как вообще устроены такие игры.

Первым соревнование на гигантском холсте организовал Reddit, который задал механику: на цифровом полотне каждому из участников игры раз в некоторое время разрешается изменить цвет одного пикселя. Тогда же пользователи начали объединяться в группы для совместного рисования.

В нашем случае всё началось с чата в Telegram, созданного Николаем Кокоулиным для того, чтобы нарисовать на полотне «Пикселей» логотип TJ.

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

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

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

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

Ребята поначалу тихо следили за ходом событий, а затем начали уверять не тратить время на разработку: якобы на стороне сервера есть защита. Примерно тоже самое комментарии редакции TJ утверждала и пресс-служба «ВКонтакте».

Участники чата, конечно же, не верили этим утверждениями и постоянно спорили с разработчиками. Я сам видел, как поставленные подряд пиксели сохранялись в системе даже после обновления страницы.

Развязки этой истории ждать оставалось совсем недолго. Где-то в районе полуночи Вова закончил работу над ботом и запустил его. Программа за несколько секунд нарисовала на полотне большой логотип TJ.

После этого, разработчики поверили в существование бага и поспешили от него избавиться. Ребята из Happy Santa, кстати, оказались весьма приятными, а за найденную уязвимость нам с Вовой подарили толстовки «****-**** [тяп-ляп], и в продакшн». А ещё на память об уязвимости остался нарисованный логотип TJ.

Члены команды Happy Santa чинят игру «Пиксели». Фото @whatsapp

Несложно заметить, что сейчас логотип TJ один из самых больших в «Пикселях» (если не считать логотипы «Лентача», Countryballs и других крупных площадок «ВКонтакте»). Однако над логотипом работает сравнительно небольшая команда, которой вряд ли бы удалось занять и в разы меньше места.

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

Мы первыми отключили таймер и быстро нарисовали логотип в самом начале игры. Мы первыми разработали бота, нарисовавшего нам новый, большой логотип.

Сейчас мы защищаем рисунок с помощью нескольких ботов и ищем новые уязвимости и оптимизируем код уже работающих механизмов. Некоторые площадки предлагали нам обменяться скриптами и аудиторией (мы помогаем рисовать им, а они — нам). Это очень нам помогло.

Пользуясь случаем, напоминаю: нам нужна помощь в защите логотипа TJ. Если вам не сложно, вступите в наш чат и скачайте актуальную версию бота. Больше людей — больше шансов остаться в игре, которая закончится уже через сутки.

Screenshot

Português: Imagine a cidade como um grande quadro para ser pintado coletivamente, em constante transformação através da sobreposição continua de pixels e cores. A batalha é uma provocação ao quanto colaborativos conseguimos ser.

English: Imagine the city as a big canvas to be painted collectively, in constant transformation through the continuous overlap of pixels and colors. The battle is a provocation of how collaborative we can be.

Sobre o projeto (About the project)

Português: Todos podem pintar a cidade usando seus celulares. Seu desenho pode ser sobreposto por outra pessoa. O último pixel desenhado será o exibido para todos. Pessoas também podem explorar livremente os desenhos espacialmente e temporalmente.

English: Everybody can paint the city using their mobile phones. Your drawing can be overlapped by other person drawing. The last pixel drew will be the displayed to everyone else. People can also freely explore spatially and temporally the drawings.

Português: A ideia do projeto começa de conversas com @Mneunomne sobre usar mapas como uma plataforma de intervenções sobre a cidade.

Então eu vi o Reddit Places e surge a ideia de usar a cidade como uma grande tela. A ideia de colaboração e compenteição e como os usuários do Reddit se engajaram realmente me pegou (Complete timelapse).

O projeto foi desenvolvido durante a residência artística Multiverso.

English: The project idea started from talks with @Mneunomne about using maps as a platform of interventions over the city.

Then I saw Reddit Places and I the idea of using the city as a pixel art canvas emerged. The idea of collaboration versus competition and how it engaged the Reddit users really got me(Complete timelapse).

The project was developed during the Multiverso artistic residence.

A tecnologia (The technology)

Português: Primeiro decidir ir com o Leaflet ao invés do Google Maps porque a arquitetura do código era muito mais orientada à JS, e especificamente o grid layer era muito útil.

Então eu decidi usar o HTML Canvas para exibir as pinturas, e foi uma decisão para obter uma boa performance com dados em tempo real e interativos interativa e controle total sobre os desenhos.

O ambiente de produção foi feito com os serviços da Amazon, e toda arquitetura de DevOps foi feita pelo Cristian Mello.

Adotamos no projeto o banco de dados RethinkDB, por sua maneira trabalhar com dados em tempo real.

English: First I decided to go with Leaflet instead of Google Maps because the code architecture was much more JS oriented, and specifically the grid layer was very useful.

So I decided to use HTML Canvas to render the paintings, it was a good decision to get a realtime interactive performance with full drawing control.

The production environment was done using the Amazon services, and all the DevOps archtecture was done by Cristian Mello.

We adopted the RethinkDB database, by his way of working with realtime data.

A complexidade do algoritimo de dados (The algorithm data complexity)

Português: Em geral, todo motor de mapa é feito de quadrados(Tiles). Cada quadrado mostra parcialmente a Terra em nível de ampliação(zoom) correspondente.

Na ampliação 0 um único quadrado exibe a Terra inteiramente.

Na ampliação 19(Máxiom em motorores de mapa) a Terra é dividida em 524.287 (2^19) quadrados horizontalmente e verticalmente.

English: In general, all map engines works with tiles. Each tile show partially earth in the correspondent zoom level.

At zoom level 0 a single tile display the full eath map.

At zoom level 19(maximum in general maps) the earth map is subdivided in 524.287 (2^19) tiles horizontally and vertically.

Grid System

Português: Na ampliação máxima(19) do Pixel Battle os quadrados são subdivididos em 4 linhas e 4 colunas, resultando em 2.097.148 (524.287*4) quadrados horizontalmente e verticalmente.

Finalmente nós temos um total de 4.398.029.733.904 (2.097.148^2) pixels para pintar. Mais de 4 TRILHÕES.

English: At Pixel Battle maximum zoom level(19) the tile is also subdivided by 4 rows and 4 columns, resultin in 2.097.148 (524.287*4) tiles horizontally and vertically.

Finally we got a total of 4.398.029.733.904 (2.097.148^2) pixels to paint. More than 4 TRILLIONS.

Português: Este projeto é executado dentro de um ambiente de desenvolvimento criado pelo Docker Container.

Ao seguir os passos de configuração do repositório acima, o servidor do banco de dados e node serão levantados.

Ao concluir os passos será necessário clonar este repositório na pasta src/ do Container.

English: This project is executed inside a development environment created by a Docker Container.

It is first necessary to clone the Docker repository.

Follow the configuration steps from the repository above, the database server and the node server will get up.

When concluding the steps it will be needed to clone this repository in the /src folder at the Container.

Читайте также: