Author Topic: Подскажите, что не так  (Read 17972 times)

0 Members and 1 Guest are viewing this topic.

dmutruk

  • Освоившийся
  • **
  • Posts: 40
    • View Profile
Подскажите, что не так
« on: September 13, 2013, 04:11:59 PM »
          LCLICK(427,207) //активирует нужное окошко
IF_PIXEL_IN (428,355, 439, 373, 2104698) // ищет нужный цвет в заданной области
      WAITMS(500)
KEYPRESS(#w) // жмет клавишу после того как найдет
END_IF
   WAITMS(1)
IF_PIXEL_IN (428,355, 439, 373, 2104698) // ищет нужный цвет в заданной области
 WAITMS(500)
KEYPRESS(#r) // жмет клавишу после того как найдет
END_IF
WAITMS(1)
IF_PIXEL_IN (428,355, 439, 373, 2104698) // ищет нужный цвет в заданной области
WAITMS(500)
KEYPRESS(#w) // жмет клавишу после того как найдет
END_IF
WAITMS(1)
IF_PIXEL_IN (428,355, 439, 373, 2104698) // ищет нужный цвет в заданной области
 WAITMS(500)
KEYPRESS(#q) // жмет клавишу после того как найдет
END_IF
WAIT(1)
KEYPRESS(#3) // жмет клавишу после того как найдет
WAITMS(500)
IF_PIXEL_IN (428,355, 439, 373, 2104698) // ищет нужный цвет в заданной области
 WAITMS(500)
KEYPRESS(#r)  // жмет клавишу после того как найдет
END_IF

Собственно, я хочу что бы программа искала нужный пиксель до тех пор пока он не появится, кода появится, нажала на клавишу. После того как нажмет, снова искала по заданным параметрам, до тех пор пока пиксель нужного цвета не появится там. А сейчас у меня оно все мгновенно делает и не останавливается на поиске(((

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Подскажите, что не так
« Reply #1 on: September 13, 2013, 05:02:44 PM »
Где команда GETSCREEN?
Что, где ждёт? У тебя везде написано одинаково.


dmutruk

  • Освоившийся
  • **
  • Posts: 40
    • View Profile
Re: Подскажите, что не так
« Reply #2 on: September 13, 2013, 05:12:01 PM »
GETSCREEN - один раз в начале прописывать или все время перед новым поиском? Искать нужно все время в одном месте и один и тот же цвет, но действия разные нужно выполнять

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Подскажите, что не так
« Reply #3 on: September 13, 2013, 06:08:03 PM »
Ну вот тебе ожидание

Code: (clickermann) [Select]
LCLICK(427,207) //активирует нужное окошко

$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698) // ищет нужный цвет в заданной области
      $check = 1
      WAITMS(500)
      KEYPRESS(#w) // жмет клавишу после того как найдет
   Else
      WAITMS(50)
   END_IF
END_CYC

$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698) // ищет нужный цвет в заданной области
      $check = 1
      WAITMS(500)
      KEYPRESS(#r) // жмет клавишу после того как найдет
   Else
      WAITMS(50)
   END_IF
END_CYC

$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698) // ищет нужный цвет в заданной области
      $check = 1
      WAITMS(500)
      KEYPRESS(#w) // жмет клавишу после того как найдет
   Else
      WAITMS(50)
   END_IF
END_CYC

$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698) // ищет нужный цвет в заданной области
      $check = 1
      WAITMS(500)
      KEYPRESS(#q) // жмет клавишу после того как найдет
   Else
      WAITMS(50)
   END_IF
END_CYC

$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698) // ищет нужный цвет в заданной области
      $check = 1
      WAITMS(500)
      KEYPRESS(#3) // жмет клавишу после того как найдет
   Else
      WAITMS(50)
   END_IF
END_CYC

$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698) // ищет нужный цвет в заданной области
      $check = 1
      WAITMS(500)
      KEYPRESS(#r) // жмет клавишу после того как найдет
   Else
      WAITMS(50)
   END_IF
END_CYC

dmutruk

  • Освоившийся
  • **
  • Posts: 40
    • View Profile
Re: Подскажите, что не так
« Reply #4 on: September 13, 2013, 07:22:36 PM »
Oraven Огромное тебе спасибо, поигрался с задержкой и все заработало на ура (инет слабый и грузит долго действия). Мне не удобно просить, но есть еще несколько заданий которые надо выполнить, это было начало :'(
Code: (clickermann) [Select]
LCLICK(427,207)
WAIT(3)
 
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698)
      $check = 1
      WAITMS(1)
      KEYPRESS(#w)
   Else
      WAITMS(50)
   END_IF
END_CYC

//Сюда нужно поиск заданного цвета пикселя, если найдет тот который нужно, прервала роботу циклов которые идут дальше и начала новые совсем. Который начинается с клика в заданную область (область отличается от расположения искомого пикселя). Если такого цвета нету, выполняются следующие команды.

//Вот сюда нужно сделать так что бы программа искала заданный  цвет пикселя и если находит, то  выполняются следующие команды. А если цвет изменился, выполнила нажатие клавиши (какой я сам напишу потом).

WAIT(6)

$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698)
      $check = 1
      WAITMS(1)
      KEYPRESS(#e)
   Else
      WAITMS(50)
   END_IF
END_CYC

WAIT(6)
 
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698)
      $check = 1
      WAITMS(1)
      KEYPRESS(#w)
   Else
      WAITMS(50)
   END_IF
END_CYC

WAIT(6)
 
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698)
      $check = 1
      WAITMS(1)
      KEYPRESS(#q)
   Else
      WAITMS(50)
   END_IF
END_CYC

WAIT(6)
 

KEYPRESS(#3)

 
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698)
      $check = 1
      WAITMS(1)
      KEYPRESS(#e)
   Else
      WAITMS(50)
   END_IF
END_CYC


Буду очень благодарен если поможете мне закончить создание этой трудной для меня программки.

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Подскажите, что не так
« Reply #5 on: September 13, 2013, 08:45:38 PM »
Как понял так и написал...
WAITMS(1) писать нет смысла, это почти то же самое как без задержки

Code: (clickermann) [Select]
start:

LCLICK(427,207)
WAIT(3)

$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698)
      $check = 1
      WAITMS(1)
      KEYPRESS(#w)
   Else
      WAITMS(50)
   END_IF
END_CYC

//Сюда нужно поиск заданного цвета пикселя, если найдет тот который нужно, прервала роботу циклов которые идут дальше и начала новые совсем. Который начинается с клика в заданную область (область отличается от расположения искомого пикселя). Если такого цвета нету, выполняются следующие команды.
GETSCREEN
IF_PIXEL_IN(0,0, 600,600, 255)
   GOTO(start) // переход к метке START
   WAITMS(500)
END_IF

//Вот сюда нужно сделать так что бы программа искала заданный  цвет пикселя и если находит, то  выполняются следующие команды. А если цвет изменился, выполнила нажатие клавиши (какой я сам напишу потом).
GETSCREEN
IF_PIXEL_IN(0,0, 600,600, 255)
Else
   KEYPRESS(#A) // нажатие клавиши
   WAITMS(500)
END_IF

WAIT(6)

$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698)
      $check = 1
      WAITMS(1)
      KEYPRESS(#e)
   Else
      WAITMS(50)
   END_IF
END_CYC

WAIT(6)

$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698)
      $check = 1
      WAITMS(1)
      KEYPRESS(#w)
   Else
      WAITMS(50)
   END_IF
END_CYC

WAIT(6)

$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698)
      $check = 1
      WAITMS(1)
      KEYPRESS(#q)
   Else
      WAITMS(50)
   END_IF
END_CYC

WAIT(6)

KEYPRESS(#3)

$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698)
      $check = 1
      WAITMS(1)
      KEYPRESS(#e)
   Else
      WAITMS(50)
   END_IF
END_CYC

dmutruk

  • Освоившийся
  • **
  • Posts: 40
    • View Profile
Re: Подскажите, что не так
« Reply #6 on: September 14, 2013, 01:31:47 AM »
Спасибо, это работает отлично, так как мне и нужно.
Code: (clickermann) [Select]
//Сюда нужно поиск заданного цвета пикселя, если найдет тот который нужно, прервала роботу циклов которые идут дальше и начала новые совсем. Который начинается с клика в заданную область (область отличается от расположения искомого пикселя). Если такого цвета нету, выполняются следующие команды.
GETSCREEN
IF_PIXEL_IN(0,0, 600,600, 255)
   GOTO(start) // переход к метке START
   WAITMS(500)
END_IF

А вот это:
Code: (clickermann) [Select]
//Вот сюда нужно сделать так что бы программа искала заданный  цвет пикселя и если находит, то  выполняются следующие команды. А если цвет изменился, выполнила нажатие клавиши (какой я сам напишу потом).
GETSCREEN
IF_PIXEL_IN(0,0, 600,600, 255)
Else
   KEYPRESS(#A) // нажатие клавиши
   WAITMS(500)
END_IF

Получается как только к этому доходит очередь, оно нажимает клавишу А в любом случае. Обьясню подробней что именно мне нужно:


Code: (clickermann) [Select]
GETSCREEN
IF_PIXEL_IN(0,0, 600,600, 255) // К примеру, если находит цвет 255, то нужно что бы следующим действием было начало цикла "удар"(ниже написано, что я имел ввиду под "удар") и  KEYPRESS(#A) не выполнялось. А если не находит цвет 255, то выполнить  KEYPRESS(#A), а потом "удар"
Else
   KEYPRESS(#A) // нажатие клавиши
   WAITMS(500)
END_IF

//То что под этим комментарием назовем "удар"
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698)
      $check = 1
      KEYPRESS(#w)
   Else
      WAITMS(50)
   END_IF
END_CYC

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Подскажите, что не так
« Reply #7 on: September 14, 2013, 01:59:59 AM »
Объясню и тебе смысл "Else"

Code: (clickermann) [Select]
GETSCREEN
IF_PIXEL_IN(0,0, 600,600, 255)
// вот здесь код выполнится если пиксел найден
Else
// а здесь если пиксел не найден!!!
   KEYPRESS(#A) // нажатие клавиши
   WAITMS(500)
END_IF

так что ты ищешь неверный цвет

dmutruk

  • Освоившийся
  • **
  • Posts: 40
    • View Profile
Re: Подскажите, что не так
« Reply #8 on: September 14, 2013, 09:52:03 AM »
Действительно, сменил цвет и заработало. А можно сделать так:
Code: (clickermann) [Select]
GETSCREEN
// создать лог файл в который будут вносится все нажатые клавиши во время роботы программы
IF_PIXEL_IN(203,140, 208,146, 896)
Else
KEYPRESS(#4) // перед тем как нажать 4, открыть лог, проверить не нажималась ли 4 раньше, если нет, то нажать 4. Если нажималось, то пропустить.
          Else
            KEYPRESS(#5) // перед тем как нажать 5, открыть лог, проверить не нажималась ли 5 раньше, если нет, то нажать 5. Если нажималось, то пропустить.
              Else,
                KEYPRESS(#6) // перед тем как нажать 6, открыть лог, проверить не нажималась ли 6 раньше, если нет, то нажать 6. Если нажималось, то пропустить.
   WAITMS(500)
END_IF

Тоисть за один цикл всей написанной программы можно только по 1 разу нажимать 4,5,6. А еще можно сделать что-то вот такое:
Code: (clickermann) [Select]
GETSCREEN
IF_PIXEL_IN(375,322,389,331,3969279)
   GOTO(test.txt) // в файле test.txt написан цикл который нужно выполнить.
   WAITMS(500)
END_IF
На сколько, если так можно сделать, это замедлит роботу программы?

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Подскажите, что не так
« Reply #9 on: September 14, 2013, 05:44:19 PM »
В каждом условии допускается только одно Else!
Все это решается через серию условий и регулирующие их работу переменных.

Code: (clickermann) [Select]
IF(($check_4 = 1) & ($check_5 = 1) & ($check_6 = 1)) // если все клавиши были нажаты, сброс значений переменных
   $check_4 = 0
   $check_5 = 0
   $check_6 = 0
END_IF

GETSCREEN
IF_PIXEL_IN(203,140, 208,146, 896)
Else
   IF($check_4 = 0) // нажатие 4 если еще не нажималась
      $check_4 = 1
      KEYPRESS(#4)
      WAITMS(500)
   Else
      IF($check_5 = 0) // нажатие 5 если еще не нажималась
         $check_5 = 1
         KEYPRESS(#5)
         WAITMS(500)
      Else
         IF($check_6 = 0) // нажатие 6 если еще не нажималась
            $check_6 = 1
            KEYPRESS(#6)
            WAITMS(500)
         END_IF
      END_IF
   END_IF
END_IF

dmutruk

  • Освоившийся
  • **
  • Posts: 40
    • View Profile
Re: Подскажите, что не так
« Reply #10 on: September 14, 2013, 06:05:46 PM »
Все работает отлично. А можно сделать так:
 
Code: (clickermann) [Select]
start:
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698)
      $check = 1
      KEYPRESS(#w) // Что бы после того как нажатие этой кнопки, в этом цикле будет произведенно 10 раз, выполнить еще несколько кликов мишкой в заданные точки? И дальше продолжать без кликов еще 10 раз, и так 3 раза нужно.
       GOTO(start)
   Else
      WAITMS(50)
   END_IF
END_CYC
Это только пример, в программе там все немножко иначе, но смысл тот же.

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Подскажите, что не так
« Reply #11 on: September 14, 2013, 06:38:44 PM »
Зачем GOTO(start) это бессмысленно

Code: (clickermann) [Select]
$check = 1
WHILE($check < 31)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698)
      KEYPRESS(#w)
      WAITMS(500)
     
      // несколько кликов мышкой в заданные точки
      IF(($check = 10) | ($check = 20) | ($check = 30))
         LCLICK(10,10)
         WAITMS(500)
         LCLICK(10,10)
         WAITMS(500)
         LCLICK(10,10)
         WAITMS(500)
      END_IF
      INC($check,1) //наращиваем переменную
   Else
      WAITMS(50)
   END_IF
END_CYC

dmutruk

  • Освоившийся
  • **
  • Posts: 40
    • View Profile
Re: Подскажите, что не так
« Reply #12 on: September 14, 2013, 06:53:07 PM »
Я же говорил что это пример, в общем вот моя программа:
Code: (clickermann) [Select]


// активируем окно флеш
LCLICK(427,207)
WAITMS(500)

start:

// проверка закончен ли бой
GETSCREEN
IF_PIXEL_IN(375,322,389,331,3969279)
   GOTO(finish) // переход к метке finish
   WAITMS(500)
END_IF

WAITMS(300)


// проверка ХП
IF(($check_2 = 1) & ($check_3 = 1) & ($check_4 = 1) & ($check_5 = 1) & ($check_6 = 1)) // если все клавиши были нажаты, сброс значений переменных
   $check_2 = 0
   $check_3 = 0
$check_4 = 0
   $check_5 = 0
   $check_6 = 0
END_IF
 
GETSCREEN
IF_PIXEL_IN(203,140, 208,146, 896)
Else
   IF($check_2 = 0) // нажатие 2 если еще не нажималась
      $check_2 = 1
      KEYPRESS(#2)
      WAITMS(500)
    Else
        IF($check_3 = 0) // нажатие 3 если еще не нажималась
           $check_3 = 1
           KEYPRESS(#3)
           WAITMS(500)
          Else
             IF($check_4 = 0) // нажатие 4 если еще не нажималась
                $check_4 = 1
                KEYPRESS(#4)
                WAITMS(500)
   Else
      IF($check_5 = 0) // нажатие 5 если еще не нажималась
         $check_5 = 1
         KEYPRESS(#5)
         WAITMS(500)
      Else
         IF($check_6 = 0) // нажатие 6 если еще не нажималась
            $check_6 = 1
            KEYPRESS(#6)
            WAITMS(500)
               END_IF
            END_IF
         END_IF
      END_IF
   END_IF
END_IF

// удар вперед
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698)
      $check = 1
      KEYPRESS(#w)
   Else
      WAITMS(50)
   END_IF
END_CYC

WAIT(5)

// проверка закончен ли бой
GETSCREEN
IF_PIXEL_IN(375,322,389,331,3969279)
   GOTO(finish) // переход к метке finish
   WAITMS(500)
END_IF

WAIT(1)

// проверка ХП
IF(($check_2 = 1) & ($check_3 = 1) & ($check_4 = 1) & ($check_5 = 1) & ($check_6 = 1)) // если все клавиши были нажаты, сброс значений переменных
   $check_2 = 0
   $check_3 = 0
$check_4 = 0
   $check_5 = 0
   $check_6 = 0
END_IF
 
GETSCREEN
IF_PIXEL_IN(203,140, 208,146, 896)
Else
   IF($check_2 = 0) // нажатие 2 если еще не нажималась
      $check_2 = 1
      KEYPRESS(#2)
      WAITMS(500)
    Else
        IF($check_3 = 0) // нажатие 3 если еще не нажималась
           $check_3 = 1
           KEYPRESS(#3)
           WAITMS(500)
          Else
             IF($check_4 = 0) // нажатие 4 если еще не нажималась
                $check_4 = 1
                KEYPRESS(#4)
                WAITMS(500)
   Else
      IF($check_5 = 0) // нажатие 5 если еще не нажималась
         $check_5 = 1
         KEYPRESS(#5)
         WAITMS(500)
      Else
         IF($check_6 = 0) // нажатие 6 если еще не нажималась
            $check_6 = 1
            KEYPRESS(#6)
            WAITMS(500)
               END_IF
            END_IF
         END_IF
      END_IF
   END_IF
END_IF

// удар вниз
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698)
      $check = 1
      KEYPRESS(#e)
   Else
      WAITMS(50)
   END_IF
END_CYC

WAIT(5)

// проверка закончен ли бой
GETSCREEN
IF_PIXEL_IN(375,322,389,331,3969279)
   GOTO(finish) // переход к метке finish
   WAITMS(500)
END_IF

WAIT(1)

// проверка ХП
IF(($check_2 = 1) & ($check_3 = 1) & ($check_4 = 1) & ($check_5 = 1) & ($check_6 = 1)) // если все клавиши были нажаты, сброс значений переменных
   $check_2 = 0
   $check_3 = 0
$check_4 = 0
   $check_5 = 0
   $check_6 = 0
END_IF
 
GETSCREEN
IF_PIXEL_IN(203,140, 208,146, 896)
Else
   IF($check_2 = 0) // нажатие 2 если еще не нажималась
      $check_2 = 1
      KEYPRESS(#2)
      WAITMS(500)
    Else
        IF($check_3 = 0) // нажатие 3 если еще не нажималась
           $check_3 = 1
           KEYPRESS(#3)
           WAITMS(500)
          Else
             IF($check_4 = 0) // нажатие 4 если еще не нажималась
                $check_4 = 1
                KEYPRESS(#4)
                WAITMS(500)
   Else
      IF($check_5 = 0) // нажатие 5 если еще не нажималась
         $check_5 = 1
         KEYPRESS(#5)
         WAITMS(500)
      Else
         IF($check_6 = 0) // нажатие 6 если еще не нажималась
            $check_6 = 1
            KEYPRESS(#6)
            WAITMS(500)
               END_IF
            END_IF
         END_IF
      END_IF
   END_IF
END_IF

// удар вперед
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698)
      $check = 1
      KEYPRESS(#w)
   Else
      WAITMS(50)
   END_IF
END_CYC

WAIT(5)

// проверка закончен ли бой
GETSCREEN
IF_PIXEL_IN(375,322,389,331,3969279)
   GOTO(finish) // переход к метке finish
   WAITMS(500)
END_IF

WAIT(1)

// проверка ХП
IF(($check_2 = 1) & ($check_3 = 1) & ($check_4 = 1) & ($check_5 = 1) & ($check_6 = 1)) // если все клавиши были нажаты, сброс значений переменных
   $check_2 = 0
   $check_3 = 0
$check_4 = 0
   $check_5 = 0
   $check_6 = 0
END_IF
 
GETSCREEN
IF_PIXEL_IN(203,140, 208,146, 896)
Else
   IF($check_2 = 0) // нажатие 2 если еще не нажималась
      $check_2 = 1
      KEYPRESS(#2)
      WAITMS(500)
    Else
        IF($check_3 = 0) // нажатие 3 если еще не нажималась
           $check_3 = 1
           KEYPRESS(#3)
           WAITMS(500)
          Else
             IF($check_4 = 0) // нажатие 4 если еще не нажималась
                $check_4 = 1
                KEYPRESS(#4)
                WAITMS(500)
   Else
      IF($check_5 = 0) // нажатие 5 если еще не нажималась
         $check_5 = 1
         KEYPRESS(#5)
         WAITMS(500)
      Else
         IF($check_6 = 0) // нажатие 6 если еще не нажималась
            $check_6 = 1
            KEYPRESS(#6)
            WAITMS(500)
               END_IF
            END_IF
         END_IF
      END_IF
   END_IF
END_IF

// удар вверх
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698)
      $check = 1
      KEYPRESS(#q)
   Else
      WAITMS(50)
   END_IF
END_CYC

WAIT(5)

// проверка закончен ли бой
GETSCREEN
IF_PIXEL_IN(375,322,389,331,3969279)
   GOTO(finish) // переход к метке finish
   WAITMS(500)
END_IF

WAIT(1)

// проверка ХП
IF(($check_2 = 1) & ($check_3 = 1) & ($check_4 = 1) & ($check_5 = 1) & ($check_6 = 1)) // если все клавиши были нажаты, сброс значений переменных
   $check_2 = 0
   $check_3 = 0
$check_4 = 0
   $check_5 = 0
   $check_6 = 0
END_IF
 
GETSCREEN
IF_PIXEL_IN(203,140, 208,146, 896)
Else
   IF($check_2 = 0) // нажатие 2 если еще не нажималась
      $check_2 = 1
      KEYPRESS(#2)
      WAITMS(500)
    Else
        IF($check_3 = 0) // нажатие 3 если еще не нажималась
           $check_3 = 1
           KEYPRESS(#3)
           WAITMS(500)
          Else
             IF($check_4 = 0) // нажатие 4 если еще не нажималась
                $check_4 = 1
                KEYPRESS(#4)
                WAITMS(500)
   Else
      IF($check_5 = 0) // нажатие 5 если еще не нажималась
         $check_5 = 1
         KEYPRESS(#5)
         WAITMS(500)
      Else
         IF($check_6 = 0) // нажатие 6 если еще не нажималась
            $check_6 = 1
            KEYPRESS(#6)
            WAITMS(500)
               END_IF
            END_IF
         END_IF
      END_IF
   END_IF
END_IF
 
// юзаем вамп
KEYPRESS(#1)

//удар вниз
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698)
      $check = 1
      KEYPRESS(#e)
      WAIT(1)     
      GOTO(start) // последний удар ВЖК и возврат в начало цикла.
   Else
      WAITMS(50)
   END_IF
END_CYC



// Если бой закончен
finish:
LCLICK(881,135)
WAIT(3)
LCLICK(275,205)



Вроде все правильно или можно всего этого добиться меньшим количеством циклов?

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Подскажите, что не так
« Reply #13 on: September 14, 2013, 08:33:17 PM »
Вроде все правильно или можно всего этого добиться меньшим количеством циклов?
Не читал ничего про подпрограммы? Почитай. Куча одинаковых блоков, от которых в глазах рябит.


Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Подскажите, что не так
« Reply #14 on: September 14, 2013, 08:33:17 PM »
Повторяющийся код для компактности можно засунуть в СУБПРОГРАММУ. Следует помнить что из SUBa выпрыгивать по GOTO не рекомендовано.

Code: (clickermann) [Select]
// активируем окно флеш
LCLICK(427,207)
WAITMS(500)

start:

// проверка закончен ли бой
GETSCREEN
IF_PIXEL_IN(375,322,389,331,3969279)
   GOTO(finish) // переход к метке finish
   WAITMS(500)
END_IF

WAITMS(300)


// проверка ХП
GOSUB(XP)

// удар вперед
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698)
      $check = 1
      KEYPRESS(#w)
   Else
      WAITMS(50)
   END_IF
END_CYC

WAIT(5)

// проверка закончен ли бой
GETSCREEN
IF_PIXEL_IN(375,322,389,331,3969279)
   GOTO(finish) // переход к метке finish
   WAITMS(500)
END_IF

WAIT(1)

// проверка ХП
GOSUB(XP)

// удар вниз
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698)
      $check = 1
      KEYPRESS(#e)
   Else
      WAITMS(50)
   END_IF
END_CYC

WAIT(5)

// проверка закончен ли бой
GETSCREEN
IF_PIXEL_IN(375,322,389,331,3969279)
   GOTO(finish) // переход к метке finish
   WAITMS(500)
END_IF

WAIT(1)

// проверка ХП
GOSUB(XP)

// удар вперед
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698)
      $check = 1
      KEYPRESS(#w)
   Else
      WAITMS(50)
   END_IF
END_CYC

WAIT(5)

// проверка закончен ли бой
GETSCREEN
IF_PIXEL_IN(375,322,389,331,3969279)
   GOTO(finish) // переход к метке finish
   WAITMS(500)
END_IF

WAIT(1)

// проверка ХП
GOSUB(XP)

// удар вверх
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698)
      $check = 1
      KEYPRESS(#q)
   Else
      WAITMS(50)
   END_IF
END_CYC

WAIT(5)

// проверка закончен ли бой
GETSCREEN
IF_PIXEL_IN(375,322,389,331,3969279)
   GOTO(finish) // переход к метке finish
   WAITMS(500)
END_IF

WAIT(1)

// проверка ХП
GOSUB(XP)

// юзаем вамп
KEYPRESS(#1)

//удар вниз
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (428,355, 439, 373, 2104698)
      $check = 1
      KEYPRESS(#e)
      WAIT(1)
      GOTO(start) // последний удар ВЖК и возврат в начало цикла.
   Else
      WAITMS(50)
   END_IF
END_CYC



// Если бой закончен
finish:
LCLICK(881,135)
WAIT(3)
LCLICK(275,205)


SUB(XP)
   // проверка ХП
   IF(($check_2 = 1) & ($check_3 = 1) & ($check_4 = 1) & ($check_5 = 1) & ($check_6 = 1)) // если все клавиши были нажаты, сброс значений переменных
      $check_2 = 0
      $check_3 = 0
      $check_4 = 0
      $check_5 = 0
      $check_6 = 0
   END_IF
   
   GETSCREEN
   IF_PIXEL_IN(203,140, 208,146, 896)
   Else
      IF($check_2 = 0) // нажатие 2 если еще не нажималась
         $check_2 = 1
         KEYPRESS(#2)
         WAITMS(500)
      Else
         IF($check_3 = 0) // нажатие 3 если еще не нажималась
            $check_3 = 1
            KEYPRESS(#3)
            WAITMS(500)
         Else
            IF($check_4 = 0) // нажатие 4 если еще не нажималась
               $check_4 = 1
               KEYPRESS(#4)
               WAITMS(500)
            Else
               IF($check_5 = 0) // нажатие 5 если еще не нажималась
                  $check_5 = 1
                  KEYPRESS(#5)
                  WAITMS(500)
               Else
                  IF($check_6 = 0) // нажатие 6 если еще не нажималась
                     $check_6 = 1
                     KEYPRESS(#6)
                     WAITMS(500)
                  END_IF
               END_IF
            END_IF
         END_IF
      END_IF
   END_IF
END_SUB