Author Topic: Подскажите, как можно сжать скрипт. Зависает при запуске.  (Read 2253 times)

0 Members and 1 Guest are viewing this topic.

Sniper

  • Зашел в гости
  • *
  • Posts: 5
    • View Profile
Добрый день.
Подскажите как можно упростить скрипт, при запуске он зависает.
Раньше работал быстрее, теперь если добавлять поиск картинок например как (прямо, слева, справа и радиус) он начинает зависать. Этот момент будет еще добавляться по поиску картинок, т.к. они меняют и могут быть около 9 типов и того их 36.
$NO=0 - это цикл действия нажал и ждёт, что появится
$rub=0 - это цикл действия когда он нашёл и выполняет действия с ожиданием в 5 мин
$flang=0 - это нажатия клавиш

Можно ли как то упростить например поиск по картинке прямо  с 0 по 9 и слева с 10 по 19 и при этом выполнять выполнения циклов ?

Code: (clickermann) [Select]
while(1)
   $NO=0
   $rub=0
   $flang=0
   $click_ok=0
   getscreen
   If_picture_in(534,131,1743,902,"ничего.bmp",-1,100)
      Waitms(100)
      print("нажал на ничего")
      $No=1
   else
      If_picture_in(534,131,1743,902,"радиус.bmp",-1,100)
         Waitms(100)
         print("нажал на радиус")
         $NO=1
      else
         If_picture_in(534,131,1743,902,"справа.bmp",-1,100)
            print("нажал справа")
            Wait(1)
            //справа+ указать кооры
            $rub=1
            $flang=1
         else
            If_picture_in(534,131,1743,902,"справа1.bmp",-1,100)
               print("нажал справа")
               Wait(1)
               //справа+ указать кооры
               $rub=1
               $flang=1
            else
               If_picture_in(534,131,1743,902,"слева.bmp",-1,100)
                  print("нажал слева")
                  Wait(1)
                  //слева+ указать кооры
                  $rub=1
                  $flang=2
               else
                  If_picture_in(534,131,1743,902,"прямо.bmp",-1,100)
                     LCLICK($_return1, $_return2)
                     print("нашел перед собой")
                     Wait(1)
                     //прямо+ указать кооры
                     $rub=1
                     $flang=3
                  else
                     If_picture_in(534,131,1743,902,"прямо1.bmp",-1,100)
                        LCLICK($_return1, $_return2)
                        print("нашел перед собой1")
                        Wait(1)
                        //прямо+ указать кооры
                        $rub=1
                        $flang=3
                     else
                        If_picture_in(534,131,1743,902,"прямо3.bmp",-1,100)
                           LCLICK($_return1, $_return2)
                           print("нашел перед собой3")
                           Wait(1)
                           //прямо+ указать кооры
                           $rub=1
                           $flang=3
                        else
                           $no=1
                           $click_ok=1
                        end_if
                     end_if
                  end_if
               end_if
            end_if
         end_if
      end_if
   end_if
........
   if($no=1)
      getscreen
      If_picture_in(918,597,965,647,"поиск.bmp",-1,100)
         LCLICK($_return1,$_return2)
         print("нажал поиск")
         wait(33)//33 сек после клика на поиск
      end_if
   end_if
   waitms(100)
end_cyc
« Last Edit: September 23, 2019, 04:58:40 PM by Oraven »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Добрый день.
Подскажите как можно упростить скрипт, при запуске он зависает.
Раньше работал быстрее, теперь если добавлять поиск картинок например как (прямо, слева, справа и радиус) он начинает зависать. Этот момент будет еще добавляться по поиску картинок, т.к. они меняют и могут быть около 9 типов и того их 36.

Он не зависает а выполняет поиск картинки, и пока этот поиск не завершится кликер не отвечает ни на какие команды.
Максимально уменьши картинки поиска.

Можно ли как то упростить например поиск по картинке прямо  с 0 по 9 и слева с 10 по 19 и при этом выполнять выполнения циклов ?
"с 0 по 9 и слева с 10 по 19" чего??




Sniper

  • Зашел в гости
  • *
  • Posts: 5
    • View Profile
Картинки и так взяты по минимуму 20х20 в bmp, а иначе по другому не находит, что нужно.




С 1 по 19 это нумерация картинок, которые мы можем встретить при поиске.

К примеру у нас есть то что нашёл перед собой 1 из 9 разных картинок, он проверяет эти картинки от 1 до 9, если находит 1 из них, то начинает выполнять действия и рубить к примеру дерево, применяет цикл $rub=1, если не находит 1 из 9 , то начинает поиск заново, применяет цикл $No=1.

И получается например у нас есть, то что находит слева 1 из от 10 по 19 картинку, поворачивается налево и применяет цикл $rub=1, если не находит 10 из 19 , то начинает поиск заново, применяет цикл $No=1.

Можно ли избежать большое написания скрипта, вместо
If_picture_in
............
Else
............
End_if

Как то сократить большое количество написания строк?

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Можно создать цикл поиска картинок.
Code: (clickermann) [Select]
GETSCREEN
FOR($i=1,$i<=9)
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, STRCONCAT("Прямо_", $i, ".bmp"), -1, 100) // Прямо_1.bmp - Прямо_9.bmp
      $rub=1
      $i=9999
   END_IF
