Основы программирования ботов на SikuliX

SikuliX имеет ряд особенностей, о которых я расскажу далее. Этот IDE разработан с целью автоматизации рутины, т.е. для создания роботов, в том числе и для игр.

Скрипт не вмешивается в обмен данными по сети или работу игрового клиента. Он действует как игрок : наблюдает то, что происходит на экране и выполняет действия.

Я использую IDE в связке с Python, потому примеры буду приводить на этом языке. Раньше я не программировал на Python, учился «на лету».

SikuliX — дальтоник

IDE не видит различий между картинкой в цвете и той же картинкой в серых тонах. Если в приложении (или игре) неактивная кнопка отличается от активной цветностью — то SikuliX не сможет их различить, даже если вы применяете метод exact().

Реакция клиента

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

Иначе возникает т.н. проскальзывание. Программа считает, что выполнила действие и продолжает исполнение операции дальше.

Функция routing_transition принимает в качестве аргументов два изображения. Первое — CL — картинка, на которую требуется осуществить нажатие. Второе — WT — изображение, появление которого ожидается после нажатия.

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

Не плановые события

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

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

Что можно сделать? Такую проверку можно организовать в отдельном потоке.

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

Вернемся к потокам чуть позже.

Горячие клавиши

Ваш робот скорее всего зациклен, т.е. будет выполнять бесконечно заложенную в него программу действий. Как бы прервать его работу, не убивая процесс javaw.exe в диспетчере задач?

Можно определить «горячие клавиши».

Теперь программа будет выполняться до тех пор, пока вы не нажмете CTRL+F1.

Возвращаясь к неплановым событиям, поточную функцию можно переписать следующим образом:

Написать комментарий

 

Комментарии к «Основы программирования ботов на SikuliX»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: