Что нового

Организация цикла

vlad

Новичок
Сообщения
2
Репутация
0
Здравствуйте. Я немножко нуб еще. Подскажите схему пожалуйста. Как можно организовать правильно цикл. Вот по такому принципу:

первая_Функция()
Если успех - выполняем действие завершения цикла
Если нет, то далее идём - вторая_Функция()
Если успех - выполняем действие завершения цикла
Если нет, то далее идём - третья_Функция()
Если успех - выполняем действие завершения цикла
Если нет, то далее идём - четвертая_Функция()
Если успех - выполняем действие завершения цикла

Если нет, то далее идём первая_Функция() -
повторить 2 раза
Если успех - выполняем действие завершения цикла
Если нет, то далее идём - вторая_Функция()
- повторить 2 раза
Если успех - выполняем действие завершения цикла
Если нет, то далее идём - третья_Функция()
- повторить 2 раза
Если успех - выполняем действие завершения цикла
Если нет, то далее идём - четвертая_Функция()
- повторить 2 раза
Если успех - выполняем действие завершения цикла

Если нет, то далее идём первая_Функция() -
повторить 3 раза
Если успех - выполняем действие завершения цикла
Если нет, то далее идём - вторая_Функция()
- повторить 3 раза
Если успех - выполняем действие завершения цикла
Если нет, то далее идём - третья_Функция()
- повторить 3 раза
Если успех - выполняем действие завершения цикла
Если нет, то далее идём - четвертая_Функция()
- повторить 3 раза
Если успех - выполняем действие завершения цикла

И так далее...повторить 4 раза...повторить 5 раз...пока не выполнится результат
 
Последнее редактирование:

hedji

Продвинутый
Сообщения
406
Репутация
84
Лучше приложите пример скрипта, что именно вы пытаетесь сделать.
Не понятно зачем вызывать 1ю функцию 3-4 раза подряд.
Если задача выполнять функции подряд, пока не будет результата, то можно так:
Код:
$check = 1

While $check = 1
    $check = _one()
    If $check = 0 Then
        ExitLoop
    EndIf
    $check = _two()
    If $check = 0 Then
        ExitLoop
    EndIf
WEnd

Func _one()
    Return 0
EndFunc

Func _two()
    Return 0
EndFunc
 
Автор
vlad

vlad

