Браузерный робот на Sikuli IDE для игры MusicWars

от автора

игрушка на прокачку

Предыстория:

Как-то передо мной стала задача -«Хочу прокачать персонажа, но из-за работы не хватает времени..» сразу решил — «Я же инженер, сейчас решим задачу».

Music Wars — это новая браузерная MMORPG где вам предстоит в жесткой борьбе отстаивать свои музыкальные предпочтения. Яркая графика, нестандартная боевая система привлекут не только отъявленых меломанов, но и всех поклонников компьютерных игр.

После изучения игрушки MusicWars выяснилось, что она, как и многие браузере игры сделаны на Flash что не даёт полной возможности манипуляции. Выход есть, использовать скрипты ориентирована на программирование графического интерфейса. Я решил использовать sikuli благодаря статье Подробнее о Sikuli в автоматизации тестирования Gulsom.

Преимуществом такого написание является визуальных объектов без всяких премудростей программирования. С таким написанием может справится любой знающий более-менее представления о программирование. Всё написание с отладкой заняло пару чесов!

Персонажа на прокачку:

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

Логика выбора противника

Я использовал Region для большей скорости нахождения элементов т.к. игра занимала только половину экрана.

Логика выбора противника

def left_open_doi(): #смотрим слева     region_left = Region(561,414,386,387)     if region_left.exists("aIE.png"): #если уровень меньше         if region_left.exists("HAI1ACIh2g.png"):             region_left.hover("Cmna.png")             if region_left.exists("1404561848539.png"):                 right_open_boi()             else:                 region_left.click("HAI1ACIh2g.png")                 if Region(177,250,779,551).exists("1404562400404.png"):                     Region(177,250,779,551).click("1404562484299.png")                     sleep(0.23)                     new_okno_boi()                 else:                     if Region(161,175,795,633).exists("Heqocrarouuo.png"):                         Region(161,175,795,633).click("1404562484299.png")                         else_none_boi()                     else:                         if Region(163,171,797,636).exists("HEAOCTBTOHH0.png"):                             sleep(100)                             new_okno_boi()                         else:                             sleep(30)                             close_boi()         else:            right_open_boi()     else:         right_open_boi()  def right_open_boi():     region_right = Region(175,418,388,381)     if region_right.exists("aIE-1.png"):         if region_right.exists("HAI1ACIh2g.png"):             region_right.hover("Cmna.png")             if Region(447,499,96,22).exists("1404561848539.png"):                 new_okno_boi()             else:                 region_right.click("HAI1ACIh2g.png")                 if Region(177,250,779,551).exists("1404562400404.png"):                     Region(177,250,779,551).click("1404562484299.png")                     sleep(0.23)                     new_okno_boi()                 else:                     if Region(161,175,795,633).exists("Heqocrarouuo.png"):                         Region(161,175,795,633).click("1404562484299.png")                         else_none_boi()                     else:                         if Region(163,171,797,636).exists("HEAOCTBTOHH0.png"):                             sleep(100)                             new_okno_boi()                         else:                             sleep(30)                             close_boi()         else:             new_okno_boi()     else:         new_okno_boi() start()  

Закрытия после атаки

def close_boi(): #закрываем окно после боя     if Region(240,250,652,320).exists("QBuxcn.png"):         Region(240,250,652,320).click("QBuxcn.png")         new_okno_boi()     else:         click(Location(555,484))         Region(237,253,652,311).click("1404559699899.png")         if Region(183,266,767,547).exists("Floanpanrmen.png"):             Region(183,266,767,547).click("1404562484299.png")             Region(240,250,652,320).click("QBuxcn.png")             new_okno_boi()         else:             sleep(0)             Region(183,266,767,547).click("QBuxcn.png")             sleep(10)             new_okno_boi() #после закрытия подготавливаем к новым боям      

Смена окна если нету подходящих противников

def new_okno_boi():       Region(411,279,155,100).click("1404557642674.png")      if Region(177,306,378,486).exists("BUKBAJI.png"):           Region(195,412,201,102).click("BUKBAJI.png")           sleep(0.10)           Region(736,627,220,179).hover("1404582245445.png")           sleep(2)           Region(192,316,740,474).click(Pattern("1404559393979.png").targetOffset(-55,20))           if Region(181,253,142,41).exists("BVITBA.png"):               left_open_doi()           else:               sleep(0.10)               Region(192,316,740,474).click(Pattern("1404559393979.png").targetOffset(-55,20))               Region(175,306,770,489).click("1404547957758.png")               left_open_doi()      else:          if Region(216,326,149,128).exists("DBOPbI.png"):              Region(188,310,190,151).click("DBOPbI-1.png")              Region(736,627,220,179).hover("1404582245445.png")              sleep(2)              Region(192,316,740,474).click(Pattern("1404559393979.png").targetOffset(-55,20))              if Region(181,253,142,41).exists("BVITBA.png"):                  left_open_doi()              else:                  sleep(0.10)                  Region(192,316,740,474).click(Pattern("1404559393979.png").targetOffset(-55,20))                  Region(175,306,770,489).click("1404547957758.png")                  left_open_doi()          else:              if Region(376,313,125,121).exists("KOCTEFI.png"):                  Region(373,313,127,108).click("KOCTEFI-1.png")                  Region(736,627,220,179).hover("1404582245445.png")                  sleep(2)                  Region(192,316,740,474).click(Pattern("1404559393979.png").targetOffset(-55,20))                  if Region(181,253,142,41).exists("BVITBA.png"):                      left_open_doi()                  else:                      sleep(0.10)                      Region(192,316,740,474).click(Pattern("1404559393979.png").targetOffset(-55,20))                      Region(175,306,770,489).click("1404547957758.png")                      left_open_doi()  

Скрипт в редакторе Sikuli IDE будет выгладить так:

Скрипт в редакторе Sikuli IDE

Сслыка на репозиторий

Вдохновили на написание такого скрипта следующие статьи:

Подробнее о Sikuli в автоматизации тестирования Gulsom
Частный случай использования Sikuli для решения проблемы в Facebook Xtragalattico

ссылка на оригинал статьи http://habrahabr.ru/post/230705/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *