Предыстория:
Как-то передо мной стала задача -«Хочу прокачать персонажа, но из-за работы не хватает времени..» сразу решил — «Я же инженер, сейчас решим задачу».
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
Автор: D_E_S