END_CYC
IF($i!9999) // если не найдено
   $No=1
END_IF

Sniper

  • Зашел в гости
  • *
  • Posts: 5
    • View Profile
Скажите, а можно подпапки создать и указать, что бы картинку он брал из подпапки? а не из корня программы, откуда запускается программа?

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Можно конечно.
Code: (clickermann) [Select]
IF_PICTURE_IN (0,0, $_xmax,$_ymax, STRCONCAT("Подпапка\Прямо_", $i, ".bmp"), -1, 100)

Sniper

  • Зашел в гости
  • *
  • Posts: 5
    • View Profile
Попробовал такой вариант

while(1)
   $NO=0
   $rub=0
   $flang=0
   $click_ok=0
   getscreen
FOR($i=1,$i<=9)
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, STRCONCAT("Слева_", $i, ".bmp"), -1, 100) // Прямо_1.bmp - Прямо_9.bmp
      $rub=1
     $flag=2
      $i=9999
   END_IF
END_CYC
IF($i!9999) // если не найдено
   $No=1
END_IF
   If_picture_in(534,131,1743,902,"ничего.bmp",-1,100)
      Waitms(100)
      print("нажал на ничего")
      $No=1
   else
      If_picture_in(534,131,1743,902,"радиус.bmp",-1,100)
         Waitms(100)
         print("нажал на радиус")
         $NO=1
      else
..........................

Не не срабатывает, он просто прокрутил и влез в другой цикл, который закрывает картинку, если нет их этого списка.

Добавил добавить в старое
If_picture_in
............
Else
............
End_if
с указанием на добавление новой картинки, сработал.

Sniper

  • Зашел в гости
  • *
  • Posts: 5
    • View Profile
могу выложить весь скрипт, может вам так проще будет, что можно придумать и как выйти из ситуации

Shada

  • Освоившийся
  • **
  • Posts: 24
    • View Profile
Великолепный пример работы с картинками показал Космич: http://crapware.aidf.org/forum/index.php?topic=5087.msg33305#msg33305
Космич, спасибо! :)

В задаче всего 4 направления рубки - фланги (если я правильно понимаю задачу).
Если использовать эти направления в именах картинок, то код сильно упрощается и укорачивается.
Первые две цифры в имени картинки - это и есть фланг, или код клавиши, которая выбирает фланг.
Третья цифра и последующие - порядковый номер картинки (или еще что-то нужное).
Левый: 371.bmp, 372.bmp, 373.bmp, 374.bmp, 375.bmp, ...
Верхний: 381.bmp, 382.bmp, 383.bmp, ...
...
Картинок всего 36 (по 9 штук на фланг), это не много, поэтому можно записать их в строку, а затем загрузить её в массив. Если картинок очень много, то такой массив можно сгенерировать самим скриптом.
Для расшифровки имен картинок можно использовать свитч.
Можно ввести переменные "$NO", "$rub" "$flang", "$click_ok" если они понадобятся по ходу скрипта. Но наверно можно обойтись и без некоторых из них.

Code: (clickermann) [Select]
STRSEPARATE("371:372:373:374:375:376:377:378:379:391:392:393:394:395:396:397:398:399:381:382:383:384:385:386:387:388:389:401:402:403:404:405:406:407:408:409", ":", $arr)
WHILE(1)
   GETSCREEN
   FOR($n = 0, $n < ARRSIZE($arr))
      IF_PICTURE_IN(534,131,1743,902, STRCONCAT($arr[$n], ".bmp"))
         $flang = STRCUT($arr[$n], 1, 2)
         SWITCH($flang)
            CASE(37)
               LOGWRITE ("LEFT")
            CASE(38)
               LOGWRITE ("UP")
            CASE(39)
               LOGWRITE ("RIGHT")
            CASE(40)
               LOGWRITE ("DOWN")
         END_SWITCH
         // здесь цикл "rub"
      ELSE
         WAITMS(50)
      END_IF
   END_CYC
   // здесь цикл "NO"
END_CYC

Можно еще выкинуть свитч и переменную "$flang", если по ходу сценария они будут не нужны. Расширение ".bmp" можно сразу дописать к именам файлов, тогда многократно склеивать их не придется.

Останется такой код:
Code: (clickermann) [Select]
STRSEPARATE("371.bmp:372.bmp:373.bmp:374.bmp:375.bmp:376.bmp:377.bmp:378.bmp:379.bmp:391.bmp:392.bmp:393.bmp:394.bmp:395.bmp:396.bmp:397.bmp:398.bmp:399.bmp:381.bmp:382.bmp:383.bmp:384.bmp:385.bmp:386.bmp:387.bmp:388.bmp:389.bmp:401.bmp:402.bmp:403.bmp:404.bmp:405.bmp:406.bmp:407.bmp:408.bmp:409.bmp", ":", $arr)
WHILE(1)
   GETSCREEN
   FOR($n = 0, $n < ARRSIZE($arr))
      IF_PICTURE_IN(534,131,1743,902, $arr[$n])
         KEYPRESS(STRCUT($arr[$n], 1, 2)) // выбираем "flang"
         // здесь цикл "rub"
      ELSE
         WAITMS(50)
      END_IF
   END_CYC
   // здесь цикл "NO"
END_CYC

По циклам "rub" и "NO" информации недостаточно.