Автор Гілка: Скрипт на пітоні для полювання на ельфів  (Прочитано 4802 раз)

Відсутній v.2.1

  • Письменник
  • *****
  • дописів: 639
  • Карма: +0/-0
Хочу написати скрипт для sikuli.org, (автоклікер, який розуміє Python).

Для дуже простої гри на Андроїді.
Графіка статична.
Картинка оновлюється тільки після дії користувача,
а значить можна прописати послідовність дій - next, next.

Так виглядає скрипт у інтерфейсі програми:

Цитата
while exists ("puthon_symbol.png"):
    if exists ("grand_elf.png"):  
        click ("grand_elf.png")
        sleep (1)
    if exists ("elf.png"):
        click ("elf.png")
        sleep (1)
        while exists ("attack.png"):
               click ("attack.png")
               sleep (1)
    if exists ("you_win.png"):
        click ("map_button.png")

Перед атакою треба зробити перевірку сірої смужки біля літер Health і якщо вона існує - змінити алгоритм дій

find ("health.png"): #скрин з пошкодженим здоров’ям
PageDown,
clickA,
clickB,
click ("map.png")
click (ворог)
else click ("attack.png") # якщо зі доров’ям все добре тиснемо атакувати

і продовжуємо скрипт далі.

Але я поки не можу зрозуміти, як на Python використати else (чи щось инше?) і скомандувати програмі переключитися на виконання окремого відрізку скрипту, а потім повернутися назад.
« Змінено: 2014-04-28 22:09:36 від vitre »

Відсутній peinguin

  • Літератор
  • ******
  • дописів: 1419
  • Карма: +0/-0

Відсутній v.2.1

  • Письменник
  • *****
  • дописів: 639
  • Карма: +0/-0
Розібрався.
Скрипт працює  ;D

Є тільки проблема в цьому моменті:

    while exists (Pattern("heal.png").similar(0.81).targetOffset(5,7)):
        click ("attack.png"); wait (2)
    if exists ("win.png"):
        click ("map_button.png")

Коли смуга здоров’я стає з зеленої на сіру, то герой повинен припинити атакувати.
Але цього не стається чи через занадто швидкий пошук нового об’єкту, або через те, що програма не достатньо чутлива на зміну кольору у визначеній області.

Відбалансувати чутливістю це не вдаєтсья.
В одному випадку програма не бачить зеленої смужки здоров’я і помилково припиняє атаку,
В иншому навпаки не бачить, що смужка стала сірою і атакує далі.

Можливо, якось можна прописати реакцію на зелений, або сірий колір в певній області. Але я поки до цього не дійшов.
« Змінено: 2014-04-29 00:12:16 від vitre »

Відсутній v.2.1

  • Письменник
  • *****
  • дописів: 639
  • Карма: +0/-0
Розібрався у чому була проблема.

Поки гра оновлює сторінку, sikuli уже біжить навипередки тицяти на графічний об’єкт, якого на новій сторінці уже може і не бути. wait (5) чи sleep (5) не допомагають, таке враження, що вона цілиться заздалегідь, і її ніяк неможливо змусити спати перед пошуком нового графічного об’єкта.
(Можливо я просто не знаю).

Тому, я прописав click (лівий об’єкт) щоб потім sikuli новим поглядом могла ідентифікувати справжню ціль. Инакце ніяк, таймаути не допомагають.
« Змінено: 2014-04-29 08:30:41 від vitre »

Відсутній v.2.1

  • Письменник
  • *****
  • дописів: 639
  • Карма: +0/-0
Підкажіть, будь ласка!
Як зробити, щоб якщо не виконується click то і не виконувався wait?

Бо ряд команд виконується десь до половини, далі не відповідає умові if, але wait працює.


            if exists (Pattern("green_gray.png").similar(0.75)):
                click ("attack.png"); wait (2)
            if exists ("Health.png"):
                click ("Health-1.png"); wait (2)
            if exists (Pattern("green_gray-1.png").similar(0.75)):
                click ("attack-1.png"); wait (2)
            if exists ("Health.png"):
                click ("Health-1.png"); wait (2)
            if exists (Pattern("green_gray-2.png").similar(0.75)):
                click ("attack-2.png"); wait (2)

Відсутній peinguin

  • Літератор
  • ******
  • дописів: 1419
  • Карма: +0/-0
пройдіться дебагером. Навряд чи він дійсно працює.

Відсутній v.2.1

  • Письменник
  • *****
  • дописів: 639
  • Карма: +0/-0
Я так ф планував,, щоб лише до половини код доходив.

Далі моб помирає і атакувати вже не потрібно.
Але пауза прописана слідом за атакою працює, що не потрібно.

Відсутній kisil

  • Графоман
  • ****
  • дописів: 353
  • Карма: +0/-0
  • Toruble in Windows reboot, toruble in Unix be root
    • About me
Підкажіть, будь ласка!
Як зробити, щоб якщо не виконується click то і не виконувався wait?

Бо ряд команд виконується десь до половини, далі не відповідає умові if, але wait працює.


            if exists (Pattern("green_gray.png").similar(0.75)):
                click ("attack.png"); wait (2)
            if exists ("Health.png"):
                click ("Health-1.png"); wait (2)
            if exists (Pattern("green_gray-1.png").similar(0.75)):
                click ("attack-1.png"); wait (2)
            if exists ("Health.png"):
                click ("Health-1.png"); wait (2)
            if exists (Pattern("green_gray-2.png").similar(0.75)):
                click ("attack-2.png"); wait (2)
Ось тут почитайте

Відсутній v.2.1

  • Письменник
  • *****
  • дописів: 639
  • Карма: +0/-0
Прибрав усе. Не думаю, що в цьому маленькому скрипті помилився.
Глюк скоріше за все у програмі.
Цитата
if exists (Pattern("health.png")):        
    click ("attack.png")
else:
    popup ("yabooo!")


Малюнки різні. Зелена лінія здоров’я і сіра:


скриншот гри -

health.png згаданий у скрипті -



Опція Match preview їх не ідентифікує як подібні.
Але коли працює скрипт, вони чомусь стають подібними і виконується click ("atack.png")
« Змінено: 2014-04-29 19:28:32 від vitre »

Відсутній v.2.1

  • Письменник
  • *****
  • дописів: 639
  • Карма: +0/-0
deleted
« Змінено: 2014-05-08 01:46:22 від vitre »