Author Topic: Определение комбинации клавиш в зависимости от ряда символов в изображении  (Read 3509 times)

0 Members and 1 Guest are viewing this topic.

Compot

  • Зашел в гости
  • *
  • Posts: 17
    • View Profile
Здравствуйте
Есть изображение:


Нужно нажать клавиши на клавиатуре в направлении соответствующем изображению.
Порядок каждый раз разный.

Сначала думал над вариантом разделить картинку на блоки для сканирования и поочередного определения с соответствующим нажатием.
Но количество стрелок варьируется от 5 до 10, соответственно количество блоков может быть разное и они смещаются.
Плюс ко всему скрипт должен отрабатываться довольно быстро. на все про все около 10-15 секунд

Так же после правильного нажатия стрелка меняет цвет в течении 1 секунды.
При ошибочном нажатии сбрасывается на самое начало.

Подскажите как быть ?
« Last Edit: February 08, 2015, 04:43:44 AM by Compot »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Всё гораздо проще.
 Обычный поиск картинки в области появления первой (4 картинки), затем правее найденной на размер мертвой зоны. Так до момента пока не будет найдено. По ходу поиска прожимать с паузой.
Можно еще вариант... Сканпикчуре 4 раза по разным стрелкам. Затем все 4 массива в 1 общий добавив к каждой паре координат направление. Массив отсортировать по увеличению икс. Всё, схема прожимов есть.
Да ещё вагон вариантов.


Compot

  • Зашел в гости
  • *
  • Posts: 17
    • View Profile
Всё гораздо проще.
 Обычный поиск картинки в области появления первой (4 картинки), затем правее найденной на размер мертвой зоны. Так до момента пока не будет найдено. По ходу поиска прожимать с паузой.
Можно еще вариант... Сканпикчуре 4 раза по разным стрелкам. Затем все 4 массива в 1 общий добавив к каждой паре координат направление. Массив отсортировать по увеличению икс. Всё, схема прожимов есть.
Да ещё вагон вариантов.

Область появления первой картинки меняется постоянно в зависимости от количества. (Изображение по центру) если 10 стрелок то левее, если 5 правее.
Или можно что бы он определил любую из первой стрелок за начальную картинку ?
как говорится; Всё уже украдено до нас.....http://crapware.aidf.org/forum/index.php?topic=1768.0 :D
Что то мой мозг вскипел. Ща еще повникаю конечно
« Last Edit: February 08, 2015, 06:17:20 PM by Compot »

Compot

  • Зашел в гости
  • *
  • Posts: 17
    • View Profile
Можно конечно попробывать нажать любую стрелку..и поиск картинки уже нажатой (она становится синей) если нет то следующую и поиск
потмо определить её начальным изображением и далее искать следующую со смещением.

Можете тогда скинуть пример как искать со смещением..попробую сделать так


Так. Вот посчитал количество пикселей каждой стрелки (в игре стрелки выглядят иначе)

colormode (7)

Направление   Цвет         Кол-во  Количество в правильно нажатой стрелке
право             16777215  325       наж 337
лево               16777215  315       наж 328
низ                 16777215  322       наж 335
верх               16777215  318       наж 331

Подскажите что сделать следующим пунктом. У меня проблема я еще не до конца понимаю всех команд. Справку перечитал но есть моменты в ваших примерах о которых в справке не написано, или не очень интуитивно понятно.
Сори если досаждаю своими вопросами...но очень хочется разобраться в происходящем.
« Last Edit: February 09, 2015, 02:49:49 AM by Compot »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Область появления первой картинки меняется постоянно в зависимости от количества. (Изображение по центру) если 10 стрелок то левее, если 5 правее.
Или можно что бы он определил любую из первой стрелок за начальную картинку ?
Ну сделать предварительный поиск красного цвета, который в стрелке и от найденного-немного искать первую.

P.S. Не нужно ничего считать, здесь это лишнее.
« Last Edit: February 09, 2015, 09:05:26 AM by Vint »


Compot

  • Зашел в гости
  • *
  • Posts: 17
    • View Profile
Так сначала находим координаты первого пикселя первой стрелки
Code: (clickermann) [Select]
GETSCREEN
   COLORMODE(7)
IF_PIXEL_IN(372,333, 917,410,  16777215)
WAITMS(100)

Потом получается от полученного пикселя (я так понимаю это будет первый попавшийся левый верхний) указываю зону поиска и сравниваю с заранее подготовленным изображением. Так ?

Code: (clickermann) [Select]
IF_PICTURE_IN ($_return1 -45, $_return2 -35, $_return1 +96,  $_return2 +17, "verh.bmp", 0, 100)
      KEYPRESS(#W)
     
      WAITMS(100)
   else
   IF_PICTURE_IN ($_return1 -45, $_return2 -35, $_return1 +96,  $_return2 +17, "niz.bmp", 0, 100)
         KEYPRESS(#S)
         
         WAITMS(100)
      else
         IF_PICTURE_IN ($_return1 -45, $_return2 -35, $_return1 +96,  $_return2 +17, "levo.bmp", 0, 100)
            KEYPRESS(#A)
           
            WAITMS(100)
         else
            IF_PICTURE_IN ($_return1 -45, $_return2 -35, $_return1 +96,  $_return2 +17, "pravo.bmp", 0, 100)
               KEYPRESS(#D)
               
               WAITMS(100)
               
            END_IF
         END_IF
      END_IF
   END_IF
END_IF
« Last Edit: February 09, 2015, 02:22:28 PM by Compot »

Compot

  • Зашел в гости
  • *
  • Posts: 17
    • View Profile
Ну коры передалать над я там напутал пока в торопях писал..эт понятно сделаю.
Вот теперь над мне с циклами и подпрограммами разобраться. Какие функции для этого используют...можете подсказать как должна выглядить схема...сделаю под себя

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Размеры и расстояния тщательно не подбирал. Нужно подобрать точнее глядя на другие скрины.
Code: (clickermann) [Select]
GETSCREEN
// здесь нужно выбрать область (полосу)  проходящую по центру стрелок, если такое возможно
IF_PIXEL_IN(372,370, 917,375,  2366701)
   $start_x = $_return1-45
   $start_y = $_return2-30
ELSE
   HALT
END_IF

$find = 1
WHILE($find = 1)
   GETSCREEN
   IF_PICTURE_IN ($start_x,$start_y,$start_x+118,$start_y+88, "right.bmp")
      KEYPRESS(#RIGHT)
      WAITMS(1000)
      $start_x = $start_x + 100
   ELSE
      IF_PICTURE_IN ($start_x,$start_y,$start_x+118,$start_y+88, "left.bmp")
         KEYPRESS(#LEFT)
         WAITMS(1000)
         $start_x = $start_x + 100
      ELSE
         IF_PICTURE_IN ($start_x,$start_y,$start_x+118,$start_y+88, "up.bmp")
            KEYPRESS(#UP)
            WAITMS(1000)
            $start_x = $start_x + 100
         ELSE
            IF_PICTURE_IN ($start_x,$start_y,$start_x+118,$start_y+88, "down.bmp")
               KEYPRESS(#DOWN)
               WAITMS(1000)
               $start_x = $start_x + 100
            ELSE
               $find = 0
               WAITMS(100)
            END_IF
         END_IF
      END_IF
   END_IF
END_CYC

// закончили
HALT

Ну или по другому поделить, ориентируясь на найденное. в преведущий раз.


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Зачем двух? О размерах можно вести речь, когда определится из какой части вырезать картинки будет.