Author Topic: Как сделать количество циклов выполнения скрипта по счетчику  (Read 6054 times)

0 Members and 1 Guest are viewing this topic.

larin

  • Зашел в гости
  • *
  • Posts: 3
    • View Profile
Здравствуйте. Вот простой скрипт. Нужно что бы он выполнился ровно 100 раз.
Я так понимаю, его можно просто 100 раз скопировать. Но это кажется не совсем правильным.
Подскажите, пожалуйста, как сделать так, что бы скрипт выполнился 100 раз?

Code: [Select]

//Программа поиска звездочки

print("Программа поиска звездочки запущена")
WAITMS(1000)

GETSCREEN
IF_PICTURE_IN(0, 0, $_xmax, $_ymax, "star.bmp", -1, 100)

WAITMS(100)
move($_RETURN1+20,$_RETURN2)
WAITMS(100)
LCLICK($_RETURN1+20,$_RETURN2)
WAITMS(100)
print("Найдена!!!")

waitms(1000)

ELSE
print("Звездочка не найдена")

// нужно выполнить этот скрипт 100 раз


Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Здравствуйте. Вот простой скрипт. Нужно что бы он выполнился ровно 100 раз.
Я так понимаю, его можно просто 100 раз скопировать. Но это кажется не совсем правильным.
Подскажите, пожалуйста, как сделать так, что бы скрипт выполнился 100 раз?

END_IF где?
Может надо выполнить 100 раз если твоя звездочка найдена? Тогда так
Code: (clickermann) [Select]
//Программа поиска звездочки

print("Программа поиска звездочки запущена")
WAITMS(1000)

$count = 0
WHILE($count < 100)
   GETSCREEN
   IF_PICTURE_IN(0,0, $_xmax,$_ymax, "star.bmp", -1, 100)
      INC($count,1) // увеличиваем число
      WAITMS(100)
      move($_RETURN1+20,$_RETURN2)
      WAITMS(100)
      LCLICK($_RETURN1+20,$_RETURN2)
      print("Найдена!!!")
      waitms(1000)
   ELSE
      waitms(50)
      print("Звездочка не найдена")
   END_IF
END_CYC

HALT // стоп

quant13

  • Активный участник
  • ***
  • Posts: 174
    • View Profile

larin

  • Зашел в гости
  • *
  • Posts: 3
    • View Profile
А можно ли изменить скрипт таким образом: сначала на экране 100 раз ищется star1.bmp, а потом 50 раз star2.bmp.
Могу ли я просто копировать этот цикл второй раз и изменить WHILE($count < 50).
Не будет ли при этом ошибки? Простите за нубовопросы!

Code: [Select]
    //Программа поиска звездочки
     
    print("Программа поиска звездочки запущена")
    WAITMS(1000)
     
    $count = 0
    WHILE($count < 100)
       GETSCREEN
       IF_PICTURE_IN(0,0, $_xmax,$_ymax, "star1.bmp", -1, 100)
          INC($count,1) // увеличиваем число
          WAITMS(100)
          move($_RETURN1+20,$_RETURN2)
          WAITMS(100)
          LCLICK($_RETURN1+20,$_RETURN2)
          print("Найдена!!!")
          waitms(1000)
       ELSE
          waitms(50)
          print("Звездочка не найдена")
       END_IF
    END_CYC
 
// тут начинается поиск второй звездочки, которая никак не зависит от первой, но я хочу что бы цикл повторялся только 50 раз   

    $count = 0
    WHILE($count < 50)
       GETSCREEN
       IF_PICTURE_IN(0,0, $_xmax,$_ymax, "star2.bmp", -1, 100)
          INC($count,1) // увеличиваем число
          WAITMS(100)
          move($_RETURN1+20,$_RETURN2)
          WAITMS(100)
          LCLICK($_RETURN1+20,$_RETURN2)
          print("Найдена!!!")
          waitms(1000)
       ELSE
          waitms(50)
          print("Звездочка не найдена")
       END_IF
    END_CYC
     
    HALT // стоп

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Могу ли я просто копировать этот цикл второй раз и изменить WHILE($count < 50).

Можешь.


Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Так как код одинаковый можно его засунуть в подпрограмму с передачей параметра имени картинки.
Просто для оптимизации

Code: (clickermann) [Select]
SUB(search, $pic)
   GETSCREEN
   IF_PICTURE_IN(0,0, $_xmax,$_ymax, $pic, -1, 100)
      INC($count,1) // увеличиваем число
      WAITMS(100)
      move($_RETURN1+20,$_RETURN2)
      WAITMS(100)
      LCLICK($_RETURN1+20,$_RETURN2)
      print("Найдена!!!")
      waitms(1000)
   ELSE
      waitms(50)
   END_IF
