Author Topic: Маджонг. Поиск картинок  (Read 3784 times)

0 Members and 2 Guests are viewing this topic.

Irina

  • Зашел в гости
  • *
  • Posts: 4
    • View Profile
Маджонг. Поиск картинок
« on: March 23, 2023, 02:45:19 PM »
Доброго времени суток!
Подскажите, пожалуйста, что я не так делаю.
Это мой первый опыт работы в кликере (Clickermann v4.13 x32), мне нужна программа, решающая маджонг.
Просмотрела мануалы по автокликеру, в этой теме был похожий вопрос (venedict).
Принцип работы: кликаю по костяшке, кликер делает ее снимок, и ищет похожую картинку. Работает очень через раз, находя либо 0 вариантов (почти всегда), либо вагон и маленькую тележку. Кликер настроен на игру в левой половине экрана.
проверялка $cLicer отключает режим поиска, когда кликаем по найденной картинке. Надеюсь, имеющихся комментариев хватит для понимания принципа работы программы.
Проверка большой картинки отключена, потому что и маленькая-то не находится.
Заранее спасибо.
Code: (clickermann) [Select]
// 15.03.2023
$cLicer=1
IF (ISKEYDOWN(1)=1) // запись координат клика
   if($cLicer=1)
      //включаем проверялку
      $sx = $_xmouse
      $sy = $_ymouse
     
      GETSCREEN // получаем скриншот экрана
      COLORMODE(3)
      //картинка 20х30 для проверки и 9х9=($capt+1+$capt x $capt+1+$capt) для поиска
      $capt=4 //размер картинки для поиска
      SCREENSHOTFIX($sx-10,$sy-15, $sx+10,$sy+15, "cost20x30.bmp")
      SCREENSHOTFIX($sx-$capt,$sy-$capt, $sx+$capt,$sy+$capt, "cost9x9.bmp")
      //сообщим клик мыши
      print(STRCONCAT("клик мыши ", $_xmouse," x ", $_ymouse))
      //Задержка 0,2 секунды
      WHILE(ISKEYDOWN(1)=1)
         WAITMS(200)
      END_CYC
     
      GETSCREEN // получаем скриншот экрана с закрашенной костяшкой
      COLORMODE(3)
     
      //ищем маленькую картинку
      undefine($ARR)
      SCANPICTURE($ARR, 20,25, 1020,$_ymax-30, "cost9x9.bmp", -1, 20)
      //SCANPXL($ARR, 20,25, $_xmax-20,$_ymax-30, $clr)
      print(STRCONCAT(ARRSIZE($ARR)/2, " возможных координат"))
     
      if (ARRSIZE($ARR)<10)
         //отключаем проверялку
         $cLicer=0
         
         $size = ARRSIZE($ARR)
         $number=1
         FOR($i=0,$i<$size,2)
            //перечислим найденные картинки
            print(STRCONCAT($number, " ", $ARR[$i]+$capt," х ", $ARR[$i+1]+$capt))
            //сделаем снимки для проверки
            SCREENSHOTFIX($ARR[$i],$ARR[$i+1],$ARR[$i]+$capt*2,$ARR[$i+1]+$capt*2, STRCONCAT("scr_", $number, ".bmp"))
            SCREENSHOTFIX($ARR[$i]-10+$capt,$ARR[$i+1]-15+$capt,$ARR[$i]+10+$capt,$ARR[$i+1]+15+$capt, STRCONCAT("scrBig_", $number, ".bmp"))
           
            //проверим большой картиной
            //IF_PICTURE_IN($ARR[$i]-10+capt,$ARR[$i+1]-15+capt,$ARR[$i]+10+capt,$ARR[$i+1]+15+capt, "cost20x30.bmp", -1, 50)
            MOVE($ARR[$i]+$capt,$ARR[$i+1]+$capt)
            //wait(3)
            LCLICK($ARR[$i]+$capt,$ARR[$i+1]+$capt)
            //$i=$size
            //HALT
            //END_IF
            $number=$number+1
         END_CYC
      end_if
      $cLicer=1
      print(" ")
   END_IF
END_IF

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Маджонг. Поиск картинок
« Reply #1 on: March 23, 2023, 03:44:50 PM »
Подскажите, пожалуйста, что я не так делаю.
Работает очень через раз, находя либо 0 вариантов (почти всегда), либо вагон и маленькую тележку.

Нет паузы в конце действующей если ЛКМ не нажата. Одно ядро процессора будет сильно загружено.
Если мы ищем в области (20,25, 1020,$_ymax-30), то и гетскрину с колормодом можно указать эту область.

Code: (clickermann) [Select]
COLORMODE(3) слишком маленький режим колормода, ещё слишком много оттенков. На практике никогда ниже 5 не применял. Самые ходовые 6,7,8

