Author Topic: Не срабатывает условие if  (Read 3830 times)

0 Members and 1 Guest are viewing this topic.

Altraster

  • Зашел в гости
  • *
  • Posts: 7
    • View Profile
Не срабатывает условие if
« on: January 18, 2018, 12:53:28 PM »
Доброго времени суток!
Недавно познакомился с программой, почиал учебники(видимо както косо почитал :-[), решил попробовать.
так вот решил сделать цикл с поиском определнного пикселя(не картинки) в списке, если кликер его не находит, то останавливается. Так вот, написал конструкцию вида
Code: [Select]
// 17.01.2018
#name "Прием по цвету"

$a=0
getscreen
while($a=0)
if( pxl(493,261 16777215))
dbclick(697,260)
wait(15)
ldown(374,45)
move(374,14)
lup(374,14)
waitms(500)
lclick(780,113)
wait(5)
lclick(414,387)
wait(30)
lclick(274,77)
wait(60)
lclick(1592,214)
waitms(500)
else
inc($a,1)
end_if
end_cyc
$a=0
lclick(31,1052)
halt
она не срабатывает, сразу уходит в
Code: [Select]
lclick(31,1052)
halt
но если написать вот так:
Code: [Select]
// 17.01.2018
#name "Прием по цвету"

getscreen
if( pxl(493,261 16777215) )
dblclick(653,257)
wait(10)
ldown(382,45)
move(390,18)
lup(390,18)
waitms(1000)
lclick(777,115)
wait(5)
lclick(409,366)
wait(30)
lclick(274,80)
wait(60)
lclick(1590,215)
waitms(1000)
то все работает :o, но не останавливается когда не видит этот пиксель. ЧЯННЕТ? :'(
Просьба, по возможности, обьяснить нубяре что там не так. Заранее спасибо!

Spw

  • Зашел в гости
  • *
  • Posts: 12
  • Addicted
    • View Profile
Re: Не срабатывает условие if
« Reply #1 on: January 18, 2018, 04:05:45 PM »
В первом примере цикл выполняется до тех пор пока $a=0, но так как переменная по умолчанию ноль то цикл сразу пропускает. Во втором, не совсем понял что надо, остановить скрипт? Если да то команду halt добавь в конце.

Code: (clickermann) [Select]
getscreen
if( pxl(493,261 16777215) )
dblclick(653,257)
wait(10)
ldown(382,45)
move(390,18)
lup(390,18)
waitms(1000)
lclick(777,115)
wait(5)
lclick(409,366)
wait(30)
lclick(274,80)
wait(60)
lclick(1590,215)
waitms(1000)
halt
end_if

open_78

  • Активный участник
  • ***
  • Posts: 285
  • v4.13.014 x64
    • View Profile
Re: Не срабатывает условие if
« Reply #2 on: January 18, 2018, 04:23:02 PM »
Code: (clickermann) [Select]
// 17.01.2018
#name "Прием по цвету"

$a=0
while($a=0)
   getscreen
   if(pxl(493,261)=16777215)
      dblclick(697,260)
      wait(15)
      ldown(374,45)
      move(374,14)
      lup(374,14)
      waitms(500)
      lclick(780,113)
      wait(5)
      lclick(414,387)
      wait(30)
      lclick(274,77)
      wait(60)
      lclick(1592,214)
      waitms(500)
   else
      $a=1
   end_if
end_cyc

lclick(31,1052)
halt
« Last Edit: January 18, 2018, 04:56:18 PM by open_78 »

open_78

  • Активный участник
  • ***
  • Posts: 285
  • v4.13.014 x64
    • View Profile
Re: Не срабатывает условие if
« Reply #3 on: January 18, 2018, 04:26:23 PM »
...цикл выполняется до тех пор пока $a=0, но так как переменная по умолчанию ноль то цикл сразу пропускает...
Вы противоречите сами себе, и путаете новичков.

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Не срабатывает условие if
« Reply #4 on: January 18, 2018, 04:40:46 PM »
Синтаксис не верен, да еще и ошибки в написании команд. Бери команды из шаблонов, не ошибешься.
Также  getscreen в не цикла, если пиксел изначально найден то цикл никогда не завершится, потому как новый снимок не делается.

Code: (clickermann) [Select]
// 17.01.2018
#name "Прием по цвету"

$a=0
while($a=0)
   getscreen
   if(pxl(493,261) = 16777215)
      DBLCLICK(697,260)
      wait(15)
      ldown(374,45)
      WAITMS(50)
      move(374,14)
      WAITMS(50)
      lup(374,14)
      waitms(500)
      lclick(780,113)
      wait(5)
      lclick(414,387)
      wait(30)
      lclick(274,77)
      wait(60)
      lclick(1592,214)
      waitms(500)
   else
      $a = 1
   end_if
end_cyc

lclick(31,1052)

halt

Еще вариант
Code: (clickermann) [Select]
// 17.01.2018
#name "Прием по цвету"

getscreen
while(pxl(493,261) = 16777215)
   DBLCLICK(697,260)
   wait(15)
   ldown(374,45)
   WAITMS(50)
   move(374,14)
   WAITMS(50)
   lup(374,14)
   waitms(500)
   lclick(780,113)
   wait(5)
   lclick(414,387)
   wait(30)
   lclick(274,77)
   wait(60)
   lclick(1592,214)
   waitms(500)   
   getscreen
end_cyc

lclick(31,1052)

halt

Altraster

  • Зашел в гости
  • *
  • Posts: 7
    • View Profile
Re: Не срабатывает условие if
« Reply #5 on: January 18, 2018, 05:09:28 PM »
В первом примере цикл выполняется до тех пор пока $a=0, но так как переменная по умолчанию ноль то цикл сразу пропускает.
Разве не наобарот? пока a=0 то while работает?
Синтаксис не верен, да еще и ошибки в написании команд. Бери команды из шаблонов, не ошибешься. Также  getscreen в не цикла, если пиксел изначально найден то цикл никогда не завершится, потому как новый снимок не делается.
Ну дык дата скрипта 17.01.2018 ;D учусь.
Спасибо за развернутый ответ.

Code: (clickermann) [Select]
$a=0
while($a=0)
   getscreen
   if(pxl(493,261) = 16777215)
      DBLCLICK(697,260)
      wait(15)
      ldown(374,45)
      WAITMS(50)
      move(374,14)
      WAITMS(50)
      lup(374,14)
      waitms(500)
      lclick(780,113)
      wait(5)
      lclick(414,387)
      wait(30)
      lclick(274,77)
      wait(60)
      lclick(1592,214)
      waitms(500)
   else
      $a = 1
   end_if
end_cyc
 
lclick(31,1052)
 
halt
Сработало! Спасибо!
ещё вопрос: где можно посмотреть мануал по IF? и ещё точнее какие переменные можно писать в условие IF?

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Не срабатывает условие if
« Reply #6 on: January 18, 2018, 05:59:39 PM »
Бери второй вариант, не нужно здесь IF вкладывать во WHILE
Code: (clickermann) [Select]
getscreen(493,261,493,261)
while(pxl(493,261) = 16777215)
    dbclick(697,260)
    wait(15)
    ldown(374,45)
    move(374,14)
    lup(374,14)
    waitms(500)
    lclick(780,113)
    wait(5)
    lclick(414,387)
    wait(30)
    lclick(274,77)
    wait(60)
    lclick(1592,214)
    waitms(500)
    getscreen(493,261,493,261)
end_cyc

lclick(31,1052)
halt

ещё вопрос: где можно посмотреть мануал по IF?
в встроенной справке

и ещё точнее какие переменные можно писать в условие IF?
Любые  :). Вопрос странный.
« Last Edit: January 22, 2018, 04:20:35 PM by Vint »


