Предыстория:
Как-то передо мной стала задача -«Хочу прокачать персонажа, но из-за работы не хватает времени..» сразу решил — «Я же инженер, сейчас решим задачу».
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 в автоматизации тестирования Gulsom
Частный случай использования Sikuli для решения проблемы в Facebook Xtragalattico
ссылка на оригинал статьи http://habrahabr.ru/post/230705/
Добавить комментарий