Author Topic: Помогите с циклом и поиском цвета внутри цикла.  (Read 1811 times)

0 Members and 1 Guest are viewing this topic.

Adlet_Veltman

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Здравствуйте знаниями не богат, поэтому не ругайте сильно за ошибки в скрипте. Как я уже сказал, знаний у меня не много, но мне надо написать довольно непростой скрипт.Сначала я опишу что из себя должен представлять этот цикл, а потом покажу, как я попытался это воплотить. Проблема в том, что программа при появление цвета 3 останавливается. Прошу исправить мои ошибки и рассказать, почему мой скрипт неверный в этих местах.
Выглядеть он должен так:
Сначала поиск нужного цвета в определённой области. В этой области может появиться только 3 цвета. При появления цвета 1 или появления цвета 2 нужно сделать левый клик в нужной точке(с этим я быстро справился). Всё это повторяется 14 раз. А при появление цвета 3 пока цикл не выполняется 14 раз, а должен начаться с начала с 0. Если цикл отработал 14 раз ни разу не наткнувшись на цвет 3 он должен закончиться. Дальше программа должна сделать один левый клик в указанной точке. Потом новый тот же цикл с тремя цветами, условия почти те же, только 7 раз, а не 14. И во втором цикле при появлении цвета 3 программа должна вернуться в начало, к циклу 1.

Как я попытался это воплотить(показал всё кроме номеров цветов, вместо них написал "цвет1", "цвет2" и "цвет3"):
Code: (clickermann) [Select]
$cheack = 0
FOR ( ($cheack = 0), ($cheack < 15) )
   GETSCREEN
   IF_PIXEL_IN(628,526,662,552, цвет1)
   LCLICK(500,896)
   WAIT(35)
   ELSE
       IF_PIXEL_IN(628,526,662,552, цвет2)
        LCLICK(500,896)
        WAIT(35)
       ELSE
        IF_PIXEL_IN(628,526,662,552,цвет3)
WAIT(35)
$cheack = 0
END_IF   
     END_IF
   END_IF
END_CYC
$cheak = 15
FOR ( ($cheack < 23) & ($cheack > 14) )
  LCLICL(688,752)
  GETSCREEN
  IF_PIXEL_IN(628,526,662,552, цвет1)
   LCLICK(500,896)
   WAIT(35)
   ELSE
     IF_PIXEL_IN(628,526,662,552, цвет2)
      LCLICK(500,896)
      WAIT(35)
     ELSE
        IF_PIXEL_IN(628,526,662,552,цвет3)
         LCLICK(623,743)
WAIT(35)
$cheack = 0
END_IF   
     END_IF
   END_IF
END_CYC
$cheack = 22
HALT

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Code: (clickermann) [Select]
$check = 999
WHILE($check = 999)

   FOR($check=0, $check<15)
      GETSCREEN
      IF_PIXEL_IN(628,526,662,552, цвет1)
         LCLICK(500,896)
         WAIT(35)
      ELSE
         IF_PIXEL_IN(628,526,662,552, цвет2)
            LCLICK(500,896)
            WAIT(35)
         ELSE
            IF_PIXEL_IN(628,526,662,552,цвет3)
               WAIT(35)
               $check = 0
            END_IF
         END_IF
      END_IF
   END_CYC
   
   FOR($check=0, $check<8)
      LCLICL(688,752)
      GETSCREEN
      IF_PIXEL_IN(628,526,662,552, цвет1)
         LCLICK(500,896)
         WAIT(35)
      ELSE
         IF_PIXEL_IN(628,526,662,552, цвет2)
            LCLICK(500,896)
            WAIT(35)
         ELSE
            IF_PIXEL_IN(628,526,662,552,цвет3)
               LCLICK(623,743)
               WAIT(35)
               $check = 999
            END_IF
         END_IF
      END_IF
   END_CYC
   
END_CYC

HALT

