Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: iggi on December 12, 2018, 12:40:26 AM
-
Здравствуйте.
Подскажите, как вызвать 21 подпрограмму в случайном порядке и при этом без повторов?
Поиском нашел похожий вопрос с вот таким скриптом (http://crapware.aidf.org/forum/index.php?topic=155.msg1748#msg1748):
$r = "ABCDEFGHIJKLMNOPQWVXYZ"
$a = STRLEN($r)
FOR($c, $c < $a)
$f = STRCUT($r, RND(1, STRLEN($r)), 1)
IF(STRLEN($r) > 1)
$r = STRFILTER($r, $f, 0)
END_IF
LOGWRITE($f)
WAITMS(50)
END_CYC
Но не могу сообразить как его использовать чтобы вместо LOGWRITE($f) вызывать подпрограммы.
Попробовал вот такой вариант, но он не работает:
SUB(A)
//подпрограмма A
END_SUB
...
//и т.д. подпрограммы B-X
...
SUB(Y)
//подпрограмма Y
END_SUB
$r = "ABCDEFGHIJKLMNOPQWVXY"
$a = STRLEN($r)
FOR($c, $c < $a)
$f = STRCUT($r, RND(1, STRLEN($r)), 1)
IF(STRLEN($r) > 1)
$r = STRFILTER($r, $f, 0)
END_IF
STRCONCAT( $f,() ) // не работает - подпрограммы не вызываются
WAITMS(50)
END_CYC
-
Имя вызова подпрограммы нельзя сформировать по ходу скрипта
Напиши за место LOGWRITE ("Подпрограмма 1")... вызовы твоих подпрограмм
IF(ARRSIZE($ARR_R) = 0)
LOGWRITE ("Новый цикл")
FOR($ii=1,$ii<22)
ARRPUSH($ARR_R,$ii)
END_CYC
FOR($ii=ARRSIZE($ARR_R)-1,$ii>0,-1)
$jj = RND(0,$ii)
IF($ii ! $jj)
$tmp = $ARR_R[$jj]
$ARR_R[$jj] = $ARR_R[$ii]
$ARR_R[$ii] = $tmp
END_IF
END_CYC
END_IF
$r = ARRPOP($ARR_R)
SWITCH($r)
CASE(1)
LOGWRITE ("Подпрограмма 1")
CASE(2)
LOGWRITE ("Подпрограмма 2")
CASE(3)
LOGWRITE ("Подпрограмма 3")
CASE(4)
LOGWRITE ("Подпрограмма 4")
CASE(5)
LOGWRITE ("Подпрограмма 5")
CASE(6)
LOGWRITE ("Подпрограмма 6")
CASE(7)
LOGWRITE ("Подпрограмма 7")
CASE(8)
LOGWRITE ("Подпрограмма 8")
CASE(9)
LOGWRITE ("Подпрограмма 9")
CASE(10)
LOGWRITE ("Подпрограмма 10")
CASE(11)
LOGWRITE ("Подпрограмма 11")
CASE(12)
LOGWRITE ("Подпрограмма 12")
CASE(13)
LOGWRITE ("Подпрограмма 13")
CASE(14)
LOGWRITE ("Подпрограмма 14")
CASE(15)
LOGWRITE ("Подпрограмма 15")
CASE(16)
LOGWRITE ("Подпрограмма 16")
CASE(17)
LOGWRITE ("Подпрограмма 17")
CASE(18)
LOGWRITE ("Подпрограмма 18")
CASE(19)
LOGWRITE ("Подпрограмма 19")
CASE(20)
LOGWRITE ("Подпрограмма 20")
CASE(21)
LOGWRITE ("Подпрограмма 21")
END_SWITCH
-
Андрей, спасибо!