Author Topic: Сделать цикл  (Read 3006 times)

0 Members and 1 Guest are viewing this topic.

Andrey_S

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Сделать цикл
« on: November 15, 2015, 05:21:52 PM »
Смысл скрипта следующий. Сначала делается цикл действий 7 раз. Потом идет перестановка состава и снова цикл 7 раз и т.д. Таких перестановок 15 шт. Когда выполнение программы доходит до конца и начинается с начала, циклы не повторяются. Т.е. я так понимаю переменная отбилась 7 раз и даже если выполнение идет повторно, считается что переменная уже обнулилась.
Для каждого цикла у каждой перестановки соответственно своя переменная.
Как сделать так, что когда скрипт заканчивается и начинается сначала, переменные бы также выполнялись заново.

Code: (clickermann) [Select]
FOR ($i, $i<7) //Oeee 1
   MOVE(701,423)
   LCLICK(702,423)  // 3355392
   LCLICK(702,423)  // 3355392
   WAITMS(500)
   MOVE(1003,331)
   LCLICK(1004,327)  // 3355392
   LCLICK(1004,327)  // 3355392
   WAITMS(2000)
   MOVE(887,738)
   LCLICK(886,738)  // 3355392
   LCLICK(886,738)  // 3355392
   WAITMS(15000)
   KEYPRESS(#A)
   WAITMS(95000)
   MOVE(1164,239)  // 3355392
   WAITMS(500)
   LCLICK(1164,239)
   LCLICK(1164,239)
   WAITMS(4000)
   GETSCREEN
   IF_PICTURE_IN (45,150, 1505,750, "1.bmp", -1, 100)
      LCLICK($_return1, $_return2)
      WAITMS(50)
      LCLICK($_return1, $_return2)
      WAITMS(300)
   END_IF
   GETSCREEN
   IF_PICTURE_IN (45,150, 1505,750, "1.bmp", -1, 100)
      LCLICK($_return1, $_return2)
      WAITMS(50)
      LCLICK($_return1, $_return2)
      WAITMS(300)
   END_IF
   WAITMS(500)
END_CYC
DELVAR($i)
   KEYPRESS(#A) // ia?aoaniaea 1 A?oeiaa
   WAITMS(500)
   LCLICK(532,267)  // 3355392
   LCLICK(532,267)  // 3355392
   WAITMS(500)
   LDOWN(712,320)  // 10078419
   WAITMS(500)
   MOVE(720,632)
   WAITMS(500)
   DBLCLICK(720,632)  // 12233647
   WAITMS(500)
   LDOWN(644,414)  // 10078419
   WAITMS(500)
   MOVE(621,632)
   WAITMS(500)
   DBLCLICK(621,632)  // 12233647
   WAITMS(500)
   LDOWN(712,412)  // 10078419
   WAITMS(500)
   MOVE(819,632)
   WAITMS(500)
   DBLCLICK(819,632)  // 12233647
   WAITMS(3000)
   GETSCREEN
   IF_PICTURE_IN (45,150, 1505,750, "1.bmp", -1, 100)
      LCLICK($_return1, $_return2)
      WAITMS(50)
      LCLICK($_return1, $_return2)
      WAITMS(300)
   END_IF
   GETSCREEN
   IF_PICTURE_IN (45,150, 1505,750, "1.bmp", -1, 100)
      LCLICK($_return1, $_return2)
      WAITMS(50)
      LCLICK($_return1, $_return2)
      WAITMS(300)
   END_IF
« Last Edit: November 15, 2015, 07:25:54 PM by Oraven »

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Сделать цикл
« Reply #1 on: November 15, 2015, 05:50:07 PM »
пременную $i можно обнулять или задавать начальное значение в самом условии цикла
Code: (clickermann) [Select]
FOR ($i=0, $i<7)я так понял, с помощью DELVAR($i) ты хотел удалить переменную (либо массив). правильно будет UNDEFINE ($i)

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Сделать цикл
« Reply #2 on: November 15, 2015, 07:26:27 PM »
Больше циклов!  ;D

Code: (clickermann) [Select]
FOR ($a=0,$a<7) //Oeee 1
   MOVE(701,423)
   LCLICK(702,423)  // 3355392
   LCLICK(702,423)  // 3355392
   WAITMS(500)
   MOVE(1003,331)
   LCLICK(1004,327)  // 3355392
   LCLICK(1004,327)  // 3355392
   WAITMS(2000)
   MOVE(887,738)
   LCLICK(886,738)  // 3355392
   LCLICK(886,738)  // 3355392
   WAITMS(15000)
   KEYPRESS(#A)
   WAITMS(95000)
   MOVE(1164,239)  // 3355392
   WAITMS(500)
   LCLICK(1164,239)
   LCLICK(1164,239)
   WAITMS(4000)
   FOR($b=0,$b<2)
      GETSCREEN
      IF_PICTURE_IN (45,150, 1505,750, "1.bmp", -1, 100)
         LCLICK($_return1, $_return2)
         WAITMS(50)
         LCLICK($_return1, $_return2)
         WAITMS(300)
      END_IF
   END_CYC
   WAITMS(500)
END_CYC

KEYPRESS(#A) // ia?aoaniaea 1 A?oeiaa
WAITMS(500)
LCLICK(532,267)  // 3355392
LCLICK(532,267)  // 3355392
WAITMS(500)
LDOWN(712,320)  // 10078419
WAITMS(500)
MOVE(720,632)
WAITMS(500)
DBLCLICK(720,632)  // 12233647
WAITMS(500)
LDOWN(644,414)  // 10078419
WAITMS(500)
MOVE(621,632)
WAITMS(500)
DBLCLICK(621,632)  // 12233647
WAITMS(500)
LDOWN(712,412)  // 10078419
WAITMS(500)
MOVE(819,632)
WAITMS(500)
DBLCLICK(819,632)  // 12233647
WAITMS(3000)
FOR($a=0,$a<2)
   GETSCREEN
   IF_PICTURE_IN (45,150, 1505,750, "1.bmp", -1, 100)
      LCLICK($_return1, $_return2)
      WAITMS(50)
      LCLICK($_return1, $_return2)
      WAITMS(300)
   END_IF
END_CYC

Andrey_S

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Re: Сделать цикл
« Reply #3 on: November 16, 2015, 03:38:44 PM »
Когда пишу FOR ($a=0,$a<7), вообще цикл не начинается.

У меня в чем проблема, вот прошли 7 циклов с переменной i, потом перестановка и далее 7 циклов с переменной g. Если я опять ставлю переменную i (а не g), то никаких действий не происходит, т.к. к этому моменту i уже равна нулю.

Эту проблему я победил тем что пишу i, потом g, потом другая буква и т.д. Но когда я использовал 13 букв и надо чтобы сценарий начинался заново, он не начинается, т.к. переменная уже отработала и равна была нулю.

Как это победить?

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Сделать цикл
« Reply #4 on: November 16, 2015, 03:53:52 PM »
Покажи наконец уже весь свой код, а то мы так еще долго будем гадать что у тебя не так. Версия кликера кстати надеюсь последняя 4.11.003?

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Сделать цикл
« Reply #5 on: November 16, 2015, 03:56:10 PM »
Тебе же написали, обнулить переменную в самом теле цикла.

Когда пишу FOR ($a=0,$a<7), вообще цикл не начинается.
Что там у тебя не начинается?


Andrey_S

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Re: Сделать цикл
« Reply #6 on: November 16, 2015, 04:10:55 PM »
Никаких движений мышка не делает(

Andrey_S

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Re: Сделать цикл
« Reply #7 on: November 16, 2015, 04:14:16 PM »
там 800 строк, кидать?
Я закинул 2 цикла, у меня их 13 идентичных и потом все заново.

Стоит отряд 3 юнита. Делается 7 боев, потом меняются 3 юнита на новых 3 и опять 7 боев. Итак 13 перестановок. Как только 13я заканчивается, заново 1я не начинается, не далаею опять 7 боев. 

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Сделать цикл
« Reply #8 on: November 16, 2015, 04:15:41 PM »
Прикрепи файл значит.

Andrey_S

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Re: Сделать цикл
« Reply #9 on: November 16, 2015, 04:30:42 PM »
Файл во вложении

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Сделать цикл
« Reply #10 on: November 16, 2015, 05:09:43 PM »
У тебя начального параметра в цикле нет поэтому переменная и не обнуляется, нет необходимости писать каждый раз новую переменную для цикла если только цикл не вложен в другой цикл.
У тебя есть зажатия клавиш но нет отжатий. В конце лишний END_CYC. Ну и код очень не оптимизирован.

Вот исправленный оптимизированный вариант с использованием подпрограммы. В местах где у тебя меняются координаты подпрограмма подставляет значения через переменные, В каждом вызове описаны эти значения. Код сократился до 88 строк
« Last Edit: November 16, 2015, 05:11:33 PM by Oraven »

Andrey_S

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Re: Сделать цикл
« Reply #11 on: November 17, 2015, 07:48:52 AM »
Все работает!!! Спасибо!!! Убрал только строчку где отжимается клавиша, как то не работает это в игре. Если что, напишу тогда!