Author Topic: Если картинка поменялась, то нажать в тех координатах  (Read 3403 times)

0 Members and 1 Guest are viewing this topic.

FJ

  • Освоившийся
  • **
  • Posts: 59
    • View Profile
Доброго дня, помогите пожалуйста с такой затеей.
пошаговая стратегия, много мобов, чтобы не делать скрины каждого моба, решил в начале хода сделать скрин определенной области и сравнить его со скрином на след. ход(примеры во вложении).

Пока думаю сделать так:
1 делаем скрин
2 разбиваем его по "гексам" внутри синей области
3 сравниваем со старым скрином, если какой-то гекс изменился, то нажимаем на него(если поменялось несколько гексов, то тыкаем во все по очереди)
4 Ходим
5 повторяем

В общем, как лучше это сделать?

Oraven

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

Code: (clickermann) [Select]
$x = 807 // координата человечка (центр ячейки)
$y = 611

SUB(comp, $xc, $yc)
   IF(PXL($xc, $yc) ! $arr_color[$n])
      LCLICK($xc, $yc) // кликаем на отличающуюся ячейку
      WAITMS(200)
      $check = 1
   END_IF
   INC($n,1)
END_SUB

GETSCREEN // первый снимок
$arr_color[0] = PXL($x+35,$y+0)
$arr_color[1] = PXL($x+18,$y+18)
$arr_color[2] = PXL($x-17,$y+20)
$arr_color[3] = PXL($x-37,$y+2)
$arr_color[4] = PXL($x-17,$y-18)
$arr_color[5] = PXL($x+18,$y-18)
$arr_color[6] = PXL($x+71,$y+0)
$arr_color[7] = PXL($x+53,$y+22)
$arr_color[8] = PXL($x+36,$y+40)
$arr_color[9] = PXL($x+6,$y+40)
$arr_color[10] = PXL($x-35,$y+40)
$arr_color[11] = PXL($x-54,$y+18)
$arr_color[12] = PXL($x-70,$y+0)
$arr_color[13] = PXL($x-52,$y-17)
$arr_color[14] = PXL($x-37,$y-37)
$arr_color[15] = PXL($x+0,$y-37)
$arr_color[16] = PXL($x+36,$y-35)
$arr_color[17] = PXL($x+53,$y-18)
$arr_color[18] = PXL($x+108,$y+2)
$arr_color[19] = PXL($x+91,$y+20)
$arr_color[20] = PXL($x+73,$y+40)
$arr_color[21] = PXL($x+56,$y+58)
$arr_color[22] = PXL($x+18,$y+57)
$arr_color[23] = PXL($x-17,$y+58)
$arr_color[24] = PXL($x-54,$y+60)
$arr_color[25] = PXL($x-70,$y+38)
$arr_color[26] = PXL($x-89,$y+20)
$arr_color[27] = PXL($x-107,$y+2)
$arr_color[28] = PXL($x-90,$y-17)
$arr_color[29] = PXL($x-70,$y-35)
$arr_color[30] = PXL($x-54,$y-55)
$arr_color[31] = PXL($x-15,$y-55)
$arr_color[32] = PXL($x+18,$y-55)
$arr_color[33] = PXL($x+55,$y-55)
$arr_color[34] = PXL($x+73,$y-37)
$arr_color[35] = PXL($x+91,$y-17)
WAITMS(500)

$check = 0
WHILE($check = 0) // цикл поиска отличий
   $n = 0
   GETSCREEN
   comp($x+35,$y+0)
   comp($x+18,$y+18)
   comp($x-17,$y+20)
   comp($x-37,$y+2)
   comp($x-17,$y-18)
   comp($x+18,$y-18)
   comp($x+71,$y+0)
   comp($x+53,$y+22)
   comp($x+36,$y+40)
   comp($x+6,$y+40)
   comp($x-35,$y+40)
   comp($x-54,$y+18)
   comp($x-70,$y+0)
   comp($x-52,$y-17)
   comp($x-37,$y-37)
   comp($x+0,$y-37)
   comp($x+36,$y-35)
   comp($x+53,$y-18)
   comp($x+108,$y+2)
   comp($x+91,$y+20)
   comp($x+73,$y+40)
   comp($x+56,$y+58)
   comp($x+18,$y+57)
   comp($x-17,$y+58)
   comp($x-54,$y+60)
   comp($x-70,$y+38)
   comp($x-89,$y+20)
   comp($x-107,$y+2)
   comp($x-90,$y-17)
   comp($x-70,$y-35)
   comp($x-54,$y-55)
   comp($x-15,$y-55)
   comp($x+18,$y-55)
   comp($x+55,$y-55)
   comp($x+73,$y-37)
   comp($x+91,$y-17)
   WAITMS(500)
END_CYC



FJ

  • Освоившийся
  • **
  • Posts: 59
    • View Profile
спасибо! а вообще, как считаете, идея сама нормальная?
 я еще подумал, как вычислить, в какой ячейке находится объект, ведь допустим эти мыши на 2-3 ячейки могут занимать... а нажимать желательно по центру...