Author Topic: Перебор картинок при совпадение ввод текста.  (Read 1749 times)

0 Members and 1 Guest are viewing this topic.

Alecoq

  • Зашел в гости
  • *
  • Posts: 11
    • View Profile
Здравствуйте не поможете?
Есть 20 картинок для IF_PICTURE_IN(0,0,$_xmax,$_ymax,"img.bmp") с разными словами
Как сделать сканирование всех картинок при совпадении в строку вода написать слово которое, присвоен к картинке и нажать Enter.После вода всех слов с 20 картинок остановить цыкл.

Alecoq

  • Зашел в гости
  • *
  • Posts: 11
    • View Profile
Вот написал исправте что не так.
Code: [Select]
$check = 0
LOGSHOW (1, 100,100)
WHILE($check = 0)
   $check = 0
   WHILE($check = 0)
      getscreen
      IF_PICTURE_IN (0,0, $_xmax, $_ymax, "img1.bmp" ,8512998, 100)
         TOCLIP ("Ñëîâî1")
         WAITMS(50)
         KEYDOWN (#CTRL) // Ctrl+V
         WAITMS (50)
         KEYDOWN (#V)
         WAITMS (50)
         KEYUP (#V)
         KEYUP (#CTRL)
         WAITMS (100)
         KEYPRESS(#ENTER) // Enter
         WAITMS (100)
         LOGWRITE ("Ñëîâî1")
      ELSE
         getscreen
         IF_PICTURE_IN (0,0, $_xmax, $_ymax, "img2.bmp" ,8512998, 100)
            TOCLIP ("Ñëîâî2")
            WAITMS(50)
            KEYDOWN (#CTRL) // Ctrl+V
            WAITMS (50)
            KEYDOWN (#V)
            WAITMS (50)
            KEYUP (#V)
            KEYUP (#CTRL)
            WAITMS (100)
            KEYPRESS(#ENTER) // Enter
            WAITMS (100)
            LOGWRITE ("Ñëîâî2")
         ELSE
            getscreen
            IF_PICTURE_IN (0,0, $_xmax, $_ymax, "img3.bmp" ,8512998, 100)
               TOCLIP ("Ñëîâî3")
               WAITMS(50)
               KEYDOWN (#CTRL) // Ctrl+V
               WAITMS (50)
               KEYDOWN (#V)
               WAITMS (50)
               KEYUP (#V)
               KEYUP (#CTRL)
               WAITMS (100)
               KEYPRESS(#ENTER) // Enter
               WAITMS (100)
               LOGWRITE ("Ñëîâî3")
            ELSE
               getscreen
               IF_PICTURE_IN (0,0, $_xmax, $_ymax, "img4.bmp" ,8512998, 100)
                  TOCLIP ("Ñëîâî4")
                  WAITMS(50)
                  KEYDOWN (#CTRL) // Ctrl+V
                  WAITMS (50)
                  KEYDOWN (#V)
                  WAITMS (50)
                  KEYUP (#V)
                  KEYUP (#CTRL)
                  WAITMS (100)
                  KEYPRESS(#ENTER) // Enter
                  WAITMS (100)
                  LOGWRITE ("Ñëîâî4")
               ELSE
                    $check = 1
               END_IF
           END_CYC

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Вот написал исправте что не так.
Code: [Select]
$check = 0
LOGSHOW (1, 100,100)
WHILE($check = 0)
   $check = 0
   WHILE($check = 0)
      getscreen
      IF_PICTURE_IN (0,0, $_xmax, $_ymax, "img1.bmp" ,8512998, 100)
         TOCLIP ("Ñëîâî1")
         WAITMS(50)
         KEYDOWN (#CTRL) // Ctrl+V
         WAITMS (50)
         KEYDOWN (#V)
         WAITMS (50)
         KEYUP (#V)
         KEYUP (#CTRL)
         WAITMS (100)
         KEYPRESS(#ENTER) // Enter
         WAITMS (100)
         LOGWRITE ("Ñëîâî1")
      ELSE
         getscreen
         IF_PICTURE_IN (0,0, $_xmax, $_ymax, "img2.bmp" ,8512998, 100)
            TOCLIP ("Ñëîâî2")
            WAITMS(50)
            KEYDOWN (#CTRL) // Ctrl+V
            WAITMS (50)
            KEYDOWN (#V)
            WAITMS (50)
            KEYUP (#V)
            KEYUP (#CTRL)
            WAITMS (100)
            KEYPRESS(#ENTER) // Enter
            WAITMS (100)
            LOGWRITE ("Ñëîâî2")
         ELSE
            getscreen
            IF_PICTURE_IN (0,0, $_xmax, $_ymax, "img3.bmp" ,8512998, 100)
               TOCLIP ("Ñëîâî3")
               WAITMS(50)
               KEYDOWN (#CTRL) // Ctrl+V
               WAITMS (50)
               KEYDOWN (#V)
               WAITMS (50)
               KEYUP (#V)
               KEYUP (#CTRL)
               WAITMS (100)
               KEYPRESS(#ENTER) // Enter
               WAITMS (100)
               LOGWRITE ("Ñëîâî3")
            ELSE
               getscreen
               IF_PICTURE_IN (0,0, $_xmax, $_ymax, "img4.bmp" ,8512998, 100)
                  TOCLIP ("Ñëîâî4")
                  WAITMS(50)
                  KEYDOWN (#CTRL) // Ctrl+V
                  WAITMS (50)
                  KEYDOWN (#V)
                  WAITMS (50)
                  KEYUP (#V)
                  KEYUP (#CTRL)
                  WAITMS (100)
                  KEYPRESS(#ENTER) // Enter
                  WAITMS (100)
                  LOGWRITE ("Ñëîâî4")
               ELSE
                    $check = 1
               END_IF
           END_CYC

все не так, неохота даже пытаться вникать, много недостающих окончаний условий и циклов. если картинок 20, то код выйдет огромный, трудночитаемый и трудноредактируюмый.

вот пример, как это должно выглядеть через цикл перебираний названий файлов из массива.

Code: (clickermann) [Select]
STRSEPARATE ("pic1;pic2;pic3;pic4;pic5;pic6;pic7;pic8;pic9;pic10", ";", $arr) //свои названия файлов через точказапятая. без ".bmp". название = слову, которое нужно ввести где то там.

WHILE(ARRSIZE($arr) > 0) //пока в массиве есть файлы
   
   FOR($a=0,$a<ARRSIZE($arr))   //перебираем все файлы поочереди
     
      GETSCREEN
      IF_PICTURE_IN (0,0, $_xmax,$_ymax,STRCONCAT ($arr[$a],".bmp"), -1, 100)
         print("нашли картинку ",$arr[$a]) //если нашли, смотрим в логе какую
         // клик в поле ввода и ввод думаю сам допишешь ,через KEYSTRING или cnrl+v, нужная строка - $arr[$a]
         // LCLICK(10,10)
         // wait(1)
         // KEYSTRING($arr[$a])
         
         WAITMS(100)       
      END_IF
     
      $arr[$a] = $arr[ARRSIZE($arr)-1] //удаляем из массива найденную картинку
      $del = ARRPOP($arr)
      waitms(500)
     
   END_CYC
   
END_CYC

print("картинки закончились, стоп.")

halt

Alecoq

  • Зашел в гости
  • *
  • Posts: 11
    • View Profile
Спасибо

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
А зачем удалять из массива?
И кажется таким макаром мы пропускаем передвинутое с конца имя. Это $a мы ведь уже обработали и цикл пойдёт дальше.
18-19 строки нужно убрать.
« Last Edit: March 27, 2018, 08:19:22 AM by Vint »


dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
А зачем удалять из массива?
И кажется таким макаром мы пропускаем передвинутое с конца имя. Это $a мы ведь уже обработали и цикл пойдёт дальше.
18-19 строки нужно убрать.
так тут задача же
Quote
После вода всех слов с 20 картинок остановить цыкл.
поэтому подумал, что одним махом 20 картинок за проход цикла фор врядли найдется. для этого всунул все это в внешний WHILE(ARRSIZE($arr) > 0), и убираю из массива найденное. да, в момент удаления, картинка с конца массива пропустится, но в следующем проходе ее будет искать.

Vint

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


Alecoq

  • Зашел в гости
  • *
  • Posts: 11
    • View Profile
Отбор работает как надо.
Через KEYSTRING я как понял не получится.
Текст с запятыми и ! знаком большие буквы на русском. 
через нажатие клавиш кликер сможет такое напечатать?

енность,
оворю!
вершений.
роню
Неведо
мый!!! С Т
По свет
колений!
лю я для н
квозь бр
ак драго
Прослав
И торжест
Твоих лу
Прошу, вве
у пронесу, к
ценность!
во побед, с
нную б
ди мен
овых по
я во храм с
чей свяще
обою г

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Все отлично печатает последняя бета 4.13.11b
http://crapware.aidf.org/forum/index.php?topic=356.msg26108#msg26108
+ обновленный exe
http://crapware.aidf.org/forum/index.php?topic=356.msg26555#msg26555

Тестируем на блокноте. Лучше включить "Пауза перед запуском" на основной форме, чтобы успеть кликнуть по блокноту для фокуса.
Code: (clickermann) [Select]
FOR($a=1,$a<=TFCOUNT("text.txt"))
   KEYSTRING(TFREAD("text.txt", $a))
   KEYPRESS(#ENTER)
END_CYC
HALT


Alecoq

  • Зашел в гости
  • *
  • Posts: 11
    • View Profile
На версии 13 печатает единственное "," точкой печатает и
вместо б=бр (И торжест) следующие слово а оно вместе (нную бр)
Тест:
я во храм с
овых по
ди мен
(нную брИ торжест)
Твоих лу
Прошу. вве