Автор Тема: Рандомный клик по заданным координатам.  (Прочитано 570 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Fazi

  • Зашел в гости
  • *
  • Сообщений: 10
    • Просмотр профиля
Всем хай ;)
Подскажите плиз кто знает, как сделать чтобы кликер делал рандомный клик по одной из трёх заданных координат.
Код: Clickermann
  1. LCLICK(164,546)  // 16119285
  2. LCLICK(455,551)  // 16777215
  3. LCLICK(853,560)  // 16777215
  4. halt

Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3476
  • Лечу куда хочу. cman 4.13.014x32, W10, W7
    • Просмотр профиля
Re: Рандомный клик по заданным координатам.
« Ответ #1 : Май 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


Fazi

  • Зашел в гости
  • *
  • Сообщений: 10
    • Просмотр профиля
Re: Рандомный клик по заданным координатам.
« Ответ #2 : Май 30, 2020, 02:20:32 pm »
Благодарствую:)

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3685
  • Котэ
    • Просмотр профиля
Re: Рандомный клик по заданным координатам.
« Ответ #3 : Май 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

Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3476
  • Лечу куда хочу. cman 4.13.014x32, W10, W7
    • Просмотр профиля
Re: Рандомный клик по заданным координатам.
« Ответ #4 : Июнь 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 идёт сравнение. Зачем каждый раз вычислять?


Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3476
  • Лечу куда хочу. cman 4.13.014x32, W10, W7
    • Просмотр профиля
Re: Рандомный клик по заданным координатам.
« Ответ #5 : Июнь 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 мс, но и там и там!


Oraven

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3685
  • Котэ
    • Просмотр профиля
Re: Рандомный клик по заданным координатам.
« Ответ #6 : Июнь 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

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

Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3476
  • Лечу куда хочу. cman 4.13.014x32, W10, W7
    • Просмотр профиля
Re: Рандомный клик по заданным координатам.
« Ответ #7 : Июнь 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 близки к переходным.
Может всё, что я написал - полная шляпа  :-\
« Последнее редактирование: Июнь 02, 2020, 12:31:00 pm от Vint »