Author Topic: Рандомное проигрывание файлов  (Read 2852 times)

0 Members and 1 Guest are viewing this topic.

SimplY

  • Активный участник
  • ***
  • Posts: 125
    • View Profile
Рандомное проигрывание файлов
« on: February 09, 2023, 01:35:29 PM »
Всем добрый день!

Не могу выстроить код.

Задача: Нужно, чтобы кликер в рандомном варианте проиграл звуковые файлы wav, но столько раз, сколько этих файлов и каждый файл только один раз!

Code: (clickermann) [Select]
SOUND("Молоко.wav")
Code: (clickermann) [Select]
SOUND("Сметана.wav")
Code: (clickermann) [Select]
SOUND("Творог.wav")
Code: (clickermann) [Select]
SOUND("Хлеб.wav")
Code: (clickermann) [Select]
SOUND("Сливки.wav")
Например:
Сметана, Хлеб, Сливки, Творог, Молоко

Второй запуск:
Сливки, Творог, Сметана, Хлеб, Молоко

И прочее...
Строго 5 раз (коли их 5) и Сметана нигде дважды не повторяется. Как и хлеб и прочее.

Пробовал методом, когда создается текстовый файл, затем удаляется строка, которая проиграла и так, пока не закончатся строки. Не получилось.

Может как-то по-другому надо?

Помимо проигрывания wav файлов, может дополниться скриптом. Например, сначала рандомно одна часть скрипта, затем вторая и прочее.

Заранее спасибо!
« Last Edit: February 09, 2023, 01:41:02 PM by SimplY »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Рандомное проигрывание файлов
« Reply #1 on: February 09, 2023, 02:25:07 PM »
Code: (clickermann) [Select]
#name "Случайные элементы без повторений"
// Author: Vint
// Version: 0.1 (19.01.2021)
// Скрипт для Clickermann v4.13.014

STRSEPARATE("1,три,четыреста четыре,8,9,15", ",", $data) // список значений для выбора
WHILE(ARRSIZE($data) > 0)
    $ind = RND(0, ARRSIZE($data)-1)
    $result = $data[$ind]
    LOGWRITE("Выбранный элемент: ", $result)
    // делаешь с элементом $result то, что тебе нужно
    $data[$ind] = $data[ARRSIZE($data) - 1]
    $temp = ARRPOP($data)
END_CYC

Подстраивай под свои соунды.


SimplY

  • Активный участник
  • ***
  • Posts: 125
    • View Profile
Re: Рандомное проигрывание файлов
« Reply #2 on: February 14, 2023, 06:21:53 AM »
Code: (clickermann) [Select]
#name "Случайные элементы без повторений"
// Author: Vint
// Version: 0.1 (19.01.2021)
// Скрипт для Clickermann v4.13.014

STRSEPARATE("1,три,четыреста четыре,8,9,15", ",", $data) // список значений для выбора
WHILE(ARRSIZE($data) > 0)
    $ind = RND(0, ARRSIZE($data)-1)
    $result = $data[$ind]
    LOGWRITE("Выбранный элемент: ", $result)
    // делаешь с элементом $result то, что тебе нужно
    $data[$ind] = $data[ARRSIZE($data) - 1]
    $temp = ARRPOP($data)
END_CYC

Подстраивай под свои соунды.
Спасибо!!!

SimplY

  • Активный участник
  • ***
  • Posts: 125
    • View Profile
Re: Рандомное проигрывание файлов
« Reply #3 on: February 14, 2023, 06:26:38 AM »
Друзья, Не могу понять!

Должно быть так:
Кликер производит Хлеб или Сметана или Молоко, дальше я либо нажимаю на Ctrl, тогда повторяется с записью в текстовый файл, либо на ALT, тогда следующий вариант.

На практике после нажатия на ALT слова иногда повторяются.

Code: (clickermann) [Select]
#name "Случайные элементы без повторений"
// Author: Vint
// Version: 0.1 (19.01.2021)
// Скрипт для Clickermann v4.13.014