Adlet_Veltman

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Code: (clickermann) [Select]
$check = 999
WHILE($check = 999)

   FOR($check=0, $check<15)
      GETSCREEN
      IF_PIXEL_IN(628,526,662,552, цвет1)
         LCLICK(500,896)
         WAIT(35)
      ELSE
         IF_PIXEL_IN(628,526,662,552, цвет2)
            LCLICK(500,896)
            WAIT(35)
         ELSE
            IF_PIXEL_IN(628,526,662,552,цвет3)
               WAIT(35)
               $check = 0
            END_IF
         END_IF
      END_IF
   END_CYC
   
   FOR($check=0, $check<8)
      LCLICL(688,752)
      GETSCREEN
      IF_PIXEL_IN(628,526,662,552, цвет1)
         LCLICK(500,896)
         WAIT(35)
      ELSE
         IF_PIXEL_IN(628,526,662,552, цвет2)
            LCLICK(500,896)
            WAIT(35)
         ELSE
            IF_PIXEL_IN(628,526,662,552,цвет3)
               LCLICK(623,743)
               WAIT(35)
               $check = 999
            END_IF
         END_IF
      END_IF
   END_CYC
   
END_CYC

HALT
Большое спасибо программа перестала останавливаться, но до сих пор выполняется неправильно.
После выполнения 1 цикла 14 раз программа не переходит ко второму, а продолжает выполнять 1 цикл бесперерывно
« Last Edit: November 18, 2017, 10:33:51 AM by Adlet_Veltman »

Adlet_Veltman

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Помощь теперь не нужна. Я решил сделать повторение другим способом. Заменил "FOR ($i, $i<30)...END_CYC" на
Code: (clickermann) [Select]
DEFINE($aaa,0) //  вводим переменную  для подсчета циклов
 
start:
 
 
 
 
 
INC ($aaa, 1) // после цикла переменная увеличивается на 1
IF($aaa = 30) // если счет циклов стал равен 30 , останавливаем выполнение скрипта
 HALT
END_IF
GOTO (start) // если счет циклов не равен 30,  возвращаемся к start: 

Скрипт стал довольно громоздким и теперь для добавления новых циклов(что я и собираюсь сделать) нужно много работы и точности, но зато теперь всё работает исправно, без зацикливания и остановок раньше времени.
Если кому интересно, то теперь скрипт выглядит так:
Code: (clickermann) [Select]

DEFINE($aa,0)

start:
GETSCREEN
IF_PIXEL_IN(628,526,662,552, 0)
   LCLICK(500,896)
   WAIT(35)
   INC($aa, 1)
   IF($aa = 14)
      DEFINE($ff, 0)
      LCLICK(688,752)
      start02:
      GETSCREEN
      IF_PIXEL_IN(628,526,662,552, 0)
         LCLICK(500,896)
         WAIT(35)
         INC($ff, 1)
         IF($ff = 7)
            HALT
         END_IF
         GOTO(start02)
      ELSE
         IF_PIXEL_IN(628,526,662,552, 1710844)
            LCLICK(500,896)
            WAIT(35)
            INC($ff, 1)
            IF($ff = 7)
               HALT
            END_IF
            GOTO(start02)
         ELSE
            IF_PIXEL_IN(628,526,662,552,1551428)
               LCLICK(623,743)
               WAIT(35)
               INC($ff = 0)
               INC($aa = 0)
               GOTO(start)
            END_IF
         END_IF
      END_IF
   END_IF
   GOTO (start)
ELSE
   IF_PIXEL_IN(628,526,662,552, 1710844)
      LCLICK(500,896)
      WAIT(35)
      INC($aa, 1)
      IF($aa = 14)
         DEFINE($ff, 0)
         LCLICK(688,752)
         
         start02:
         GETSCREEN
         IF_PIXEL_IN(628,526,662,552, 0)
            LCLICK(500,896)
            WAIT(35)
            INC($ff, 1)
            IF($ff = 7)
               HALT
            END_IF
            GOTO(start02)
         ELSE
            IF_PIXEL_IN(628,526,662,552, 1710844)
               LCLICK(500,896)
               WAIT(35)
               INC($ff, 1)
               IF($ff = 7)
                  HALT
               END_IF
               GOTO(start02)
            ELSE
               IF_PIXEL_IN(628,526,662,552,1551428)
                  LCLICK(623,743)
                  WAIT(35)
                  INC($ff = 0)
                  INC($aa = 0)
                  GOTO(start)
               END_IF
            END_IF
         END_IF
      END_IF
      GOTO (start)
   ELSE
      IF_PIXEL_IN(628,526,662,552,1551428)
         WAIT(35)
         $aa = 0
         GOTO (start)
      END_IF
   END_IF
END_IF

HALT