Что нового

[Процессы] Помогите, заставить работать и оптимизировать код с вложенными циклами

Кайгородов В. Ю.

В универе только TurboBASIC изучал и то забыл уже
Сообщения
25
Репутация
0
Версия AutoIt: 3.3.6.1.

Описание:
Попытка включить цикл с условием второго порядка окончился неудачей:
Код:
$begin = TimerInit()
$timeint = 5000
$i = TimerDiff($begin)
While TimerDiff($begin) < 50000
  If PixelGetColor(1044, 750) = 0x037FE9 Then 
Do
    If TimerDiff($begin) > $timeint Then ExitLoop
        MouseClick("primary", 800, 100, 1, 0)
        Sleep ( '150' )
    If TimerDiff($begin) > $timeint Then ExitLoop
        MouseClick("primary", 875, 1006, 1, 0)
        Sleep ( '550' )
Until $i = PixelGetColor(1044, 750) <> 0x037FE9
    Else
Do
    If TimerDiff($begin) > $timeint Then ExitLoop
        MouseClick("primary", 800, 800, 1, 0)
        Sleep ( '150' )
    If TimerDiff($begin) > $timeint Then ExitLoop
        MouseClick("primary", 1159, 422, 1, 0)
        Sleep ( '550' )
Until $i = PixelGetColor(1044, 750) = 0x037FE9
    EndIf
WEnd
MsgBox(64, "Инфо", "Время работы цикла " & TimerDiff($begin) & " истекло")

Код должен работать так: Запускается секундомер, проверяется цвет в зависимости от результата запускается цикл работающий пока цвет не изменится. В цикле выбирается действие (два клика) перед каждым кликом проверяется: истекло ли время (или любое другое условие). Когда цикл завершается, то снова проверяется цвет и время и выбирается действие.
Но цикл работает так: Если цвет во время запуска 0x037FE9 то производятся действия Then, затем при смене цвета Else, а после того как цвет вновь становится 0x037FE9 продолжает выполнять алгоритм Else, хотя должен выполнять Then и так пока время не истечёт.
Если цвет во время запуска отличается от 0x037FE9 то производятся действия Else, даже после того как цвет становится 0x037FE9, и так пока время не истечёт.
Примечания:
Подскажите пожалуйста в чём ошибка в скрипте.
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Что это за конструкция?
Код:
Until $i = PixelGetColor(1044, 750) <> 0x037FE9
 
Автор
К

Кайгородов В. Ю.

В универе только TurboBASIC изучал и то забыл уже
Сообщения
25
Репутация
0
Код:
Until $i = PixelGetColor(1044, 750) <> 0x037FE9[\AutoIt]
Значит когда выполнится условие: "в точке с координатами (1044, 750) цвет не 0x037FE9" цикл заканчивается.
А что не правильно, на BASIC так условие неравенства было.
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Кайгородов В. Ю.
Еще вариант. Тестируй.
Код:
$begin = TimerInit()
$timeint = 5000
TimerDiff($begin)
$x = 0x037FE9
	
While TimerDiff($begin) < 15000
	Sleep(100)
	If PixelGetColor(1044, 750) = $x Then
		Click_1()
	Else
		Click_2()
	EndIf	
WEnd
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MsgBox(64, "Инфо", "Время работы цикла " & TimerDiff($begin) & " истекло")

Func Click_1()
	MouseClick("primary", 800, 100, 1, 0)
	Sleep (150)	
	MouseClick("primary", 875, 1006, 1, 0)
	Sleep (550)		
EndFunc

Func Click_2()
	MouseClick("primary", 800, 800, 1, 0)
	Sleep (150)	
	MouseClick("primary", 1159, 422, 1, 0)
	Sleep (550)
EndFunc
 
Автор
К

Кайгородов В. Ю.

В универе только TurboBASIC изучал и то забыл уже
Сообщения
25
Репутация
0
Так работает, интересное решение часть кода называется функцией, возьму на вооружение.
Спасибо Yuriy!!!
Можно попробовать добавить цикл внутрь функции.
Вообще задача чтоб прекращал кликать сразу как закончилось время или цикл завершался после изменения цвета.

Нашёл!!!! :laugh: Вот рабочий скрипт:
Код:
$begin = TimerInit()
$timeint = 5000
TimerDiff($begin)
$x = 0x037FE9
    
While 1
    Sleep(100)
    If PixelGetColor(1044, 750) = $x Then
        Click_1()
    Else
        Click_2()
    EndIf   
WEnd
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MsgBox(64, "Инфо", "Время работы цикла " & TimerDiff($begin) & " истекло")

Func Click_1()
Do
    If TimerDiff($begin) > $timeint Then ExitLoop
        MouseClick("primary", 800, 100, 1, 0)
        Sleep ( '150' )
    If TimerDiff($begin) > $timeint Then ExitLoop
        MouseClick("primary", 895, 1006, 1, 0)
        Sleep ( '550' )
Until PixelGetColor(1044, 750) <> 0x037FE9
EndFunc

Func Click_2()
Do
    If TimerDiff($begin) > $timeint Then ExitLoop
        MouseClick("primary", 800, 800, 1, 0)
        Sleep ( '150' )
    If TimerDiff($begin) > $timeint Then ExitLoop
        MouseClick("primary", 1189, 8, 1, 0)
        Sleep ( '550' )
Until PixelGetColor(1044, 750) = 0x037FE9
EndFunc

Оказывается надо было "i=" убрать.
 
Верх