Еще один способ автоматизировать/тестировать игру

    У Вас есть знакомый, который постоянно играет в какую-нибудь игру в контакте? Не знаю как Вас, а меня нервирует когда взрослый человек тратит по 12 часов на не очень умную игру. Вот глядя на одного такого знакомого захотелось написать робота, который бы играл вместо него.

    Не так давно на Хабре была целая волна статей, посвященных ботам для браузерных игр: [1], [2], [3] и т.д.
    Казалось бы все способы уже перебрали, но недавно я натолкнулся еще на один весьма интересный и менее трудоемкий способ.

    Кому хочется посмотреть как же написать бота для игры в 30 строчек кода — прошу под кат.


    Инструменты

    Инструмент, которым будем пользоваться называется Sikuli.
    Этот инструмент позволяет автоматизировать такие действия как щелчки, перетаскивания и т.д. с помощью скриншотов. Т.е. в отличие от AutoIt не нужно изобретать алгоритм поиска объекта. Sikuli позаботится об этом. А нам остается заняться изобретением алгоритма.

    Алгоритм

    Мой выбор пал на игру «Зомби Ферма». Смысл прост: вскапывай, сажай, собирай урожай. Вот только делать это надо много и постоянно. Я не стал сильно усложнять алгоритм и вот что в итоге получилось:

    Делать вечно:
    1) вскопать 15 грядок
    2) засадить 15 грядок
    3) собрать 15 плодов


    Самым сложным (хотя какая тут к черту сложность!) было купить семена для посадки. В окне выбора семян — куча всего и все очень похожее.


    Можно конечно найти координаты кнопки «купить» по смещению от изображения того, что хотим сажать. Но есть способ проще.
    По умолчанию если вызвать функцию click и передать ей в качестве параметра картинку — произойдет щелчок по ее центру. Но можно задать у любой картинки смещение. Поэтому просто делаем снимок нашего растения вместе с кнопкой «купить» и ставим логический центр на кнопку.


    Код

    А про 30 строчек кода я не соврал (если вычесть пусты строки). Вот они:

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

    Как это работает



    P.S.

    Сайт проекта Sikuli — sikuli.org
    Поделиться публикацией

    Комментарии 20

      0
      Замечательный проект не только для автоматизации, но и для тестирования самых разнообразных гуев.
      А так как весь этот 'хитрый код с картинками' этот попросту Jython с URL'ами на месте картинок, можно его миксовать с любым другим кодом на Jython.
        +2
        А ведь и правда, все настолько просто, что у меня складывается ощущение, что это пойдет в массовое применение, в подобных отнималках времени.
          0
          Писать ботов для таких простых проектов — не интересно. Ради спортивного интереса попробуйте что-нибудь посложнее, например я для себя выбрал tm_game_.ru (убрать "_", чтоб не было рекламы) Там игра на подобии прошлых статей, с камушками, но там по мимо этого есть ещё игровое поле (выбор противника), скиллы, всякие черепки и бонусы камней. А написать такого бота много умений не надо.
            –13
            Ещё один способ задротства в соц сети. Поздравляю, вы превзошли своего знакомого.
              0
              Это конечно хорошо, но как сделать исполняемый файл?
                +5
                … и троян. Что бы сам себя рассылал, а несчастные жертвы копали за меня грядки, пока я сплю.
                  0
                  это не нужно, лучше по вопросу ответьте, а то сохраняю как запускаемый файл, пытаюсь запустить и ничего.
                    0
                    Честно не пробовал. Были проблемы с запуском самой среды, но внимательнее почитав доки понял что для x64 все равно нужно ставить JSE x32 и все заработало.

                    Более интересно не просто exe сделать, а интегрировать Sikuli в программу на Java — но это пока в стадии эксперимента.
                      0
                      как сделать бесконечный цикл с кликом?
                      while fend():
                      click()
                +1
                Сразу появилось желание написать покерного бота )
                  +1
                  Тогда уж лучше бота для торговли на биржах.
                    0
                    Что почти одно и тоже в сущности :-)
                  +3
                  Спасибо. Боты для браузерных игр, конечно, пофигу, а вот интерфейсы тестировать — да, интересно.
                    0
                    Спасибо, задумался.
                      0
                      Под sid'ом штатный пакет падает при старте. Багрепорт в багтрекере кто-то повесил до меня уже.
                        0
                        Буквально месяц назад делал подобное для edgeworld. Уперся в то, что для такой системы надо выделять отдельную машину (виртуальную, например) у которой на экране постоянно будет висеть игра.
                          0
                          Про виртуальную машину хорошо подмечено, а то мой друг уже собрался неттоп под этого бота покупать.
                            +2
                            Зачем виртуальную машину? Поднимите локально vnc4server, будет ещё один X-сервер, к которому подключиться из браузера (то есть запустить на нём браузер).

                            Всех делов-то

                            sudo apt-get install vnc4server tightvncview
                            vnc4server
                            vncview localhost:5901

                          0
                          Автоматизировав Rotapost в Sikuli перестал ей пользоваться, потому что как мне показалась еще сыроватая.
                            0
                            У меня sikuli периодически перестает распознавать картинки, т.е. при клике на картинку в скрипте она распознается на скриншоте, а при запуске скрипта — нет (вылетает с ошибкой, что картинка не была найдена). При этом изначально этот кусок скрипта может отрабатываться нормально, но при увеличении сложности скрипта в какой-то момент перестает отрабатывать распознавание
                            Кто-нибудь знает как побороть такое поведение?

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

                            Самое читаемое