END_SUB


//Программа поиска звездочки

print("Программа поиска звездочки запущена")
WAITMS(1000)

$count = 0
WHILE($count < 100)
   search("star1.bmp")
END_CYC

$count = 0
WHILE($count < 50)
   search("star2.bmp")
END_CYC

HALT // стоп

omiron

  • Зашел в гости
  • *
  • Posts: 5
    • View Profile
А можно еще вопрос - скрипт работает, находит звездочку 100 раз. А как реализовать условие, что цикл должен заканчиваться: либо после 100 раз нахождения звездочки, либо после 1 минуты работы?
Как сделать вот это условие ЛИБО?
Code: [Select]
//Программа поиска звездочки
// Программа должна закончится либо после 100 раз нахождения звездочки, либо после 1 минуты работы, в зависимости от того, что наступит раньше
print("Программа поиска звездочки запущена")
WAITMS(1000)
 
$count = 0
WHILE($count < 100)
   GETSCREEN
   IF_PICTURE_IN(0,0, $_xmax,$_ymax, "star.bmp", -1, 100)
      INC($count,1) // увеличиваем число
      WAITMS(100)
      move($_RETURN1+20,$_RETURN2)
      WAITMS(100)
      LCLICK($_RETURN1+20,$_RETURN2)
      print("Найдена!!!")
      waitms(1000)
   ELSE
      waitms(50)
      print("Звездочка не найдена")
   END_IF
END_CYC
 
HALT // стоп
« Last Edit: December 20, 2016, 04:13:13 PM by omiron »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Code: (clickermann) [Select]
//Программа поиска звездочки

print("Программа поиска звездочки запущена")
WAITMS(1000)

$count = 0
$time = $_time_t + 60 // таймер на 60 секунд
WHILE(($count < 100)&($time > $_time_t))
   GETSCREEN
   IF_PICTURE_IN(0,0, $_xmax,$_ymax, "star.bmp", -1, 100)
      INC($count,1) // увеличиваем число
      WAITMS(100)
      move($_RETURN1+20,$_RETURN2)
      WAITMS(100)
      LCLICK($_RETURN1+20,$_RETURN2)
      print("Найдена: ", $count, " раз")
      waitms(1000)
   ELSE
      waitms(50)
   END_IF
END_CYC

HALT // стоп

silver073000

  • Зашел в гости
  • *
  • Posts: 15
    • View Profile
Доброго времени всем :)
Вроде нашёл что-то подходящее в этой теме по своему вопросу, но не могу осилить один момент. В одном участке скрипта у меня сделана задержка в 9,3 секунды для того, чтобы кликер нажал на кнопку в заданной координате. Но эта кнопка может появиться как на первой секунде, так и на второй, и на третьей и т.д.. Подскажите, как сделать, чтобы кликер проверял нужную мне координату до появления кнопки, но не более 9 секунд, после чего продолжил бы дальше свою работу. А то выходит так, что скрипт у меня простаивает впустую 8 секунд, если кнопка появилась на первой секунде :) Вот участок скрипта:
Code: (clickermann) [Select]
LCLICK(1054,207)  // 10853244
WAITMS(50)
LCLICK(11,283)  // 10853244
WAITMS(50)
LCLICK(1054,207)  // 10853244
WAITMS(50)
LCLICK(11,283)  // 10853244
WAITMS(50)
LCLICK(11,283)  // 10853244
//-----
waitms(500)
LCLICK(47,396)
waitms(100)
LCLICK(527,247)
//-----
waitms(9300)
lclick(458,44)
wait(1)
LCLICK(547,371)
wait(2)
LCLICK(460,512)
Как задавать проверки цветов в координатах, я знаю. Подскажите, правильнее будет делать мою задумку с помощью for.... Ожидание кнопки и если появилась, то переход далее..., но ждать не более 9 секунд ... end_cyc или то же самое, но с помощью WHILE  ... END_CYC?
« Last Edit: July 07, 2017, 11:22:25 AM by silver073000 »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Code: (clickermann) [Select]
$time = $_time_t + 10 // таймер на 10 секунд
WHILE($time > $_time_t) // цикл выполняется не более 10 секунд
   GETSCREEN
   IF_PIXEL_IN(400,400, 450,450, 255)
      $time = 0  // обнуляем время, прерываем цикл
   ELSE
      WAITMS(50)
   END_IF
END_CYC
IF($time ! 0) // необязательное условие на случай если цвет не был найден
// время истекло, цвет не найден
END_IF

silver073000

  • Зашел в гости
  • *
  • Posts: 15
    • View Profile
Благодарю за ответ :) Как раз то, чего ожидал :)