Автокликер Clickermann :: Форум

Основной раздел => Общие вопросы => Topic started by: Skazka on October 28, 2016, 05:23:43 PM

Title: Сократить бы код
Post by: Skazka on October 28, 2016, 05:23:43 PM
Добрый день!
Вот читаю ваши коды пользуюсь переделывал под свои нужды, но появилась потребность искать в небольшом кусочке экрана определенную картинку, но вариаций картинок много штук 25, при наличии каждой должна нажиматься разная клавиша, по сути код выглядит примерно так
 Гетскрин, иф пикча ин, функция, иф пикча ин, функция... И т д
Получается очень много строк можно ли как-то сократить? Если требуется показать текущий код скажите, я думал может это может как-то свитч обработать, но не нашол подходящего примера..
Title: Re: Сократить бы код
Post by: i0 on October 28, 2016, 06:32:40 PM
если в иф_пикча_ин не был использован % совпадений, можно получать контрольную сумму твоего небольшого кусочка с помощью PXLCRC или PXLXOR и потом SWITCH по ней


добавка: если в иф_пикча_ин игнорируемый цвет - тоже не выйдет
Title: Re: Сократить бы код
Post by: Золотой on October 28, 2016, 06:37:28 PM
Добрый день!
Вот читаю ваши коды пользуюсь переделывал под свои нужды, но появилась потребность искать в небольшом кусочке экрана определенную картинку, но вариаций картинок много штук 25, при наличии каждой должна нажиматься разная клавиша, по сути код выглядит примерно так
 Гетскрин, иф пикча ин, функция, иф пикча ин, функция... И т д
Получается очень много строк можно ли как-то сократить? Если требуется показать текущий код скажите, я думал может это может как-то свитч обработать, но не нашол подходящего примера..
Ну конечно можно и сократить
примерно так :
Code: (clickermann) [Select]
Гетскрин,
 иф пикча ин,
 функция,
 иф пикча ин,
 функция...
 И т д
Title: Re: Сократить бы код
Post by: Skazka on October 28, 2016, 07:20:20 PM
Золотой
Я не понял это типа тролинг?

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)
Title: Re: Сократить бы код
Post by: Золотой on October 28, 2016, 07:26:12 PM
это ответ на доступном  и понятном заказчику языке, вот если я по латински начну писать можете считать троллингом.
Title: Re: Сократить бы код
Post by: Skazka on October 28, 2016, 07:30:01 PM
тоесть он так и будет расти с добавлением остальных картинок? и ничего с этим не сделать?
Title: Re: Сократить бы код
Post by: Золотой on October 28, 2016, 07:30:54 PM
Впервые встречается случай когда код ещё не напиасан, а его уже пытаются сокращать.  ;D
Title: Re: Сократить бы код
Post by: Золотой on October 28, 2016, 07:33:18 PM
тоесть он так и будет расти с добавлением остальных картинок? и ничего с этим не сделать?
Освойте подпрограммы с параметрами, это самое сильное средство сокращения кода.
может быть и #include  вам чем-то поможет.
Title: Re: Сократить бы код
Post by: Skazka on October 28, 2016, 07:36:51 PM
хорошо спасибо, попробую.
Title: Re: Сократить бы код
Post by: i0 on October 28, 2016, 07:52:10 PM
Code: (clickermann) [Select]
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)
Title: Re: Сократить бы код
Post by: i0 on October 28, 2016, 08:02:23 PM
можно и ещё короче в коде.

хранить пары контр.сумма1, код_клавиши1 в одном файле
считывать в массив в начале скрипта
и вместо свича проводить поиск контр.суммы по массиву. п'нятненько?
Title: Re: Сократить бы код
Post by: Skazka on October 28, 2016, 08:03:47 PM
ох вау круто 2 вопроса, как получить контрольную сумму? ну это не самый важный вопрос, думаю нагуглю)
главный вопрос если картинок на цифру 5 несколько типа hammer, mallet, file, это можно както запилить в  вашу штуку?)
Title: Re: Сократить бы код
Post by: Золотой on October 28, 2016, 08:06:07 PM
Code: (clickermann) [Select]
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. Не надо ничего жать, в таких случаях нужно сохранять контрольную сумму в логе и  скрин сектора, для последующего разбора на наличие ошибок и модификации скрипта.
Title: Re: Сократить бы код
Post by: Золотой on October 28, 2016, 08:08:59 PM
ох вау круто 2 вопроса, как получить контрольную сумму? ну это не самый важный вопрос, думаю нагуглю)
главный вопрос если картинок на цифру 5 несколько типа hammer, mallet, file, это можно както запилить в  вашу штуку?)
первый вопрос порадовал!  ;D
если картинок на цифру 5 несколько, то все их контрольные суммы записываются в switch($iCRC) своими строками и у всех будет  keypress(#5)
Title: Re: Сократить бы код
Post by: Золотой on October 28, 2016, 08:13:39 PM
одно только плохо, будет отличаться хоть один пиксель и контрольная сумма не совпадёт, а играя процентом совпадения можно находить картинки даже там где их нет!  ;D
Title: Re: Сократить бы код
Post by: i0 on October 28, 2016, 09:31:51 PM
как получить контрольную сумму?
лучше не гуглить, а открыть справку и найти там PXLCRC
главный вопрос если картинок на цифру 5 несколько типа hammer, mallet, file, это можно както запилить в  вашу штуку?)
эт не моя штука, это просто switch
т.е. нескольким картинкам соответствует одна клавиша? в CASE нельзя прописывать сложные условия, только одно явно указанное значение. значит в случае совпадения клавиши придётся дублировать.

и как верно сказано:
Quote from: Золотой
одно только плохо, будет отличаться хоть один пиксель и контрольная сумма не совпадёт
может, ну его, сокращение это? ;)
во, Оравен спас. и кратко, и гибко
Title: Re: Сократить бы код
Post by: Oraven on October 28, 2016, 09:32:49 PM
Тебе нужно написать подпрограмму с параметрами

Code: (clickermann) [Select]
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")
Title: Re: Сократить бы код
Post by: Vint on October 28, 2016, 09:47:09 PM
Всё делается просто. Один цикл по составному имени, внутри поиск. И реакция либо расписана в свитч либо по массиву.
Примерно 8 строк, если с массивом.
При добавлении картинок, в массив добавляется код кнопки действия и всё.
Я с телефона, поэтому пример писать неудобно. Может и попробую.
Title: Re: Сократить бы код
Post by: Vint on October 28, 2016, 10:08:09 PM
типа такого, если параметры поисков одинаковые.
Code: (clickermann) [Select]
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...
Title: Re: Сократить бы код
Post by: Skazka on October 29, 2016, 12:35:56 AM
ох блин попробую, спасибо парни)
хотя не понял что значит STRSEPARATE, ну может сам найду)

Title: Re: Сократить бы код
Post by: Skazka on October 29, 2016, 07:53:07 AM
во проснулся и понял, Винт, ваш код не учитывает что у меня на  каждой цифре по 5-6 картинок, ведь не получится сделать одинаковое название для картинок) но я так понял вы оперались на то что я выкладывал в начале)
Title: Re: Сократить бы код
Post by: i0 on October 29, 2016, 01:52:33 PM
ваш код не учитывает что у меня на  каждой цифре по 5-6 картинок
как раз таки учитывает
STRSEPARATE("52,51,50,49,49", ",", $key)
т.е. картинкам image3.bmp и image4.bmp соответствует код клавиши "1" (49, см. коды клавиш в приложении к справке)