» » » Обратная разработка первоапрельской «Змейки» от Google

 

Обратная разработка первоапрельской «Змейки» от Google

Автор: admin от 5-04-2019, 14:40, посмотрело: 74

Обратная разработка первоапрельской «Змейки» от Google


Возможно, кто-то из вас заметил, что Google на 1 апреля добавила в приложение Google Maps для Android и iOS интерактивную игру «Змейка».



Специалисты Check Point обычно заняты исследованием последних киберугроз, но здесь очень увлеклись этой игрой, правда, сильно расстраивались из-за проигрышей… поэтому возникла логичная мысль: почему бы её не взломать!

Обратная разработка первоапрельской «Змейки» от Google


Рис. 1. Режим Бога



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



В стеке вызовов много вызовов функции wa(a). Если изучить эту функцию, то мы увидим, что она рекурсивна и отвечает за запрос кадров анимации. wa(a) вызывает функции xa(a, b) и ya(a), которые отображают игровые фигуры (поезд, люди) и поле, соответственно.



Рассмотрим функцию xa(a, b):



Обратная разработка первоапрельской «Змейки» от Google



Она принимает два аргумента: 'a' и 'b'. Первый является частью глобальной переменной Q, которая содержит интересную информацию о нашей игре, включая массив, который представляет собой игровое поле (рис. 2), где мы видим поезд (М), людей и объекты (K). Функция также вычисляет счёт и сохраняет его в c.i, что также эквивалентно Q.b.



Обратная разработка первоапрельской «Змейки» от Google


Рис. 2. Массив игрового поля



Данный массив соответствует такому полю:



Обратная разработка первоапрельской «Змейки» от Google

Рис. 3. Игровое поле



xa(a) также обращается к функции sa(a) на рис. 4, которая генерирует случайные координаты при каждом создании нового человека. Если вызывать функцию более одного раза, то можно создать сколько угодно людей (рис. 5).



Обратная разработка первоапрельской «Змейки» от Google

Рис. 4. Вызов функции sa(a)



Как здесь:



Обратная разработка первоапрельской «Змейки» от Google

Рис. 5. Вызов функции с созданием любого количества людей на карте



Обратите внимание, что даже если вызывать sa(a) более одного раза и забирать человека, счёт не меняется. При подборе пассажира вызывается функция ka(a, b) на рис. 6. Таким образом, её нужно изменить, чтобы при каждом вызове она добавляла 10 очков и обновляла счёт на экране.



Обратная разработка первоапрельской «Змейки» от Google

Рис. 6. Обновлённая функция



Координаты каждой части поезда указаны в Q.b.o.b, где первый элемент представляет собой первый вагончик в поезде.



Обратная разработка первоапрельской «Змейки» от Google

Рис. 7. Массив вагончиков



Это понадобится для создания простого ИИ. Начнём с его логики:



Обратная разработка первоапрельской «Змейки» от Google

Рис. 8. Логика ИИ



Змейка представляет собой машину состояний (конечный автомат):




  • На X=19 идём вниз, пока не доберёмся до Y=19.

  • На X=19 и Y=19 идём влево до X=0.

  • Переходим к машине состояний для зигзагов:


  • Вверх на одну клетку и направо до X=18.

  • Вверх на одну клетку и налево до X=0.

  • Назад к шагу А.


  • На Y=0 идём направо до X=19.

  • Возвращаемся к шагу 1.



  • Полный код опубликован на GitHub.



    Видео:





    Источник: Хабр / Интересные публикации

    Категория: Веб-разработка

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

    Добавление комментария

    Имя:*
    E-Mail:
    Комментарий:
    Полужирный Наклонный текст Подчеркнутый текст Зачеркнутый текст | Выравнивание по левому краю По центру Выравнивание по правому краю | Вставка смайликов Выбор цвета | Скрытый текст Вставка цитаты Преобразовать выбранный текст из транслитерации в кириллицу Вставка спойлера
    Введите два слова, показанных на изображении: *