Что нового

Работа с циклами.Возврат и переход на другие циклы

Can

Новичок
Сообщения
59
Репутация
1
Здравствуйте!
У меня например есть 3 цикла(или более), которые работают в общем цикле.Подскажите пожалуйста, как например в первом цикле при выполнении условия вернуться в этот же цикл с начала, а если не выполняется условие, то перескочить сразу из 1-ого на 3-ий, или любой другой, заданный?

Код:
HotKeySet ( "{ESC}" ,"_Exit")

While 1 
      

	$i = 0
    While $i <= 2
    PixelSearch( 500, 441, 880, 463, 0x3C251B, 0, 1)
    If Not @error Then
	MouseClick("left", 213, 528, 2, 5)
           ; тут мне надо перейти в начало данного цикла 
    If @error Then
	MouseClick("left", 713, 528, 2, 5)
           ; тут мне надо перейти в начало 3 цикла
	EndIf
    $i = $i + 1 
    WEnd

	$p = 0
    While $p <= 2
    PixelSearch( 500, 441, 880, 463, 0x3C251B, 0, 1)
    If Not @error Then
	MouseClick("left", 513, 528, 2, 5)
    If @error Then
	MouseClick("left", 713, 928, 2, 5)
	EndIf
    $p = $p + 1 
    WEnd

    $r = 0
    While $r <= 2
    PixelSearch( 500, 441, 880, 463, 0x3C251B, 0, 1)
    If Not @error Then
	MouseClick("left", 613, 528, 2, 5)
    If @error Then
	MouseClick("left", 813, 528, 2, 5)
	EndIf
    $r = $r + 1 
    WEnd

Sleep(270)

WEnd
Func _Exit()
    Exit
EndFunc


Заранее благодарю.
 

gregaz

AutoIT Гуру
Сообщения
1 166
Репутация
299
Can [?]
У меня например есть 3 цикла(или более), которые работают в общем цикле.Подскажите пожалуйста, как например в первом цикле при выполнении условия вернуться в этот же цикл с начала, а если не выполняется условие, то перескочить сразу из 1-ого на 3-ий, или любой другой, заданный?
Заведи каждый цикл в отдельную функцию и управляй ими.
В каждом цикле поставь условие возврата в начало цикла (например $i=0)
Примерно так :
Код:
HotKeySet ( "{ESC}" ,"_Exit")
Global $i,$p,$r,$ii=0
Global $iPar1=0,$iPar2=0,$iPar3=0
While 1 
   $ii+=1
   Cycle1()
   If $i=3 Then Cycle3()
   If $r=3 Then Cycle2()
   If $p=3 Then Cycle1()
   If $ii >2 Then 
	 $iPar1=1
   ElseIf  $ii > 4 Then 
	  $iPar2=1
   Else  
	  $iPar3=1
	  Cycle2()
   EndIf
   Sleep(270)
WEnd

Func Cycle1()
   $i = 0
   While $i <= 2
	  PixelSearch( 500, 441, 880, 463, 0x3C251B, 0, 1)
	  If $iPar1=1 Then    $i=0  ; возврат в начало цикла
	  If Not @error Then
		 MouseClick("left", 213, 528, 2, 5)
	  ;If @error Then
	  Else
		 MouseClick("left", 713, 528, 2, 5)
	  EndIf 
	  Sleep(50)
	  $i = $i + 1	
	  ConsoleWrite('Cycle1 ' & $i & @LF)
   WEnd

EndFunc
Func Cycle2()
   $p = 0
   While $p <= 2
	  PixelSearch( 500, 441, 880, 463, 0x3C251B, 0, 1)
	   If $iPar2=1 Then    $p=0  ; возврат в начало цикла
	  If Not @error Then
		 MouseClick("left", 513, 528, 2, 5)
	  ;If @error Then
	  Else 
		 MouseClick("left", 713, 928, 2, 5)
	  EndIf
	  $p = $p + 1 
	  Sleep(50)
	  ConsoleWrite('Cycle2 ' & $p & @LF)
   WEnd
EndFunc
Func Cycle3()
   $r = 0
   While $r <= 2
	  PixelSearch( 500, 441, 880, 463, 0x3C251B, 0, 1)
	   If $iPar3=1 Then    $r=0  ; возврат в начало цикла
	  If Not @error Then
	  MouseClick("left", 613, 528, 2, 5)
	  ;If @error Then
	  Else  
		 MouseClick("left", 813, 528, 2, 5)
	  EndIf
	  $r = $r + 1 
	  Sleep(50)
	  ConsoleWrite('Cycle3 ' & $r & @LF)
   WEnd