Altraster

  • Зашел в гости
  • *
  • Posts: 7
    • View Profile
Re: Не срабатывает условие if
« Reply #7 on: January 19, 2018, 04:52:08 PM »
Вообщем всем спасибо за ответы. Буду изучать программку дальше, ибо очень полезно)))
В результате получилось вот что:
Code: (clickermann) [Select]
$x=287  //фиксированно
$y=278 //+19

go:
getscreen
while(pxl($x,$y = 3984108)) //либо тык сразу, либо смешение в центр следующей строчки.
dblclick(770,$y)
wait(15)
ldown(382,47)
waitms(50)
move(382,13)
lup(382,13)
waitms(50)
lclick(806,112)
wait(5)
lclick(826,134)
wait(5)
rclick(1183,340)
waitms(100)
lclick(1273,450)
waitms(100)
lclick(1284,265)
wait(30)
lclick(269,76)
wait(60)
getscreen
           else
                $y=$y+19
               goto(go)
end_cyc

lclick(27,1060)
halt
Последнее: Обращение к GO: из тела While сработает или нет?(просто пока все шло без выполнения Else)

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Не срабатывает условие if
« Reply #8 on: January 19, 2018, 06:19:25 PM »
Не верный синтаксис! Я ж тебе исправлял.
Code: (clickermann) [Select]
while(pxl($x,$y = 3984108))Правильно так
Code: (clickermann) [Select]
while(pxl($x,$y) = 3984108)
Какое может быть ELSE внутри цикла? ELSE может быть только в условиях!
Выпрыгивать из цикла через гото нельзя, это приводит к ошибкам.

