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

Основной раздел => Общие вопросы => Topic started by: Fazi on May 30, 2020, 02:05:16 PM

Title: Рандомный клик по заданным координатам.
Post by: Fazi on May 30, 2020, 02:05:16 PM
Всем хай ;)
Подскажите плиз кто знает, как сделать чтобы кликер делал рандомный клик по одной из трёх заданных координат.
Code: (clickermann) [Select]
LCLICK(164,546)  // 16119285
LCLICK(455,551)  // 16777215
LCLICK(853,560)  // 16777215
halt
Title: Re: Рандомный клик по заданным координатам.
Post by: Vint on May 30, 2020, 02:18:17 PM
Code: (clickermann) [Select]
SWITCH(RND(1,3))
    CASE(1)
        LCLICK(164,546)
    CASE(2)
        LCLICK(455,551)
    CASE(3)
        LCLICK(853,560)
END_SWITCH
Title: Re: Рандомный клик по заданным координатам.
Post by: Fazi on May 30, 2020, 02:20:32 PM
Благодарствую:)
Title: Re: Рандомный клик по заданным координатам.
Post by: Oraven on May 30, 2020, 09:10:37 PM
Code: (clickermann) [Select]
SWITCH(RND(1,3))
    CASE(1)
        LCLICK(164,546)
    CASE(2)
        LCLICK(455,551)
    CASE(3)
        LCLICK(853,560)
END_SWITCH

Не стоит так писать. Дело в том что при каждой проверки значения CASE будет срабатывать RND

Так правильно.
Code: (clickermann) [Select]
$r = RND(1,3)
SWITCH($r)
   CASE(1)
      LCLICK(164,546)
   CASE(2)
      LCLICK(455,551)
   CASE(3)
      LCLICK(853,560)
END_SWITCH
Title: Re: Рандомный клик по заданным координатам.
Post by: Vint on June 01, 2020, 02:29:23 PM
Не стоит так писать. Дело в том что при каждой проверки значения CASE будет срабатывать RND

Так правильно.
Code: (clickermann) [Select]
$r = RND(1,3)
SWITCH($r)
   CASE(1)
      LCLICK(164,546)
   CASE(2)
      LCLICK(455,551)
   CASE(3)
      LCLICK(853,560)
END_SWITCH

С чего это? Откуда такая информация? Нормальныя реализация при встрече SWITCH вычисляет выражение, а при всрече CASE идёт сравнение. Зачем каждый раз вычислять?
Title: Re: Рандомный клик по заданным координатам.
Post by: Vint on June 01, 2020, 03:04:40 PM
Хе, хе. Заинтересовался вопросом. Набросал тест на коленке.

Свитч на 1000 значений. Замер времени выполнения на 20 проходах с вычислением среднего.

"Лизуртат":
Quote
// RND в условии SWITCH
14:53:49 время выполнения : 3 мс
14:53:49 время выполнения : 180 мс
14:53:49 время выполнения : 5 мс
14:53:49 время выполнения : 189 мс
14:53:49 время выполнения : 112 мс
14:53:49 время выполнения : 19 мс
14:53:49 время выполнения : 178 мс
14:53:50 время выполнения : 153 мс
14:53:50 время выполнения : 158 мс
14:53:50 время выполнения : 10 мс
14:53:50 время выполнения : 38 мс
14:53:50 время выполнения : 42 мс
14:53:50 время выполнения : 32 мс
14:53:50 время выполнения : 23 мс
14:53:50 время выполнения : 10 мс
14:53:50 время выполнения : 45 мс
14:53:50 время выполнения : 22 мс
14:53:50 время выполнения : 181 мс
14:53:50 время выполнения : 181 мс
14:53:50 время выполнения : 76 мс
14:53:50 Среднее время за 20 проходов: 82.85 мс

Quote
//RND отдельно
14:53:06 время выполнения : 6 мс
14:53:06 время выполнения : 116 мс
14:53:06 время выполнения : 165 мс
14:53:06 время выполнения : 13 мс
14:53:06 время выполнения : 12 мс
14:53:06 время выполнения : 76 мс
14:53:06 время выполнения : 109 мс
14:53:07 время выполнения : 124 мс
14:53:07 время выполнения : 106 мс
14:53:07 время выполнения : 141 мс
14:53:07 время выполнения : 72 мс
14:53:07 время выполнения : 24 мс
14:53:07 время выполнения : 105 мс
14:53:07 время выполнения : 53 мс
14:53:07 время выполнения : 99 мс
14:53:07 время выполнения : 115 мс
14:53:07 время выполнения : 128 мс
14:53:07 время выполнения : 59 мс
14:53:07 время выполнения : 30 мс
14:53:08 время выполнения : 105 мс
14:53:08 Среднее время за 20 проходов: 82.9 мс
Вот прям не выбирал результаты. В других запусках разброс среднего был до 125 мс, но и там и там!
Title: Re: Рандомный клик по заданным координатам.
Post by: Oraven on June 01, 2020, 09:21:21 PM
С чего это? Откуда такая информация? Нормальныя реализация при встрече SWITCH вычисляет выражение, а при всрече CASE идёт сравнение. Зачем каждый раз вычислять?

Вот простой пример
Code: (clickermann) [Select]
SWITCH(RND(1,3))
   CASE(1)
      LOGWRITE ("1")
   CASE(2)
      LOGWRITE ("2")
   CASE(3)
      LOGWRITE ("3")
END_SWITCH
HALT

При некоторых запусках запись в лог не производится. Значит ни одно значение свитча не было верным.
Title: Re: Рандомный клик по заданным координатам.
Post by: Vint on June 02, 2020, 11:36:32 AM
Это значит ошибка прямых вычислений в свиче, в частности RND. Но это ни как не говорит о том, что значение вычисляется каждый раз на каждом CASE. Об этом говорит и показанный выше тест.
Здесь проблема в другом.

Вот такие прямые вычисления в свиче проходят нормально
Code: (clickermann) [Select]
FOR($i=0, $i < 30)
    SWITCH($i - INT($i/2)*2)
        CASE(0)
            LOGWRITE("0")
        CASE(1)
            LOGWRITE("1")
        DEFAULT
            LOGWRITE("Err")
    END_SWITCH
END_CYC
HALT

Результат:
Quote
11:20:48 0
11:20:48 1
11:20:48 0
11:20:48 1
...

Предварительный вывод (возможно ошибочный). Большинство функций RND - выдающих целочисленные значения или из списка, базируются на базовой функции выдающей значения в диапазоне 0 <= N <= 1 в виде числа с плавающей точкой. А потом уже это число переводится в нужный диапазон от и до с переводом в целое.
При приравнивании результата RND(1,3) переменной, перевод в целое осуществляется правильно.
В свитче, возможно проблемы с округлением и получается что-то вида 2.00000000001 что не равно целым 2 в Case когда значения 0 <= N <= 1 близки к переходным.
Может всё, что я написал - полная шляпа  :-\