1
Общие вопросы / Re: Пошоговые действия.Рандомные события - действия к ним
« on: April 25, 2021, 03:45:07 PM »Quote
Непонятна роль куска в районе строк 46-58. Он лишний. Дальше идёт этот же поиск опять.Да, (я тогда не знал про GOTO) но только тогда, когда условие ложно - сперва он ищет предыдущий пиксель/картинку,который был еще в предыдущем include'e - действует с ним - снова ищет текущий пиксель в текущем скрипте(include'e)
Quote
Ищем картинку с таймером P1.bmp, должна обязательно появится одна из P1.bmp, P2.bmp, P3.bmp, P4.bmp сразу.появиться одна из 3 разных картинок в разных координатах одновременноЧтобы правильно написать этот кусок, нужно понимать что нужно. Код совсем не соответствует описанию, в нём нет поиска 3 картинок нив каком порядке.
Все вот эти "Кликаю на картинку/пиксель" "действия к разным картинкам" и прочие общие слова ясности не добавляют. Нужно писать конкретно с привязкой к показанному коду.
Например: ищем картинку P1.bmp, должна обязательно/необязательно появится одна из/одна или несколько сразу - P10.bmp, P20.bmp, P30.bmp
Нужно ждать пока появятся - все сразу/все по очереди/хотя бы одна и т.д. Что делаем после того как появилась. Что делать если не появилась.
Нужно ждать пока появятся - хотя бы одна. После того как появилась делаем клик по картинке (Р1 - клик 10 раз, к Р2-Р4 это не применяется) и ожидаем исчезновение. Если не появилась - возвращение к предыдущему такому же условию которое вызвало картинку Р1.
Грубо говоря если нашел Р1 выполнил действия, то все ок - иди дальше к следующим include'ам искать картинки по списку. Если нашел Р2-Р4 - то ищи картинки еще в этом условии с таймерами на появление и исчезновение.
Насколько я понял это можно реализовать через подпрограммы вызывая их.
Почему мне не подходят обычные процедуры для каждой отдельной картинки? - потому что мне нужно ожидать картинку и ожидать исчезновения. После Else'a уже находясь в цикле я не могу его вызвать снова пока он не закончится и я не выйду с условия.
Для общей картины обьясню, что вообще происходит. Я нажимаю на кнопку которая повышает мой лвл(Р1) - когда я делаю это, может произойти 1 из 3 событий, из-за которых выскакивает новое окно: (Р2)недостаточно энергии, (Р3)недостаточно талонов, (Р4)новый уровень.
Соответственно когда мне выскакивает 1 из 3 окон я должен нажать на него и еще понажимать несколько картинок после него чтобы вернуться к Р1 и продолжить сценарий.
Вроде так, если нашел Р2-Р4 - кликаю на него и делаю другие действия (sub), ищу следующие картинки еще в этом условии и потом выхожу из него и иду дальше по сценарию по include'ам.
Как в одной подпрограмме искать несколько картинок поочереди например 5 раз путем повышения числа переменной $action_pic.
И если не нашел например вторую (pvp2) картинку - возвращалось на предыдущую (pvp1) - в конце повышения числа должно искать pvp5.bmp
Если не нашел первую (pvp1) - возвращайся к условию которое вызвало подпрограмму 63 строка(тоесть это уже выход из программы,если такое возможно)
Пример для понимания:
Code: (clickermann) [Select]
SUB(action1, $sp_x1, $sp_y1, $sp_x2, $sp_y2, $action1_pic,$action_mode)
//====================// Координаты PVP
$sp_x1 = 902
$sp_y1 = 98
$sp_x2 = 923
$sp_y2 = 147
//====================
//====================// Название картинки - "pvp1"
$action1_pic = pvp1
//====================
$time = $_time_t + 10
WHILE($time > $_time_t)
GETSCREEN($sp_x1, $sp_y1, $sp_x2, $sp_y2)
COLORMODE(7, $sp_x1, $sp_y1, $sp_x2, $sp_y2)
IF_PICTURE_IN($sp_x1, $sp_y1, $sp_x2, $sp_y2, STRCONCAT("screens\", $action1_pic, ".bmp"))
IF($action_mode = 1)
$time = 0
print("Распознал_", $action1_pic)
ELSE
print("Действую_", $action1_pic)
LCLICK($_return1, $_return2)
waitms(500)
END_IF
ELSE
IF($action_mode = 1)
ELSE
$time = 0
print("Дальше")
END_IF
END_IF
waitms(100)
END_CYC
IF($time ! 0)
print("Не_распознал")
//И если не нашел например вторую (pvp2) картинку - возвращалось на предыдущую (pvp1)
END_IF
END_SUB
FOR ($i, $i<10)// кликнуть 10 раз на Р1
$time = $_time_t + 10 // таймер на 10 секунд
WHILE($time > $_time_t)
GETSCREEN
COLORMODE (7)
IF_PICTURE_IN (0,0,100,200, $_xmax,$_ymax, "screens\P1.bmp", -1, 100)
$time = 0
LCLICK($_return1, $_return2)
WAITMS(100)
END_CYC
ELSE
IF_PICTURE_IN (902,98,923,147, "screens\P2.bmp", -1, 100)
$time = 0
LCLICK($_return1, $_return2)
//вызываю подпрограмму чтобы выполнить действия
action1($sp_x1, $sp_y1, $sp_x2, $sp_y2, $action1_pic, 1)
action1($sp_x1, $sp_y1, $sp_x2, $sp_y2, $action1_pic, 2)
// и так далее вызывать
ELSE
IF_PICTURE_IN (750,230,910,300, $_xmax,$_ymax, "screens\P3.bmp", -1, 100)
$time = 0
LCLICK($_return1, $_return2)
//вызываю подпрограмму чтобы выполнить действия
action2()
// и так далее вызывать
ELSE
IF_PICTURE_IN (470,560,610,650, "screens\P4.bmp", -1, 100)
$time = 0
LCLICK($_return1, $_return2)
//вызываю подпрограмму чтобы выполнить действия
action3()
// и так далее вызывать
END_IF
END_IF
END_IF
END_IF
END_CYC
IF($time ! 0)
// время истекло, ни одна из картинок не найдена
END_IF