Author Topic: Скрипт по поиску нужного пикселя, обременённый условиями  (Read 2333 times)

0 Members and 1 Guest are viewing this topic.

BIGoose

  • Зашел в гости
  • *
  • Posts: 5
    • View Profile
Мне нужно найти определённый пиксель на экране и два раза кликнуть на него, но если с ним рядом есть другой пиксель, то его нужно просто пропустить. В этом и заключается проблема, так как поиск всегда идёт с верхнего левого угла. Я попробовал реализовать это так:

Code: [Select]
GETSCREEN
IF_PIXEL_IN(70,150, 1510,848, 7423)  // поиск нужно пикселя
  IF_PIXEL_IN($_return1-20, $_return2-20, $_return1, $_return2, 44543)  // плохой пиксель
  goto(skip)  // идём искать ниже $_return1, $_return2
Else
  dbLCLICK($_return1, $_return2)  // нажимаем, если рядом никого нет
  END_IF
END_IF

skip:
GETSCREEN
IF_PIXEL_IN(70,$_return2+20, 1510,848, 7423)  // ищем ниже от предыдущего, неподошедшего пикселя
IF_PIXEL_IN($_return1-20, $_return2-20, $_return1, $_return2, 44543)  // вдруг плохой снова рядом
WAITms(50)
Else
dblclick($_return1, $_return2)   
END_IF
END_IF

Но таких может быть много на экране и получается нужно делать около 10 таких поисков, а как упростить не знаю.

Но это ещё ладно, дело в том, что всё поле, по которому идёт поиск, у меня на экране не умещается и я разбил его на 3 части, после каждого поиска пикселя, бот кликает на следующий участок и начинает поиск заново. И тут возникает проблема, если на первом участке все пиксели заняты, то есть имеют рядом с собой нежелательный пиксель, то он зацикливается и просто проводит повтор по первой части экрана сверху донизу, и так постоянно. В общем, помогите мне упростить поиск.

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Версия кликера 4.8-4.9

Code: (clickermann) [Select]
GETSCREEN
SCANPXL($ARR_SCAN_1, 70,150, 1510,848, 7423)
SCANPXL($ARR_SCAN_2, 70,150, 1510,848, 44543)

$ARR_NUM_1 = 0
WHILE ($ARR_NUM_1 < ARRSIZE($ARR_SCAN_1))
   $X = $ARR_SCAN_1 [$ARR_NUM_1]
   INC($ARR_NUM_1,1)
   $Y = $ARR_SCAN_1 [$ARR_NUM_1]
   INC($ARR_NUM_1,1)
   $ARR_NUM_2 = 0
   $check_click = 0
   WHILE ($ARR_NUM_2 < ARRSIZE($ARR_SCAN_2))
      $X2 = $ARR_SCAN_2 [$ARR_NUM_2]
      INC($ARR_NUM_2,1)
      $Y2 = $ARR_SCAN_2 [$ARR_NUM_2]
      INC($ARR_NUM_2,1)
      IF(ROUND(DIST($X,$Y,$X2,$Y2),0) < 20)
         $check_click = 1
         $ARR_NUM_2 = 999999
      END_IF
   END_CYC
   
   IF($check_click = 0)
      DBLCLICK($X, $Y)
      WAITMS(50)
   END_IF
END_CYC


HALT