Новичок
Сообщения
2
Репутация
0
Благодарю за ответ)
Вообщем проблему эту я решил с горем пополам. Покубатурил конечно изрядно. Вроде работает как мне нужно)
Но опять беда у меня. Не знаю как сделать еще один хитрый цикл. Как то нужно включить умный массив наверно я думаю, чтобы введение его значения определяло число повторов циклов в программе. Далее доходило до последнего и вновь повторяло с начала вновь и вновь.
Вообщем суть работы скрипта по задумке моей такая: идет запуск одного приложения под ID#1, далее выполняются общие действия скрипта и функции работы скрипта завершаются, а потом нужно все это дело повторить с начала, но для приложения под ID#2. И так до того значение которое будет указано в настройках GUI.
Вот строка где нужно менять ID - Run('C:\Nox\bin\Nox.exe -clone:nox_0 -startPackage:androidgames')
Цикл скрипта будет работать с окном nox_0, открывая его, далее отрабатывать его, закрывать и переходить к nox_1, потом к nox_2, потом к nox_3, потом к nox_4, потом к nox_5, потом к nox_6 и так далее до значения, которое будет указано. И когда скрипт переберет это все дело до последнего значения, ему нужно будет снова все повторить сначала. И так по кругу до бесконечности.
Если можно, то просто шаблон бы какой-нибудь посмотреть, покубатурю, может что-то для себя присоединю.
Я дуб. извините. Но хочу понять немножко программную работу.
Вот код, который я смог сочинить. Идея в нем на один проход цикла. Это для примера.
Код:
#include <GUIConstantsEx.au3>
#include <ComboConstants.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
GUICreate("Auto-Bot", -1, -1, -1, -1, $WS_OVERLAPPEDWINDOW)
GUISetBkColor(0xFFFC91)
GUISetFont(12, 700, 2, "Arial")
$SaveINI = @ScriptDir & '\Settings.ini'
$Wind="[CLASS:Qt5QWindowIcon]"
$Check1 = GUICtrlCreateCheckbox(" Выполнение действия #1", 20, 20, 350, 20)
$Check2 = GUICtrlCreateCheckbox(" Выполнение действия #2", 20, 60, 350, 20)
$Input1 = GUICtrlCreateInput('', 330, 150, 50, 25, $WS_BORDER)
$Combo1 = GUICtrlCreateCombo("", 20, 90, 170, 150, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
$Combo2 = GUICtrlCreateCombo("", 205, 90, 175, 150, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
$Button_1 = GUICtrlCreateButton("Старт", 260, 350, 120)
$Button_2 = GUICtrlCreateButton("Сохранить", 20, 350, 120)
GUICtrlSetData($Combo1, "Выбрать ресурс|Одно|Второе|Третье|Четвёртое|Пятое", IniRead($SaveINI, "Options", "Combo1", "Выбрать ресурс"))
GUICtrlSetData($Combo2, "Выбрать уровень|1|2|3|4|5|6", IniRead($SaveINI, "Options", "Combo2", "Выбрать уровень"))
GUICtrlSetData($Input1, IniRead($SaveINI, "Options", "Input1", "5"))
GUICtrlCreateLabel('Указать количество значения nox_', 20, 150, 300, 20, $SS_LEFT)
If IniRead(@ScriptDir & '\Settings.ini', 'Options', 'Check1', '') = 1 Then GUICtrlSetState($Check1, 1)
If IniRead(@ScriptDir & '\Settings.ini', 'Options', 'Check2', '') = 1 Then GUICtrlSetState($Check2, 1)
If IniRead(@ScriptDir & '\Settings.ini', 'Options', 'Combo1', '') = 1 Then GUICtrlSetState($Combo1, 1)
If IniRead(@ScriptDir & '\Settings.ini', 'Options', 'Combo2', '') = 1 Then GUICtrlSetState($Combo2, 1)
If IniRead(@ScriptDir & '\Settings.ini', 'Options', 'Input1', '') = 1 Then GUICtrlSetState($Input1, 1)
GUISetState(@SW_SHOW)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
Case $Button_2
IniWrite(@ScriptDir & '\Settings.ini', 'Options', 'Check1', GUICtrlRead($Check1))
IniWrite(@ScriptDir & '\Settings.ini', 'Options', 'Check2', GUICtrlRead($Check2))
IniWrite(@ScriptDir & '\Settings.ini', 'Options', 'Combo1', GUICtrlRead($Combo1))
IniWrite(@ScriptDir & '\Settings.ini', 'Options', 'Combo2', GUICtrlRead($Combo2))
IniWrite(@ScriptDir & '\Settings.ini', 'Options', 'Input1', GUICtrlRead($Input1))
MsgBox(4096, 'Настройки', 'Успешно сохранено!')
Case $Button_1
GUISetState(@SW_HIDE)
If WinExists("[CLASS:Qt5QWindowIcon]") Then
Sleep(1000)
WinActivate($Wind, "")
Else
Run('C:\Nox\bin\Nox.exe -clone:nox_0 -startPackage:com.androidgames') ;
Sleep(1000)
WinActivate($Wind, "")
Sleep(60000)
WinMove($Wind, "", 0, 0, 253, 477)
Sleep(1000)
ControlClick($Wind, "", "", "", 1, 10, 10)
EndIf
While 1
$awhitePos = PixelSearch(42, 34, 53, 47, 0x49210A, 10,  1, $Wind)
If @error Then
ControlSend ($Wind, "", "", "{ESC}")
Sleep(5000)
Else
ExitLoop
EndIf
WEnd
If GUICtrlRead($Check1)=1 Then
nomer_1()
Else
Sleep(500)
EndIf
If GUICtrlRead($Check2)=1 Then
nomer_2()
WinClose($Wind)
Exit
Else
Sleep(500)
WinClose($Wind)
Exit
EndIf
EndSwitch
WEnd
Func nomer_1()
$checksum = PixelChecksum(95, 310, 110, 323, 1, $Wind)
While $checksum = PixelChecksum(95, 310, 110, 323, 1, $Wind)
Sleep(1000)
ControlClick($Wind, "", "", "", 1, 75, 314)
WEnd
EndFunc
Func nomer_2()
WinMove($Wind, "", 10, 10, 253, 477)
Sleep(500)
ControlClick($Wind, "", "", "", 1, 10, 10)
EndFunc
 
Верх