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

Основной раздел => Общие вопросы => Тема начата: Fazi от Май 30, 2020, 02:05:16 pm

Название: Рандомный клик по заданным координатам.
Отправлено: Fazi от Май 30, 2020, 02:05:16 pm
Всем хай ;)
Подскажите плиз кто знает, как сделать чтобы кликер делал рандомный клик по одной из трёх заданных координат.
Код: Clickermann
  1. LCLICK(164,546)  // 16119285
  2. LCLICK(455,551)  // 16777215
  3. LCLICK(853,560)  // 16777215
  4. halt
Название: Re: Рандомный клик по заданным координатам.
Отправлено: Vint от Май 30, 2020, 02:18:17 pm
Код: Clickermann
  1. SWITCH(RND(1,3))
  2.    CASE(1)
  3.        LCLICK(164,546)
  4.    CASE(2)
  5.        LCLICK(455,551)
  6.    CASE(3)
  7.        LCLICK(853,560)
  8. END_SWITCH
Название: Re: Рандомный клик по заданным координатам.
Отправлено: Fazi от Май 30, 2020, 02:20:32 pm
Благодарствую:)
Название: Re: Рандомный клик по заданным координатам.
Отправлено: Oraven от Май 30, 2020, 09:10:37 pm
Код: Clickermann
  1. SWITCH(RND(1,3))
  2.    CASE(1)
  3.        LCLICK(164,546)
  4.    CASE(2)
  5.        LCLICK(455,551)
  6.    CASE(3)
  7.        LCLICK(853,560)
  8. END_SWITCH

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

Так правильно.
Код: Clickermann
  1. $r = RND(1,3)
  2. SWITCH($r)
  3.   CASE(1)
  4.      LCLICK(164,546)
  5.   CASE(2)
  6.      LCLICK(455,551)
  7.   CASE(3)
  8.      LCLICK(853,560)
  9. END_SWITCH
Название: Re: Рандомный клик по заданным координатам.
Отправлено: Vint от Июнь 01, 2020, 02:29:23 pm
Не стоит так писать. Дело в том что при каждой проверки значения CASE будет срабатывать RND

Так правильно.
Код: Clickermann
  1. $r = RND(1,3)
  2. SWITCH($r)
  3.   CASE(1)
  4.      LCLICK(164,546)
  5.   CASE(2)
  6.      LCLICK(455,551)
  7.   CASE(3)
  8.      LCLICK(853,560)
  9. END_SWITCH

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

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

"Лизуртат":
Цитировать
// 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 мс

Цитировать
//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 мс, но и там и там!
Название: Re: Рандомный клик по заданным координатам.
Отправлено: Oraven от Июнь 01, 2020, 09:21:21 pm
С чего это? Откуда такая информация? Нормальныя реализация при встрече SWITCH вычисляет выражение, а при всрече CASE идёт сравнение. Зачем каждый раз вычислять?

Вот простой пример
Код: Clickermann
  1. SWITCH(RND(1,3))
  2.   CASE(1)
  3.      LOGWRITE ("1")
  4.   CASE(2)
  5.      LOGWRITE ("2")
  6.   CASE(3)
  7.      LOGWRITE ("3")
  8. END_SWITCH
  9. HALT

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

Вот такие прямые вычисления в свиче проходят нормально
Код: Clickermann
  1. FOR($i=0, $i < 30)
  2.    SWITCH($i - INT($i/2)*2)
  3.        CASE(0)
  4.            LOGWRITE("0")
  5.        CASE(1)
  6.            LOGWRITE("1")
  7.        DEFAULT
  8.            LOGWRITE("Err")
  9.    END_SWITCH
  10. END_CYC
  11. HALT

Результат:
Цитировать
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 близки к переходным.
Может всё, что я написал - полная шляпа  :-\