Автокликер Clickermann :: Форум
Основной раздел => Использование => Topic started by: dalyx on January 29, 2017, 10:25:52 AM
-
Всем привет. Возникла необходимость в написание кода для игры.
Задачи:
1. Ищем кнопку боя (по скриншоту). Немного Ждем, дабы прогрузиться.
2. Во время боя смотрим наличие, закрывающего крестика (опять по скриншоту). Если есть то просто на него нажимаем.
3. Ждем когда закончится бой. Ведем проверку по наличию кнопки нового боя.
4. Также одновременно, во время боя, проверяем на наличие выпадения карточек (бонусов, по скриншоту), они появляются по окончании каждого третьего боя. Но так как они появляются раньше чем кнопка нового боя, то и определять мне кажется придется все время. Когда появились, выбираем случайную карту, и жмем крестик.
Код написал, но вот проблемка, думает долго, сбивается и выходит совсем. Сбоев. Потому что когда ведет проверку крестика (закрытия окна), видит крестик основного окна. (
FOR($a, $a < 19)
star:
GETSCREEN
WAIT(3)
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "кнопка боя.bmp", -1, 100)
LCLICK($_return1, $_return2)
WAIT(15)
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "проверка крестика.bmp", -1, 100)
LCLICK($_return1, $_return2)
END_IF
END_IF
//Зашли в бой и ждем кнопки боя
$check = 0
WHILE($check = 0)
WAIT(3)
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "карточки.bmp", -1, 100)
LCLICK($_return1, $_return2)
END_IF
WAIT(5)
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "проверка крестика.bmp", -1, 100)
LCLICK($_return1, $_return2)
END_IF
WAIT(5)
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "кнопка боя.bmp", -1, 100)
WAIT(10)
GOTO(star)
ELSE
WAITMS(30)
END_IF
END_CYC
END_CYC
-
Попробуй ограничить область поиска, тоесть искать не по всему экрану. Тогда крестик основного окна будет вне области, да и работать будет быстрее.
А по коду тебе лучше Гуру подскажут, но они точно не будут в восторге что ты из цикла по GoTo выскакиваешь :)
-
У цикла FOR нет параметра начального значения, он выполнится 15 раз и перестанет.
снимок надо делать непосредственно перед анализом.
Из циклов выпрыгивать нельзя. Для чего у тебя там переменная $check?
Верный скрипт
FOR($a=0, $a < 19)
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "кнопка боя.bmp", -1, 100)
LCLICK($_return1, $_return2)
WAIT(15)
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "проверка крестика.bmp", -1, 100)
LCLICK($_return1, $_return2)
WAITMS(50)
END_IF
END_IF
//Зашли в бой и ждем кнопки боя
$check = 0
WHILE($check = 0)
WAIT(3)
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "карточки.bmp", -1, 100)
LCLICK($_return1, $_return2)
WAITMS(50)
END_IF
WAIT(5)
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "проверка крестика.bmp", -1, 100)
LCLICK($_return1, $_return2)
WAITMS(50)
END_IF
WAIT(5)
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "кнопка боя.bmp", -1, 100)
WAIT(10)
$check = 1
ELSE
WAITMS(30)
END_IF
END_CYC
END_CYC
HALT
-
Попробуй ограничить область поиска, тоесть искать не по всему экрану. Тогда крестик основного окна будет вне области, да и работать будет быстрее.
А по коду тебе лучше Гуру подскажут, но они точно не будут в восторге что ты из цикла по GoTo выскакиваешь :)
Ограничить не получится, так как местоположение "крестика" основного окна совпадает с тем что ищем(
У цикла FOR нет параметра начального значения, он выполнится 15 раз и перестанет.
снимок надо делать непосредственно перед анализом.
Из циклов выпрыгивать нельзя. Для чего у тебя там переменная $check?
Спасибо за правки. Думал, как закончить цикл, придумал только GOTO.
Но, все таки скрипт таке, давал сбои(
С учетом комментариев выхода из цикла, построил другую конструкцию.
$timer=$timer+1
LOGWRITE ("Цикл №", $timer)
//=============================================
SUB(pboi)
//Зашли в бой и ждем кнопки боя
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "Проверка крестика.bmp", -1, 100)
LCLICK($_return1, $_return2)
END_IF
WAITMS(500)
$check = 0
WHILE($check = 0)
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "карточки.bmp", -1, 100)
LCLICK($_return1, $_return2)
WAIT(10)
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "Проверка крестика.bmp", -1, 100)
LCLICK($_return1, $_return2)
END_IF
$check = 1
END_IF
WAIT(5)
END_CYC
END_SUB
//=============================================
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "Кнопка боя.bmp", -1, 100)
LCLICK($_return1, $_return2)
MOVE(10,10)
LOGWRITE ("Нашли кнопку боя")
END_IF
WAIT(15)
IF($timer=3)
pboi()
LOGWRITE ("Проверяем на цикле №", $timer)
END_IF
IF($timer=6)
pboi()
LOGWRITE ("Проверяем на цикле №", $timer)
END_IF
IF($timer=9)
pboi()
LOGWRITE ("Проверяем на цикле №", $timer)
END_IF
IF($timer=12)
pboi()
LOGWRITE ("Проверяем на цикле №", $timer)
END_IF
IF($timer=15)
pboi()
LOGWRITE ("Проверяем на цикле №", $timer)
END_IF
//ждем кнопки боя
$boi = 0
WHILE($boi = 0)
LOGWRITE ("Ждем кнопку боя")
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "Кнопка боя.bmp", -1, 100)
$boi = 1
ELSE
WAIT(10)
END_IF
END_CYC
Скрипт работает, вроде пока без проблем.
Но вопрос касательно конструкции IF. А именно, чтобы SUB, вызывался, только на циклах 3, 6, 9, 12, 15. Есть, что нибудь, чтобы заменить 5 вызовов IF?
P.S. LOGWRITE - это для себя, чтобы видеть на тесте что делает скрипт. Потом удалю их
-
//=============================================
SUB(pboi)
//Зашли в бой и ждем кнопки боя
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "Проверка крестика.bmp", -1, 100)
LCLICK($_return1, $_return2)
END_IF
WAITMS(500)
$check = 0
WHILE($check = 0)
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "карточки.bmp", -1, 100)
LCLICK($_return1, $_return2)
WAIT(10)
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "Проверка крестика.bmp", -1, 100)
LCLICK($_return1, $_return2)
END_IF
$check = 1
END_IF
WAIT(5)
END_CYC
END_SUB
//=============================================
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "Кнопка боя.bmp", -1, 100)
LCLICK($_return1, $_return2)
MOVE(10,10)
LOGWRITE ("Нашли кнопку боя")
END_IF
WAIT(15)
INC($timer,1)
LOGWRITE ("Цикл №", $timer)
IF(($timer=3)|($timer=6)|($timer=9)|($timer=12)|($timer=15))
pboi()
LOGWRITE ("Проверяем на цикле №", $timer)
END_IF
//ждем кнопки боя
LOGWRITE ("Ждем кнопку боя")
$boi = 0
WHILE($boi = 0)
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "Кнопка боя.bmp", -1, 100)
$boi = 1
ELSE
WAITMS(100) // зачем раз в 10 сек когда 100 мс не будут напрягать процессор
END_IF
END_CYC
-
вот например это нормально?
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "карточки.bmp", -1, 100)
LCLICK($_return1, $_return2)
WAIT(10)
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "Проверка крестика.bmp", -1, 100) // ищем крестик по снимку сделанному до карточки.bmp
LCLICK($_return1, $_return2)
END_IF
$check = 1
END_IF
-
вот например это нормально?
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "карточки.bmp", -1, 100)
LCLICK($_return1, $_return2)
WAIT(10)
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "Проверка крестика.bmp", -1, 100) // ищем крестик по снимку сделанному до карточки.bmp
LCLICK($_return1, $_return2)
END_IF
$check = 1
END_IF
Да нормально, скрин сделанный перед карточками один и тот же. Нет необходимости его обновлять.
-
//=============================================
SUB(pboi)
//Зашли в бой и ждем кнопки боя
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "Проверка крестика.bmp", -1, 100)
LCLICK($_return1, $_return2)
END_IF
WAITMS(500)
$check = 0
WHILE($check = 0)
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "карточки.bmp", -1, 100)
LCLICK($_return1, $_return2)
WAIT(10)
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "Проверка крестика.bmp", -1, 100)
LCLICK($_return1, $_return2)
END_IF
$check = 1
END_IF
WAIT(5)
END_CYC
END_SUB
//=============================================
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "Кнопка боя.bmp", -1, 100)
LCLICK($_return1, $_return2)
MOVE(10,10)
LOGWRITE ("Нашли кнопку боя")
END_IF
WAIT(15)
INC($timer,1)
LOGWRITE ("Цикл №", $timer)
IF(($timer=3)|($timer=6)|($timer=9)|($timer=12)|($timer=15))
pboi()
LOGWRITE ("Проверяем на цикле №", $timer)
END_IF
//ждем кнопки боя
LOGWRITE ("Ждем кнопку боя")
$boi = 0
WHILE($boi = 0)
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "Кнопка боя.bmp", -1, 100)
$boi = 1
ELSE
WAITMS(100) // зачем раз в 10 сек когда 100 мс не будут напрягать процессор
END_IF
END_CYC
Вот эту конструкцию и искал
IF(($timer=3)|($timer=6)|($timer=9)|($timer=12)|($timer=15))
Но не смог найти, как задать несколько условий в IF :'(
Теперь все работает, спасибо за помощь/подсказки.
-
Вот эту конструкцию и искал
IF(($timer=3)|($timer=6)|($timer=9)|($timer=12)|($timer=15))
Но не смог найти, как задать несколько условий в IF :'(
Где только вы ищете непонятно, все описано в справке
(http://savepic.su/7578363.png)
-
Где только вы ищете непонятно, все описано в справке
(http://savepic.su/7578363.png)
Вот не поверишь, именно в справке смотрел, но не по глазам было (