Author Topic: как создать цикл?  (Read 1921 times)

0 Members and 1 Guest are viewing this topic.

66kaban

  • Зашел в гости
  • *
  • Posts: 3
    • View Profile
как создать цикл?
« on: March 03, 2020, 08:33:51 PM »
нужен такой скрипт
кликаем в точку А
кликаем в точку Б
если в точке Б цвет 111, то кликаем в точку В. повторяем этот цикл пока в точке Б цвет не станет 222
если в точке Б цвет 222, то кликаем в точку Д.

waitms(600)
LCLICK(107,127) // клик в точке А
waitms(600)
LCLICK(1229,34) // клик в точке Б
waitms(600)
$check = 0
WHILE($check = 0) // Зацикливаем пока не найдём указанный цвет 
GETSCREEN
IF(PXL(1229,34) = 111)
    Lclick(867,802) // клик в точке В
WAITMS(600)
$check = 1 // Выходим из цикла
ELSE
WAIT(1)
END_IF
END_CYC
waitms(600)
$check = 0
GETSCREEN
IF(PXL(1229,34) = 222) // если в точке Б белый
 Lclick(937,286) // клик в точке Д
WAITMS(600)
$check = 1 // Выходим из цикла
ELSE
WAIT(1)
END_IF

не получается создать цикл:
если в точке Б цвет 111, то кликаем в точку В. повторяем этот цикл пока в точке Б цвет не станет 222

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Re: как создать цикл?
« Reply #1 on: March 03, 2020, 09:22:57 PM »
Учитывая, что вопрос не по языку скрипта, а по алгоритму (это значит, что человек сам думать не особо хочет), мне все же интересно - из какого цикла ты выходишь в 23-ей строке...?
Code: (clickermann) [Select]
waitms(600)
LCLICK(107,127) // клик в точке А
waitms(600)
LCLICK(1229,34) // клик в точке Б
waitms(600)
$check = 0
WHILE($check = 0) // Зацикливаем пока не найдём указанный цвет
   GETSCREEN
   IF(PXL(1229,34) = 111)
      Lclick(867,802) // клик в точке В
      WAITMS(600)
      $check = 1 // Выходим из цикла
   ELSE
      WAIT(1)
   END_IF
END_CYC
waitms(600)
$check = 0
GETSCREEN
IF(PXL(1229,34) = 222) // если в точке Б белый
   Lclick(937,286) // клик в точке Д
   WAITMS(600)
   $check = 1 // Выходим из цикла
ELSE
   WAIT(1)
END_IF
Я не ду... Потому и не бу...

Hito

  • Герой форума
  • *****
  • Posts: 1212
    • View Profile
Re: как создать цикл?
« Reply #2 on: March 03, 2020, 09:28:00 PM »
И еще... Который раз на форуме вижу подобные вещи...
Code: (clickermann) [Select]
waitms(600)
LCLICK(107,127) // клик в точке А
waitms(600)
LCLICK(1229,34) // клик в точке Б
waitms(600)
$check = 0
WHILE($check = 0) // Зацикливаем пока не найдём указанный цвет
То есть два клика и за ними цикл, который крутится до тех пор, пока не появится результат этих кликов? А если что-то где-то подзависло, лагануло и так дале и клик не прошел...? Скрипт зависнет в цикле ожидания результата?
Я не ду... Потому и не бу...

66kaban

  • Зашел в гости
  • *
  • Posts: 3
    • View Profile
Re: как создать цикл?
« Reply #3 on: March 17, 2020, 03:35:49 PM »
в итоге получился вот такой скрипт:
  getScreen
if(PXL(17,167) = 255) // если пиксель "а" красный, то кликаем в него
Lclick(17,167)
waitms(300)
lclick(1588,75)      //   б
 waitms(600)
getScreen(1588,75,1588,75)   
 while(pxl(1588,75)!16777215) // запускаем цикл, клик "б" "в", до тех пор пока в точке б не появится белый цвет
getScreen(1588,75,1588,75)
lclick(1588,75)
 waitms(600) 
lclick(1270,1000) // в
  waitms(600)
  end_cyc

скрипт работает, но проблема в том, что он повторяет цикл еще 1 раз после того как в "б" уже белый цвет. почему идет повтор? в итоге пришлось вот так сделать:
  getScreen
if(PXL(17,167) = 255)
Lclick(17,167)
waitms(300)
elSe
waitms(220)
end_if
 waitms(600)
getScreen(1588,75,1588,75)   
 while(pxl(1588,75)!16777215) // бел пикс
getScreen(1588,75,1588,75)
DBLCLICK(1588,75)
 waitms(600) 
lclick(1270,1000)
  waitms(600)
  getScreen
if(PXL(1588,75) = 16777215)
waitms(300)
elSe
waitms(220)
end_if
  end_cyc   

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: как создать цикл?
« Reply #4 on: March 17, 2020, 04:44:37 PM »
скрипт работает, но проблема в том, что он повторяет цикл еще 1 раз после того как в "б" уже белый цвет. почему идет повтор?
Где end_if от первого IF ?