Author Topic: Рандомные клики по найденным координатам  (Read 2717 times)

0 Members and 1 Guest are viewing this topic.

Kibes

  • Освоившийся
  • **
  • Posts: 23
    • View Profile
Помогите плз, есть такая часть кода:

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
Помогите, пожалуйста
« Last Edit: January 03, 2019, 01:14:31 PM by Oraven »

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Рандомные клики по найденным координатам
« Reply #1 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

« Last Edit: January 03, 2019, 01:15:02 PM by Oraven »

Kibes

  • Освоившийся
  • **
  • Posts: 23
    • View Profile
Рандомные клики по найденным координатам
« Reply #2 on: January 03, 2019, 10:23:44 AM »
Отлично то, что нужно! Спасибо за оперативность :)
А можно как-то заставить мышку рандомно клацать по найденным картинкам? Пока только получилось по очереди перебирать
« Last Edit: January 03, 2019, 01:15:07 PM by Oraven »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Вот тебе рандомные клики

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

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Вот тебе рандомные клики

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

У меня такая схема действий сразу сложилась:
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

Kibes

  • Освоившийся
  • **
  • Posts: 23
    • View Profile
Спасибо!

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

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

Я попытался подвязать вот этот скрипт: http://crapware.aidf.org/forum/index.php?topic=2112.msg12603#msg12603
Но этот скрипт работает, если его разместить непосредственно в теле самого потока. А никак нельзя его вызывать из основного кода программы?

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Подпрограмма должна быть описана внутри потока. То есть в каждом потоке по своему описанию.
Проблема в том что переменные в потоках не изолированы, поэтому исключи возможность вызова этой подпрограммы одновременно больше чем в одном потоке.

Kibes

  • Освоившийся
  • **
  • Posts: 23
    • View Profile
У меня такая схема действий сразу сложилась:
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, но не получается... :(
« Last Edit: January 14, 2019, 10:17:09 PM by Kibes »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Подскажите, а как в логе вывести какая картинка по счету? Не спешил спрашивать, пытался разобраться по этому примеру: http://crapware.aidf.org/forum/index.php?topic=4399.msg30060#msg30060 Но не получается :(

Ну видимо  print($rnd+1)

Kibes

  • Освоившийся
  • **
  • Posts: 23
    • View Profile
Подскажите, а как в логе вывести какая картинка по счету найдена (не нажата)? Не спешил спрашивать, пытался разобраться по этому примеру: 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
« Last Edit: January 14, 2019, 10:16:45 PM by Kibes »

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Подскажите, а как в логе вывести какая картинка по счету найдена (не нажата)? Не спешил спрашивать, пытался разобраться по этому примеру: 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

Kibes

  • Освоившийся
  • **
  • Posts: 23
    • View Profile
Спасибо! То что доктор прописал :)