Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Topics - Форвард

Pages: [1]
1
Общие вопросы / Применение GOTO
« on: February 26, 2013, 08:46:25 AM »
Хотел назвать тему - нубское применение нубского GOTO нубскими нубами,
но все же решив, что в более общую тему могут обратиться разные люди дал общее название.

Дано:
кликер 4.7 SE, Win7

Предистория:
Не зная, что в кликере 4.7 отменен переход GOTO по строкам родил "шедевр":

Code: (clickermann) [Select]
SUB(timer1)//
GOTO(RNDFROM(6,11,16,21,26,31,36,41,46,51,56,61)
// 6 строка
WAITMS(RND(3000,6000))
LCLICK(RND(),RND())
WAITMS(RND(1000,2000))
GOTO(70)
// 11 строка
WAITMS(RND(3000,6000))
LCLICK(RND(),RND())
WAITMS(RND(1000,2000))
GOTO(70)
---------удалил повторы внутри САБа чтобы тут выложить---------
//61 строка
WAITMS(RND(3000,6000))
LCLICK(RND(),RND())
WAITMS(RND(1000,2000))
GOTO(70)
 // 70 строка
END_SUB

Этот "шедевр" в оконном режиме кликал не по одному единственному клику внутри САБа как надо было, а по всем подряд до конца САба до самого ЭНД_САБ

История:

Вчера внес в "шедевр"  исправления так как узнал что кликер 4.7 не работает по строкам.

Code: (clickermann) [Select]
SUB(timer1)// Блок выбора ... для таймера
GOTO(RND(3,16)) // тут убрал RNDFROM с перечислением
3://
WAITMS(RND(3000,6000))
LCLICK(RND(),RND())
WAITMS(RND(1000,2000))
GOTO(19)
4://
WAITMS(RND(3000,6000))
LCLICK(RND(),RND())
WAITMS(RND(1000,2000))
GOTO(19)
----------удалил повторы внутри САБа чтобы тут выложить-----------
16://Пройти все
WAITMS(RND(3000,6000))
GOSUB(luna2)
WAITMS(RND(1000,2000))
GOTO(19)
17: запасная
18: запасная
19://
END_SUB

Проблема:

Второй исправленый САБ теперь кликает при вызове этого САБа только по первой метке 3:
и все - никакого рандома нет и не переходит на другие метки.

Вру - на 19: метку как то переходит!!! На другие не хочет....

Повторюсь - все это в оконном режиме.
Кликать надо в разные места.... потому и столько ЛКЛИКов...
И прыгать через GOTO надо только внутри САБа.

Осталось попробовать вернуть GOTO(RNDFROM(с перечислением всех меток))
Но не уверен что поможет... но проверю...

И до кучи -
в другом месте этого же кода в оконном режиме и не в САБе:
GOTO(RNDFROM(20,21,22)
давало прыжок только на 20 метку (и тут и в начале только первая цифра срабатывает)
но к этой строке статистики обращений мало, а к описанным в начале много.

2
Задача вроде не сложная но увы :
Надо перемешать ряд цифр или слов в произвольном порядке
чтобы ни одно не повторялось и не потерялось.

Зачем:
Есть допустим 20 блоков кода которые должны быть выполнены в произвольной последовательности и причем все (или определенное число) не повторяясь.

Функцию такую не нашел.
А goto(rndfrom(1,2,3,......,20) или gosub(rndfrom(a,b,c,.....k) дает только одно значение. И если повторять 20 раз, то будут не нужные повторы.

Может есть простое решение?

Пока придумалось решение через опу - через запись в 2 файла.
И пробовать прицепить фильтр....

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

В первый записывается вначале все 20 цифр.
STRWRITELN("volni.txt","1,2,3,4,5,...20",0)

Во второй записывается одна циферка увы:
STRWRITELN("volni1.txt",RNDFROM(1,2,3,4,5,...20),0)

И после фильтром была идея исключать каждую последнюю циферку из основной последовательности "volni.txt"
STRFILTER("string", "set", 0)
Но как это связать не понял так  как в справке написано - фильтр возвращает цифру или значение... куда возращает??? как это виртуальное возвращает хз куда увязать с продолжением исключения основной последовательности....

И уже уменьшенный на одну записанную циферку список вставлять в
STRWRITELN("volni.txt","......

Далее опять полученную следующую рандомную циферку вставить в
STRWRITELN("volni1.txt",RNDFROM(

И опять фильтр
и тд... по кругу пока все 20 цифр не кончатся... и будет щастье....

в итоге должен появиться файлик volni1.txt со столбиком (и его можно перевести в строку) из 20  циферок в уже рандомном порядке которые можно считать из него командой чтения нужной строки из файла... и задача решена.... по идее...

но вот пока не понял и не прочуствовал термин "возвращает"
и как пользоваться соответственно фильтром если он конечно поможет
Через IF и переменную????

другого варианта пока не вижу как просто взять перемешать цифры....
может кто сталкивался с похожим... или натолкнет на мыслю...
заранее спасибо....

Ну можно конечно еще написать и вставить 400 строк (20х20=400) с рандомным неповторяющимся расположением цифр )))) и уже 400 вариантов выбирать через GOSUB(RNDFROM(... но это совсем по американски будет.....
хотя сам код уехал так за 10.000 строк и еще +400 с небольшим не слишком удлиннит....

Pages: [1]