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

Основной раздел => Общие вопросы => Topic started by: Kibes on January 03, 2019, 12:54:22 AM

Title: Рандомные клики по найденным координатам
Post by: Kibes on January 03, 2019, 12:54:22 AM
Помогите плз, есть такая часть кода:

Code: [Select]
getscreen

// поиск изображения pict.bmp в области 0,0 - 1250,959
scanpicture($var, 0,0, 1250,959, "pict.bmp")

// вывод массива, содержащего результаты поиска
while (arrsize($var) > 0)
  $y = arrpop($var)
  $x = arrpop($var)
  print($x,":", $y)
end_cyc

Так вот я хочу получить не только координаты, а и порядковый номер координат. Указал типа:
Code: [Select]
print($var,":", $x,":", $y)
Получаю вот такое:
Code: [Select]
23:22:34 1140: 1239:66
23:22:37 1140: 1206:66
23:22:40 1140: 1173:66
23:22:42 0: 1140:66
Помогите, пожалуйста
Title: Рандомные клики по найденным координатам
Post by: dramster on January 03, 2019, 01:07:33 AM
Конечно можно было и подсчитывать из того примера что ты дал, но проще будет вот так:
Code: (clickermann) [Select]
getscreen

undefine($var)//обнуляем массив если нужно
// поиск изображения pict.bmp в области 0,0 - 1250,959
scanpicture($var, 0,0, 1250,959, "pict.bmp")

// вывод массива, содержащего результаты поиска

FOR($i=0,$i<arrsize($var),2)
   $x = $var[$i]
   $y = $var[$i+1]
   print("Pic ",$i/2," -- ", $x,":", $y)
END_CYC
halt

На выходе будет как то так:
Code: (текст) [Select]
1:02:37 Pic 0 -- 1111:2222
1:02:37 Pic 1 -- 2222:3333
1:02:37 Pic 2 -- 4444:5555

Title: Рандомные клики по найденным координатам
Post by: Kibes on January 03, 2019, 10:23:44 AM
Отлично то, что нужно! Спасибо за оперативность :)
А можно как-то заставить мышку рандомно клацать по найденным картинкам? Пока только получилось по очереди перебирать
Title: Re: Рандомные клики по найденным координатам
Post by: Oraven on January 03, 2019, 01:18:10 PM
Вот тебе рандомные клики

Code: (clickermann) [Select]
GETSCREEN
SCANPICTURE($ARR_SCAN, 0,0, 1250,959, "pict.bmp", 0, 100)
$siz = ARRSIZE($ARR_SCAN)
IF($siz > 0)
   FOR($a=0,$a<$siz,2)
      ARRPUSH($ARR, $a)
   END_CYC
   $i = ARRSIZE($ARR)-1
   WHILE($i>0)
      $j = RND(0,$i)
      IF($i ! $j)
         $tmp = $arr[$j]
         $ARR[$j] = $ARR[$i]
         $ARR[$i] = $tmp
      END_IF
      INC($i,-1)
   END_CYC
   FOR($ARR_NUM=0,$ARR_NUM<$siz/2)
      LCLICK($ARR_SCAN[$ARR[$ARR_NUM]], $ARR_SCAN[$ARR[$ARR_NUM]+1])
      WAITMS(100)
   END_CYC
   UNDEFINE($ARR_SCAN)
   UNDEFINE($ARR)
END_IF
Title: Re: Рандомные клики по найденным координатам
Post by: dramster on January 03, 2019, 02:09:01 PM
Вот тебе рандомные клики

 ??? как-то сложно.

У меня такая схема действий сразу сложилась:
1. получить рандомное число в пределах размера массива.
2. вырвать эти два элемента из массива.
3. готово.

Code: (clickermann) [Select]
GETSCREEN
SCANPICTURE($ARR_SCAN, 0,0, 1250,959, "pict.bmp", 0, 100)


while (arrsize($var) > 0)

   $rnd = int(rnd(0,arrsize($var)-1)/2) * 2  //рандомное четное число в пределах размера массива
   $x = $var[$rnd]    //берем эти рандомные два элемента
   $y = $var[$rnd+1]
   
   print($x,":", $y)  //проверяем
   
   IF($rnd+2 = arrsize($var))  //убираем из массива использованные
      $del = arrpop($var)
      $del = arrpop($var)
   else
      $var[$rnd+1]  = arrpop($var)
      $var[$rnd]    = arrpop($var)
   END_IF
   
  // LCLICK($x, $y)  //  ну и клик c задержкой если нужно
  //wait(1)
end_cyc

halt
Title: Re: Рандомные клики по найденным координатам
Post by: Kibes on January 05, 2019, 02:53:37 AM
Спасибо!

Вот еще вопросик! Этот массив у меня работает как отдельный поток:

Code: [Select]
thread(t1)
 ...
end_thread