WAITMS(500)
THREAD(sec, 0)
   WAIT(3)
   BEEP(700,100)
   WAIT(1000)
END_THREAD
WAITMS(20)
STRSEPARATE("1,2,3", ",", $data) // список значений для выбора
WHILE(ARRSIZE($data) > 0)
   $ind = RND(0, ARRSIZE($data)-1)
   $result = $data[$ind]
   $data[$ind] = $data[ARRSIZE($data) - 1]
   $temp = ARRPOP($data)
END_CYC
WAITMS(500)
skip:
WAITMS(20)
$ress = ARRPOP($result)
LOGWRITE ($ress)

IF($ress = 1)
   FOR($a=0,$a<15)
      WAITMS(200)
      SOUND("Сметана.wav")
      SETTHREAD (sec, 1)
      $check = 0
      WHILE($check = 0)
         IF(ISKEYDOWN(#CTRL)=1)
            WHILE(ISKEYDOWN(#CTRL)=1)
            END_CYC
            $check = 1
         ELSE
            IF(ISKEYDOWN(#ALT)=1)
               WHILE(ISKEYDOWN(#ALT)=1)
               END_CYC
               $check = 2
            ELSE
               WAITMS(20)
            END_IF
         END_IF
      END_CYC
      IF($check = 1) // Продолжение скрипта (вариант 1)
         WAITMS(20)
         TFWRITE("input.txt", "Сметана")
         WAITMS(20)
         SETTHREAD (sec, 2)
      END_IF
      IF($check = 2) // Продолжение скрипта (вариант 2)
         WAITMS(20)
         SETTHREAD (sec, 2)
         WAITMS(20)
         GOTO(skip)
      END_IF
   END_CYC
END_IF
IF($ress = 2)
   FOR($a=0,$a<15)
      WAITMS(200)
      SOUND("Хлеб.wav")
      SETTHREAD (sec, 1)
      $check = 0
      WHILE($check = 0)
         IF(ISKEYDOWN(#CTRL)=1)
            WHILE(ISKEYDOWN(#CTRL)=1)
            END_CYC
            $check = 1
         ELSE
            IF(ISKEYDOWN(#ALT)=1)
               WHILE(ISKEYDOWN(#ALT)=1)
               END_CYC
               $check = 2
            ELSE
               WAITMS(20)
            END_IF
         END_IF
      END_CYC
      IF($check = 1) // Продолжение скрипта (вариант 1)
         WAITMS(20)
         TFWRITE("input.txt", "Хлеб")
         WAITMS(20)
         SETTHREAD (sec, 2)
      END_IF
      IF($check = 2) // Продолжение скрипта (вариант 2)
         WAITMS(20)
         SETTHREAD (sec, 2)
         WAITMS(20)
         GOTO(skip)
      END_IF
   END_CYC
END_IF
IF($ress = 3)
   $varr = RND(1,5)
   FOR($a=0,$a<15)
      WAITMS(200)
      IF($varr = 1)
         SOUND("Молоко2.wav")
      END_IF
      IF($varr = 2)
         SOUND("Молоко.wav")
      END_IF
      SETTHREAD (sec, 1)
      $check = 0
      WHILE($check = 0)
         IF(ISKEYDOWN(#CTRL)=1)
            WHILE(ISKEYDOWN(#CTRL)=1)
            END_CYC
            $check = 1
         ELSE
            IF(ISKEYDOWN(#ALT)=1)
               WHILE(ISKEYDOWN(#ALT)=1)
               END_CYC
               $check = 2
            ELSE
               WAITMS(20)
            END_IF
         END_IF
      END_CYC
      IF($check = 1) // Продолжение скрипта (вариант 1)
         WAITMS(20)
         TFWRITE("input.txt", "Молоко")
         WAITMS(20)
         SETTHREAD (sec, 2)
      END_IF
      IF($check = 2) // Продолжение скрипта (вариант 2)
         WAITMS(20)
         SETTHREAD (sec, 2)
         WAITMS(20)
         GOTO(skip)
      END_IF
   END_CYC
END_IF


IF($ress = "")
   $fin_oth = TFCOUNT("input.txt")
   $th = $_time_h
   $tm = $_time_m
   $ts = $_time_s
   $dd = $_date_d
   $dm = $_date_m
   $dy = $_date_y
   
   IF(STRLEN($th)<2)
      $th = STRCONCAT ("0", $th)
   END_IF
   IF(STRLEN($tm)<2)
      $tm = STRCONCAT ("0", $tm)
   END_IF
   IF(STRLEN($ts)<2)
      $ts = STRCONCAT ("0", $ts)
   END_IF
   IF(STRLEN($dd)<2)
      $dd = STRCONCAT ("0", $dd)
   END_IF
   IF(STRLEN($dm)<2)
      $dm = STRCONCAT ("0", $dm)
   END_IF
   IF(STRLEN($dy)<2)
      $dy = STRCONCAT ("0", $dy)
   END_IF
   
   #DEFINE @CRLF: CHAR(13), CHAR(10)
   #DEFINE @TAB: CHAR(9)
   $fin = STRCONCAT($dd,".",$dm,".",$dy, @TAB, $th,":",$tm, @TAB, $fin_oth)
   WAITMS(20)
   TFWRITE("Результаты.txt", $fin)
   WAITMS(200)
   SOUND("Концовка.wav")
   WAIT
ELSE
   WAITMS(20)
   GOTO(skip)
END_IF

В чем я недоглядел?
Подозреваю, что не там стоит метка SKIP, но я менял ее местами и не получается.

kiril

  • Активный участник
  • ***
  • Posts: 106
    • View Profile
Вы из цикла выходите без завершения его работы, переходя к метке.
Именно, как описываете и должна проявляться такая ошибка.

SimplY

  • Активный участник
  • ***
  • Posts: 125
    • View Profile
Вы из цикла выходите без завершения его работы, переходя к метке.
Именно, как описываете и должна проявляться такая ошибка.
В других скриптах с этим проблем не было.
Как тогда завершить цикл, чтобы при нажатии на клавишу вернуться в нужное место?

kiril

  • Активный участник
  • ***
  • Posts: 106
    • View Profile
Re: Рандомное проигрывание по жизни...
« Reply #6 on: February 14, 2023, 11:38:45 AM »
Code: (clickermann) [Select]
#name "Случайные элементы без повторений"
// Author: Vint
// Version: 2.1 (14.02.2023)
// Скрипт для Clickermann v4.13.014

WAITMS(500)
THREAD(sec, 0)
   WAIT(3)
   BEEP(700,100)
   WAIT(1000)
END_THREAD
WAITMS(20)
STRSEPARATE("1,2,3", ",", $data) // список значений для выбора
WHILE(ARRSIZE($data) > 0)
   $ind = RND(0, ARRSIZE($data)-1)
   $result = $data[$ind]
   $data[$ind] = $data[ARRSIZE($data) - 1]
   $temp = ARRPOP($data)
END_CYC
WAITMS(500)
skip:
WAITMS(20)
$ress = ARRPOP($result)
LOGWRITE ($ress)

IF($ress = 1)
   FOR($a=0,$a<15)
      WAITMS(200)
      SOUND("Сметана.wav")
      SETTHREAD (sec, 1)
      $check = 0
      WHILE($check = 0)
         IF(ISKEYDOWN(#CTRL)=1)
            WHILE(ISKEYDOWN(#CTRL)=1)
            END_CYC
            $check = 1
            $a=20
         ELSE
            IF(ISKEYDOWN(#ALT)=1)
               WHILE(ISKEYDOWN(#ALT)=1)
               END_CYC
               $check = 2
               $a=20
            ELSE
               WAITMS(20)
            END_IF
         END_IF
      END_CYC
   END_CYC
       IF($check = 1) // Продолжение скрипта (вариант 1)
         WAITMS(20)
         TFWRITE("input.txt", "Сметана")
         WAITMS(20)
         SETTHREAD (sec, 2)
      END_IF
      IF($check = 2) // Продолжение скрипта (вариант 2)
         WAITMS(20)
         SETTHREAD (sec, 2)
         WAITMS(20)
         GOTO(skip)
      END_IF
END_IF
IF($ress = 2)
   FOR($a=0,$a<15)
      WAITMS(200)
      SOUND("Хлеб.wav")
      SETTHREAD (sec, 1)
      $check = 0
      WHILE($check = 0)
         IF(ISKEYDOWN(#CTRL)=1)
            WHILE(ISKEYDOWN(#CTRL)=1)
            END_CYC
            $check = 1
            $a=20
         ELSE
            IF(ISKEYDOWN(#ALT)=1)
               WHILE(ISKEYDOWN(#ALT)=1)
               END_CYC
               $check = 2
               $a=20
            ELSE
               WAITMS(20)
            END_IF
         END_IF
      END_CYC
   END_CYC
   IF($check = 1) // Продолжение скрипта (вариант 1)
      WAITMS(20)
      TFWRITE("input.txt", "Хлеб")
      WAITMS(20)
      SETTHREAD (sec, 2)
   END_IF
   IF($check = 2) // Продолжение скрипта (вариант 2)
      WAITMS(20)
      SETTHREAD (sec, 2)
      WAITMS(20)
      GOTO(skip)
   END_IF
END_IF
IF($ress = 3)
   $varr = RND(1,5)
   FOR($a=0,$a<15)
      WAITMS(200)
      IF($varr = 1)
         SOUND("Молоко2.wav")
      END_IF
      IF($varr = 2)
         SOUND("Молоко.wav")
      END_IF
      SETTHREAD (sec, 1)
      $check = 0
      WHILE($check = 0)
         IF(ISKEYDOWN(#CTRL)=1)
            WHILE(ISKEYDOWN(#CTRL)=1)
            END_CYC
            $check = 1
            $a=20
         ELSE
            IF(ISKEYDOWN(#ALT)=1)
               WHILE(ISKEYDOWN(#ALT)=1)
               END_CYC
               $check = 2
               $a=20
            ELSE
               WAITMS(20)
            END_IF
         END_IF
      END_CYC
   END_CYC
     IF($check = 1) // Продолжение скрипта (вариант 1)
         WAITMS(20)
         TFWRITE("input.txt", "Молоко")
         WAITMS(20)
         SETTHREAD (sec, 2)
      END_IF
      IF($check = 2) // Продолжение скрипта (вариант 2)
         WAITMS(20)
         SETTHREAD (sec, 2)
         WAITMS(20)
         GOTO(skip)
      END_IF
END_IF


IF($ress = "")
   $fin_oth = TFCOUNT("input.txt")
   $th = $_time_h
   $tm = $_time_m
   $ts = $_time_s
   $dd = $_date_d
   $dm = $_date_m
   $dy = $_date_y
   
   IF(STRLEN($th)<2)
      $th = STRCONCAT ("0", $th)
   END_IF
   IF(STRLEN($tm)<2)
      $tm = STRCONCAT ("0", $tm)
   END_IF
   IF(STRLEN($ts)<2)
      $ts = STRCONCAT ("0", $ts)
   END_IF
   IF(STRLEN($dd)<2)
      $dd = STRCONCAT ("0", $dd)
   END_IF
   IF(STRLEN($dm)<2)
      $dm = STRCONCAT ("0", $dm)
   END_IF
   IF(STRLEN($dy)<2)
      $dy = STRCONCAT ("0", $dy)
   END_IF
   
   #DEFINE @CRLF: CHAR(13), CHAR(10)
   #DEFINE @TAB: CHAR(9)
   $fin = STRCONCAT($dd,".",$dm,".",$dy, @TAB, $th,":",$tm, @TAB, $fin_oth)
   WAITMS(20)
   TFWRITE("Результаты.txt", $fin)
   WAITMS(200)
   SOUND("Концовка.wav")
   WAIT
ELSE
   WAITMS(20)
   GOTO(skip)
END_IF