Автокликер Clickermann :: Форум

Основной раздел => Общие вопросы => Topic started by: iggi on December 12, 2018, 12:40:26 AM

Title: Рандомный вызов подпрограмм без повторов
Post by: iggi on December 12, 2018, 12:40:26 AM
Здравствуйте.
Подскажите, как вызвать 21 подпрограмму в случайном порядке и при этом без повторов?
Поиском нашел похожий вопрос с вот таким скриптом (http://crapware.aidf.org/forum/index.php?topic=155.msg1748#msg1748):
Code: (clickermann) [Select]
$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) вызывать подпрограммы.
Попробовал вот такой вариант, но он не работает:
Code: (clickermann) [Select]
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
Title: Re: Рандомный вызов подпрограмм без повторов
Post by: Oraven on December 12, 2018, 08:58:16 AM
Имя вызова подпрограммы нельзя сформировать по ходу скрипта

Напиши за место LOGWRITE ("Подпрограмма 1")... вызовы твоих подпрограмм

Code: (clickermann) [Select]
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
Title: Re: Рандомный вызов подпрограмм без повторов
Post by: iggi on December 12, 2018, 11:25:02 AM
Андрей, спасибо!