Code: (clickermann) [Select]
SCANPICTURE($ARR, 20,25, 1020,$_ymax-30, "cost9x9.bmp", -1, 20)слишком маленький процент совпадения. При таком проценте может находить даже то чего нет, там где его нет. 60 - минимальный край. Лучше не опускаться ниже 70. В любом случае чем выше, тем лучше и быстрее. Поэтому % нужно подбирать сверху-вниз.

проверялка $cLicer отключает режим поиска, когда кликаем по найденной картинке.
не очень понятно что отключает $cLicer. Точнее, в этом коде он не делает ничего, потому, что все манипуляции с ним находятся внутри условия куда мы по нему и зашли.


Второй GETSCREEN+COLORMODE можно не делать, ведь у нас уже есть снимок и ничего не изменилось. Так... "скриншот экрана с закрашенной костяшкой"... т.е. она после клика подкрашивается? Тогда мы в первом гетскрине скорее всего ловим уже закрашенную. А при наведении цвет не меняется?
Не видя скринов на всех этапах трудно сказать в чём причина.

P.S. Хотелось бы отделить в отдельную тему, а то здесь свалка получается.


Irina

  • Зашел в гости
  • *
  • Posts: 4
    • View Profile
Re: Маджонг. Поиск картинок
« Reply #2 on: March 23, 2023, 04:04:50 PM »
Спасибо за анализ ситуации.
Как задумывалась программа: кликаем по костяшке, снимаем ее изображение. Ждем 0,2 секунды, игра ее закрашивает (обычно в голубой цвет). Снимаем снова, и кликер картинку с белой костяшкой с голубой уже не сравнивает (это чтобы не проверять, не является ли найденная картинка исходной).
проверялка $cLicer. Изначально она 1 и позволяет проверять картинку, при 0 нет. Эта "хитрость" работает, т.е. когда кликерман кликает по найденным рисункам, поиск не запускается.
Для контроля процесса я создаю маленькую картинку (чтобы посмотреть, что кликер нашел).

Irina

  • Зашел в гости
  • *
  • Posts: 4
    • View Profile
Re: Маджонг. Поиск картинок
« Reply #3 on: March 23, 2023, 04:09:27 PM »
Колормоды тоже проверяла все, включая 9. Все равно при % совпадений выше 30 он ничего не находит.
Возможно, дело в том (как я предполагаю), что костяшки специально смещают на полпикселя, чтобы нельзя было использовать подобные костыли.
Иногда кликерман срабатывает, причем при проверке я целенаправленно не выбираю похожие костяшки. Не могу понять, при каких условиях кликер срабатывает. Использование команды PXLXOR не помогает, хоть это и выглядит заманчиво (http://crapware.aidf.org/forum/index.php?topic=3743.0).
Кликер проверяю по игре https://www.mahjongclubgame.com/ru/, очень удобно.
« Last Edit: March 23, 2023, 04:29:37 PM by Irina »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Маджонг. Поиск картинок
« Reply #4 on: March 23, 2023, 04:15:52 PM »
Колормоды тоже проверяла все, включая 9. Все равно при % совпадений выше 30 он ничего не находит.
Возможно, дело в том (как я предполагаю), что костяшки специально смещают на полпикселя, чтобы нельзя было использовать подобные костыли.

Никто это специально не делает. Это простое раздолбайство и лень разработчиков. Уж кучу таких игр повидал. Просто при разработке или указывают % сдвига положения или  кратную часть окна 1/2, 1/3, 1/4... что при чётном и нечётном размере окна или блока окна даёт сдвиг на пол пикселя и сглаживание выглядит по другому.


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Маджонг. Поиск картинок
« Reply #5 on: March 23, 2023, 04:18:14 PM »
проверялка $cLicer. Изначально она 1 и позволяет проверять картинку, при 0 нет. Эта "хитрость" работает, т.е. когда кликерман кликает по найденным рисункам, поиск не запускается.
Для контроля процесса я создаю маленькую картинку (чтобы посмотреть, что кликер нашел).
Почти весь код выполняется внутри условия при $cLicer = 1. Внутри этого условия значение меняется туда-сюда, но это не на что не влияет, мы в это время из условия не выходим, мы в него попали и всё.


Irina

  • Зашел в гости
  • *
  • Posts: 4
    • View Profile
Re: Маджонг. Поиск картинок
« Reply #6 on: March 23, 2023, 05:42:01 PM »
Спасибо огромное за подсказку!
Здесь действительно нужно подбирать колормод, плюс поиграть %-м совпадения и разрешением маленькой картинки. Подключила проверку большой картинки, тоже подбираю % совпадения.
Интересный костыль получается.