Теперь непонятно когда цикл должен прекратиться?! Если пиксел совпал цикл выполняется, если не совпал увеличивается $y и снова выполняется  :o А выходить то из него когда? Когда $y превысит размер экрана?


Altraster

  • Зашел в гости
  • *
  • Posts: 7
    • View Profile
Re: Не срабатывает условие if
« Reply #9 on: January 22, 2018, 02:08:27 PM »
Code: (clickermann) [Select]
getscreen
while(pxl($x,$y) = 3984108) //тык в строчку
dblclick(770,$y)
wait(15)
ldown(382,47)
waitms(50)
move(382,13)
lup(382,13)
waitms(50)
lclick(806,112)
wait(5)
lclick(826,134)
wait(5)
rclick(1183,340)
waitms(100)
lclick(1273,450)
waitms(100)
lclick(1284,265)
wait(30)
lclick(923,12)
wait(90)
getscreen
end_cyc

lclick(27,1060)
halt
Не верный синтаксис! Я ж тебе исправлял.
selffix
^_^ Я заметил что неправильный кусок кинул, но переписать сообщение времени небыло:)
за else & goto спасибо.
« Last Edit: January 22, 2018, 02:11:09 PM by Altraster »

Altraster

  • Зашел в гости
  • *
  • Posts: 7
    • View Profile
Re: Не срабатывает условие if
« Reply #10 on: January 24, 2018, 12:12:19 PM »
Снова я XDXDXD
Задача немного изменилась, теперь в заданном пикселе может не попасться нужный цвет, + изменился цвет поиска. Написал вот так:
Code: (clickermann) [Select]
$a=19
$x=1272
$y=258 //+19

getscreen
if(pxl($x,$y) = 0)
dblclick(770,$y)
wait(15)
ldown(382,47)
waitms(50)
move(382,13)
lup(382,13)
waitms(50)
lclick(789,112)
wait(10)
lclick(423,364)
wait(30)
lclick(923,12)
wait(30)
lclick(1592,214)
waitms(100)
getscreen
else
$y=$y+$a //пробовал inc($y,19) тот же эффект.
end_if

lclick(27,1060)
halt
если в заданном пикселе цвет = 0 то он работает. А вот смещение по $y не срабатывает. Хотя почитал форум, написано все правильно...

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Не срабатывает условие if
« Reply #11 on: January 24, 2018, 02:36:31 PM »
Что правильно? Условие есть, цикла нет. Код выполняется и тут же останавливается.

Altraster

  • Зашел в гости
  • *
  • Posts: 7
    • View Profile
Re: Не срабатывает условие if
« Reply #12 on: January 26, 2018, 02:57:19 PM »
Снова я:) вот что получилось и очень даже работает. Спасибо за терпение:)

Code: (clickermann) [Select]
$a=19
$b=0
$x1=1272 
$x2=287
$y1=258

//start:
while($b=0)
getscreen

if(pxl($x1,$y1) = 0)
dblclick(770,$y1)
wait(15)
ldown(382,47)
waitms(50)
move(382,13)
lup(382,13)
waitms(50)
lclick(789,112)
wait(10)
lclick(423,364)
wait(60)
lclick(923,12)
wait(60)
lclick(1592,214)
waitms(100)
getscreen
else
$y1=$y1+$a
end_if
getscreen
if(pxl($x2,$y1) = 16777215, 16251893)
$b=1
end_if
end_cyc
//goto(start)

lclick(27,1060)
halt

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Не срабатывает условие if
« Reply #13 on: January 26, 2018, 03:15:37 PM »
if(pxl($x2,$y1) = 16777215, 16251893) это тоже самое что и написать if(2 = 1 , 3), как это понимать?

правильно - if( (pxl($x2,$y1) = 16777215) | (pxl($x2,$y1) =16251893) )

если раскомментировать твои "goto", то цикл во второй раз уже  не выполнится, так как при завершении цикла ранее $b=1

Altraster

  • Зашел в гости
  • *
  • Posts: 7
    • View Profile
Re: Не срабатывает условие if
« Reply #14 on: January 29, 2018, 09:01:04 AM »
if(pxl($x2,$y1) = 16777215, 16251893) это тоже самое что и написать if(2 = 1 , 3), как это понимать?

правильно - if( (pxl($x2,$y1) = 16777215) | (pxl($x2,$y1) =16251893) )
Спасибо поправил.
если раскомментировать твои "goto", то цикл во второй раз уже  не выполнится, так как при завершении цикла ранее $b=1
goto осталось от страрого варианта, просто потереть коментарии забыл:)