EndFunc
Func _Exit()
   Exit
EndFunc
 
Автор
C

Can

Новичок
Сообщения
59
Репутация
1
Что-то я не очень понял, мне нужно в зависимости от результата нахождения пикселя в цикле, выполнить заданный клик мышкой, и потом перейти либо в начало данного цикла(если нашел), или в начало другого,указанного цикла(например 3-его), если не нашел.

Я выше в своём скрипте пометил, где именно.
Можно примерчик поточнее, если он существует конечно.
 

gregaz

AutoIT Гуру
Сообщения
1 166
Репутация
299
Can [?]
Я выше в своём скрипте пометил, где именно.
Можно примерчик поточнее, если он существует конечно.
Так :
Код:
HotKeySet ( "{ESC}" ,"_Exit")
Global $i,$p,$r

While 1 
   Cycle1()
   Cycle2()
   Cycle3()
   Sleep(270)
WEnd

Func Cycle1()
   $i = 0
   While $i <= 2
      PixelSearch( 500, 441, 880, 463, 0x3C251B, 0, 1)
      ;If $iPar1=1 Then    $i=0  ; возврат в начало цикла
      If Not @error Then
         MouseClick("left", 213, 528, 2, 5)
		 ; тут мне надо перейти в начало данного цикла
		 $i=0
	  Else
         MouseClick("left", 713, 528, 2, 5)
		 ; тут мне надо перейти в начало 3 цикла
		 Cycle3()
	  EndIf 
      Sleep(50)
      $i = $i + 1   
      ConsoleWrite('Cycle1 ' & $i & @LF)
   WEnd
EndFunc
;..............................
Func Cycle2()
;..............................
Func Cycle3()
;.............................


Видишь ли я не ботовод .
На подобные вопросы в их разделе лучше бы подсказали.
Я могу отвечать только на конкретные вопросы
 
Автор
C

Can

Новичок
Сообщения
59
Репутация
1
Возникла небольшая проблемка, почему-то выполняется только первый цикл, а второй не хочет запускаться, сразу после первого, что не так, подскажите пожалуйста?

Код:
HotKeySet ( "{ESC}" ,"_Exit")
Global $i,$p

While 1 
   Cycle1()
   Cycle2()  
  
   Sleep(250)
WEnd
Func _Exit()
    Exit
EndFunc



Func Cycle1() 
   $i = 0
   While $i <= 1
        Sleep(500)
		MouseMove(65, 714, 5)
        Sleep(1000)
		MouseDown("left")
        Sleep(50)
        MouseUp("left")
        Sleep(100)
        MouseDown("left")
        Sleep(50)
        MouseUp("left")
        
		Sleep(50) 
      $i = $i + 1   
      ConsoleWrite('Cycle1 ' & $i & @LF)
   WEnd
EndFunc

Func Cycle2() 
   $p = 0
   While $p <= 1
        Sleep(500)
		MouseMove(85, 250, 3)     
		Sleep(500)          
		MouseDown("left")    
        Sleep(50)            
        MouseUp("left")      
		Sleep(800)           
		MouseDown("left")    
        Sleep(50)            
        MouseUp("left")     
		
		
		Sleep(50) 
      $p = $p + 1   
      ConsoleWrite('Cycle2 ' & $p & @LF)
   WEnd
EndFunc


Заранее благодарю.
 

Garrett

Модератор
Локальный модератор
Сообщения
3 999
Репутация
964
Can [?]
Возникла небольшая проблемка, почему-то выполняется только первый цикл, а второй не хочет запускаться, сразу после первого, что не так, подскажите пожалуйста?
Хм, у меня всё работает. И первая, и вторая функция.
 
Автор
C

Can

Новичок
Сообщения
59
Репутация
1
Garrett сказал(а):
Can [?]
Возникла небольшая проблемка, почему-то выполняется только первый цикл, а второй не хочет запускаться, сразу после первого, что не так, подскажите пожалуйста?
Хм, у меня всё работает. И первая, и вторая функция.

Спасибо Вам, я только что разобрался, каждый цикл просто воспроизводился 2 раза, а поскольку начинка была очень большая, я полностью не проверил. $i = 0, а надо было $i = 1, это моя невнимательность, большое спасибо за внимание.
Прошу прощения за свою ошибку!
 
Верх