Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: Skazka on October 28, 2016, 05:23:43 PM
-
Добрый день!
Вот читаю ваши коды пользуюсь переделывал под свои нужды, но появилась потребность искать в небольшом кусочке экрана определенную картинку, но вариаций картинок много штук 25, при наличии каждой должна нажиматься разная клавиша, по сути код выглядит примерно так
Гетскрин, иф пикча ин, функция, иф пикча ин, функция... И т д
Получается очень много строк можно ли как-то сократить? Если требуется показать текущий код скажите, я думал может это может как-то свитч обработать, но не нашол подходящего примера..
-
если в иф_пикча_ин не был использован % совпадений, можно получать контрольную сумму твоего небольшого кусочка с помощью PXLCRC или PXLXOR и потом SWITCH по ней
добавка: если в иф_пикча_ин игнорируемый цвет - тоже не выйдет
-
Добрый день!
Вот читаю ваши коды пользуюсь переделывал под свои нужды, но появилась потребность искать в небольшом кусочке экрана определенную картинку, но вариаций картинок много штук 25, при наличии каждой должна нажиматься разная клавиша, по сути код выглядит примерно так
Гетскрин, иф пикча ин, функция, иф пикча ин, функция... И т д
Получается очень много строк можно ли как-то сократить? Если требуется показать текущий код скажите, я думал может это может как-то свитч обработать, но не нашол подходящего примера..
Ну конечно можно и сократить
примерно так :
Гетскрин,
иф пикча ин,
функция,
иф пикча ин,
функция...
И т д
-
Золотой
Я не понял это типа тролинг?
iO
вот примерно мой код там после пикчи нажимаются цифры от 1 до 5 в зависимости от картинки, подойдет чтобы както сократить я просто его еще не доделал) но то что есть точно работает)
# GETSCREEN
IF_PICTURE_IN ( 2408, 811, 2440, 829, "hammer.bmp", -1, 100)
keypress(#4)
waitms(200)
END_IF
IF_PICTURE_IN ( 2408, 811, 2440, 829, "water.bmp", -1, 100)
keypress(#3)
waitms(200)
END_IF
IF_PICTURE_IN ( 2408, 811, 2440, 829, "blakstone.bmp", -1, 100)
keypress(#1)
waitms(200)
END_IF
IF_PICTURE_IN ( 2408, 811, 2440, 829, "pelt.bmp", -1, 100)
keypress(#2)
waitms(200)
END_IF
IF_PICTURE_IN ( 2408, 811, 2440, 829, "iron.bmp", -1, 100)
keypress(#5)
waitms(200)
END_IF
waitms(100)
keypress(69)
waitms(500)
keypress(82)
waitms(500)
keypress(69)
waitms(500)
keypress(82)
waitms(3500)
-
это ответ на доступном и понятном заказчику языке, вот если я по латински начну писать можете считать троллингом.
-
тоесть он так и будет расти с добавлением остальных картинок? и ничего с этим не сделать?
-
Впервые встречается случай когда код ещё не напиасан, а его уже пытаются сокращать. ;D
-
тоесть он так и будет расти с добавлением остальных картинок? и ничего с этим не сделать?
Освойте подпрограммы с параметрами, это самое сильное средство сокращения кода.
может быть и #include вам чем-то поможет.
-
хорошо спасибо, попробую.
-
getscreen
$iCRC= pxlcrc(2408, 811, 2440, 829)
switch($iCRC)
case( ___ ) // вписать контрольную сумму для картинки hammer.bmp
// контрольную сумму для каждого варианта придётся придётся высчитать отдельным скриптом
keypress(#4)
case( ___ ) // вписать контрольную сумму для water.bmp
keypress(#3)
case( ___ ) // вписать контрольную сумму для blackstone.bmp
keypress(#1)
case( ___ ) // вписать контрольную сумму для pelt.bmp
keypress(#2)
case( ___ ) // вписать контрольную сумму для iron.bmp
keypress(#5)
default
print("хьюстон, у меня проблема: в иллюминаторе какая-то неизвестная картинка! хьюстон, я не знаю что жать!!! :(")
end_switch
waitms(200)
-
можно и ещё короче в коде.
хранить пары контр.сумма1, код_клавиши1 в одном файле
считывать в массив в начале скрипта
и вместо свича проводить поиск контр.суммы по массиву. п'нятненько?
-
ох вау круто 2 вопроса, как получить контрольную сумму? ну это не самый важный вопрос, думаю нагуглю)
главный вопрос если картинок на цифру 5 несколько типа hammer, mallet, file, это можно както запилить в вашу штуку?)
-
getscreen
$iCRC= pxlcrc(2408, 811, 2440, 829)
switch($iCRC)
case( ___ ) // вписать контрольную сумму для картинки hammer.bmp
// контрольную сумму для каждого варианта придётся придётся высчитать отдельным скриптом
keypress(#4)
case( ___ ) // вписать контрольную сумму для water.bmp
keypress(#3)
case( ___ ) // вписать контрольную сумму для blackstone.bmp
keypress(#1)
case( ___ ) // вписать контрольную сумму для pelt.bmp
keypress(#2)
case( ___ ) // вписать контрольную сумму для iron.bmp
keypress(#5)
default
print("хьюстон, у меня проблема: в иллюминаторе какая-то неизвестная картинка! хьюстон, я не знаю что жать!!! :(")
end_switch
waitms(200)
хьюстон - i0. Не надо ничего жать, в таких случаях нужно сохранять контрольную сумму в логе и скрин сектора, для последующего разбора на наличие ошибок и модификации скрипта.
-
ох вау круто 2 вопроса, как получить контрольную сумму? ну это не самый важный вопрос, думаю нагуглю)
главный вопрос если картинок на цифру 5 несколько типа hammer, mallet, file, это можно както запилить в вашу штуку?)
первый вопрос порадовал! ;D
если картинок на цифру 5 несколько, то все их контрольные суммы записываются в switch($iCRC) своими строками и у всех будет keypress(#5)
-
одно только плохо, будет отличаться хоть один пиксель и контрольная сумма не совпадёт, а играя процентом совпадения можно находить картинки даже там где их нет! ;D
-
как получить контрольную сумму?
лучше не гуглить, а открыть справку и найти там PXLCRC
главный вопрос если картинок на цифру 5 несколько типа hammer, mallet, file, это можно както запилить в вашу штуку?)
эт не моя штука, это просто switch
т.е. нескольким картинкам соответствует одна клавиша? в CASE нельзя прописывать сложные условия, только одно явно указанное значение. значит в случае совпадения клавиши придётся дублировать.
и как верно сказано:
одно только плохо, будет отличаться хоть один пиксель и контрольная сумма не совпадёт
может, ну его, сокращение это? ;)
во, Оравен спас. и кратко, и гибко
-
Тебе нужно написать подпрограмму с параметрами
SUB(scan, $key, $pic) // подпрограмма в верхней части скрипта
IF_PICTURE_IN (2408,811, 2440,829, $pic, -1, 100)
keypress($key)
waitms(200)
END_IF
END_SUB
GETSCREEN
scan(#4,"hammer.bmp") // вызов подпрограммы с передачей параметров.
scan(#3,"water.bmp")
scan(#1,"blakstone.bmp")
scan(#2,"pelt.bmp")
scan(#3,"iron.bmp")
-
Всё делается просто. Один цикл по составному имени, внутри поиск. И реакция либо расписана в свитч либо по массиву.
Примерно 8 строк, если с массивом.
При добавлении картинок, в массив добавляется код кнопки действия и всё.
Я с телефона, поэтому пример писать неудобно. Может и попробую.
-
типа такого, если параметры поисков одинаковые.
STRSEPARATE("52,51,50,49,49", ",", $key)
FOR($i=0, $i < ARRSIZE($key))
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, STRCONCAT("image",$i,".bmp"))
KEYPRESS($key[$i])
WAITMS(500)
END_IF
END_CYC
Имена картинок сделать с инкрементом вида image0.bmp, image1.bmp...
-
ох блин попробую, спасибо парни)
хотя не понял что значит STRSEPARATE, ну может сам найду)
-
во проснулся и понял, Винт, ваш код не учитывает что у меня на каждой цифре по 5-6 картинок, ведь не получится сделать одинаковое название для картинок) но я так понял вы оперались на то что я выкладывал в начале)
-
ваш код не учитывает что у меня на каждой цифре по 5-6 картинок
как раз таки учитывает
STRSEPARATE("52,51,50,49,49", ",", $key)
т.е. картинкам image3.bmp и image4.bmp соответствует код клавиши "1" (49, см. коды клавиш в приложении к справке)