Я попытался подвязать вот этот скрипт: http://crapware.aidf.org/forum/index.php?topic=2112.msg12603#msg12603
Но этот скрипт работает, если его разместить непосредственно в теле самого потока. А никак нельзя его вызывать из основного кода программы?
Title: Re: Рандомные клики по найденным координатам
Post by: Oraven on January 05, 2019, 09:08:05 AM
Подпрограмма должна быть описана внутри потока. То есть в каждом потоке по своему описанию.
Проблема в том что переменные в потоках не изолированы, поэтому исключи возможность вызова этой подпрограммы одновременно больше чем в одном потоке.
Title: Re: Рандомные клики по найденным координатам
Post by: Kibes on January 14, 2019, 09:58:26 PM
У меня такая схема действий сразу сложилась:
1. получить рандомное число в пределах размера массива.
2. вырвать эти два элемента из массива.
3. готово.

Code: (clickermann) [Select]
GETSCREEN
SCANPICTURE($var, 0,0, 1250,959, "pict.bmp", 0, 100)


while (arrsize($var) > 0)

   $rnd = int(rnd(0,arrsize($var)-1)/2) * 2  //рандомное четное число в пределах размера массива
   $x = $var[$rnd]    //берем эти рандомные два элемента
   $y = $var[$rnd+1]
   
   print($x,":", $y)  //проверяем
   
   IF($rnd+2 = arrsize($var))  //убираем из массива использованные
      $del = arrpop($var)
      $del = arrpop($var)
   else
      $var[$rnd+1]  = arrpop($var)
      $var[$rnd]    = arrpop($var)
   END_IF
   
  // LCLICK($x, $y)  //  ну и клик c задержкой если нужно
  //wait(1)
end_cyc

halt

Подскажите, а как в логе вывести какая картинка по счету найдена (не нажата)? Не спешил спрашивать, пытался разобраться по этому примеру: http://crapware.aidf.org/forum/index.php?topic=4399.msg30060#msg30060 указал $rnd/2, но не получается... :(
Title: Re: Рандомные клики по найденным координатам
Post by: Oraven on January 14, 2019, 10:08:42 PM
Подскажите, а как в логе вывести какая картинка по счету? Не спешил спрашивать, пытался разобраться по этому примеру: http://crapware.aidf.org/forum/index.php?topic=4399.msg30060#msg30060 Но не получается :(

Ну видимо  print($rnd+1)
Title: Re: Рандомные клики по найденным координатам
Post by: Kibes on January 14, 2019, 10:11:29 PM
Подскажите, а как в логе вывести какая картинка по счету найдена (не нажата)? Не спешил спрашивать, пытался разобраться по этому примеру: http://crapware.aidf.org/forum/index.php?topic=4399.msg30060#msg30060 указал $rnd/2, но не получается... :(

Ну видимо  print($rnd+1)
Нет, получается вот так:
Code: [Select]
21:09:38 7-1205:185
21:09:38 1-1106:185
21:09:38 3-1139:185
21:09:38 1-1237:185
21:09:38 1-1172:185

Всего 5 картинок сейчас, хотел бы рядом с координатами видеть порядковый номер картинки, типа вот так:

Code: [Select]
21:09:38 4-1205:185
21:09:38 1-1106:185
21:09:38 2-1139:185
21:09:38 5-1237:185
21:09:38 3-1172:185
Title: Re: Рандомные клики по найденным координатам
Post by: dramster on January 14, 2019, 11:11:26 PM
Подскажите, а как в логе вывести какая картинка по счету найдена (не нажата)? Не спешил спрашивать, пытался разобраться по этому примеру: http://crapware.aidf.org/forum/index.php?topic=4399.msg30060#msg30060 указал $rnd/2, но не получается... :(

Из моего варианта так просто узнать номер не выйдет, так как там массив уменьшается  после каждого выбора рандомных элементов, при этом последний вставляется вместо удаленного.

Можно немного переделать массив, добавить нумерацию элементов.
Как то так:

Code: (clickermann) [Select]
GETSCREEN
SCANPICTURE($arr, 0,0, 1250,959, "pict.bmp", 0, 100)

FOR($a=0,$a<arrsize($arr), 2)   //переписываем массив в "трехмерный" с нумерацией картинок
   arrpush($var,$arr[$a])
   arrpush($var,$arr[$a+1])
   arrpush($var,$a/2 + 1)  //это номер
END_CYC

while (arrsize($var) > 0)
   
   $rnd = int(rnd(0,arrsize($var)-1)/3) * 3  //рандомное кратное трем число в пределах размера массива
   $x = $var[$rnd]    //берем эти рандомные три элемента
   $y = $var[$rnd+1]
   $n = $var[$rnd+2]  //это номер
   
   print("КАРТИНКА №",$n , ", в координатах - ",$x,":", $y)  //проверяем
   
   IF($rnd+3 = arrsize($var))  //убираем из массива использованные
      $del = arrpop($var)
      $del = arrpop($var)
      $del = arrpop($var)
   else
      $var[$rnd+2]  = arrpop($var)
      $var[$rnd+1]  = arrpop($var)
      $var[$rnd]    = arrpop($var)
   END_IF
   
   // LCLICK($x, $y)  //  ну и клик c задержкой если нужно
   //wait(1)
end_cyc

UNDEFINE($arr)


halt
Title: Re: Рандомные клики по найденным координатам
Post by: Kibes on January 14, 2019, 11:39:14 PM
Спасибо! То что доктор прописал :)