Author Topic: Помогите . новичку  (Read 6423 times)

0 Members and 3 Guests are viewing this topic.

hellstaff

  • Освоившийся
  • **
  • Posts: 21
    • View Profile
Помогите . новичку
« on: December 15, 2016, 11:08:21 PM »
Доброго времени суток . господа и ледм !
Задача. которую я никак неосилю ,
Условие: Сущесвует 12 координат - (10.10). (20.20).(30.30)...(120.120)
Задача :как. рандонмно 6(5.4.3.2) кликнуть СРЕДИ этих координат . с эадержкой  WAITMS(RND(300,400)) . чтобы этот самый рандом(случайный порядок координат) не кликал в даже рандомно (случайно)  одинаковую координату . т.е . например (10.10).(30.30) .(120.120).(10.10)....
 Я понятно обьяснил ?

quant13

  • Активный участник
  • ***
  • Posts: 174
    • View Profile
Re: Помогите . новичку
« Reply #1 on: December 16, 2016, 06:30:39 AM »
трудность, я так понимаю, в получении случайных чисел без повторений
Бери из вложения (не помню из какой темы они были),
и вот еще тема с рандомами http://crapware.aidf.org/forum/index.php?topic=1423.msg7288;topicseen#msg7288

hellstaff

  • Освоившийся
  • **
  • Posts: 21
    • View Profile
Re: Помогите . новичку
« Reply #2 on: December 16, 2016, 09:29:56 AM »
Оно конечно спасибо . но тема -"Помогите.НОВИЧКУ" . а попроще и с разьяснениями . пожалуйсто.
ЭЭЭ...прожженым волкам оно понятно(и не понятно) . а вот мне ...
Best regards !

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Помогите . новичку
« Reply #3 on: December 16, 2016, 10:02:36 AM »
Code: (clickermann) [Select]
FOR ($i=1, $i<12+1)
   ARRPUSH($ARR,$i) // создаем массив с числами от 1 до 12
END_CYC

WHILE(ARRSIZE($ARR) > 0) // цикл выполняется пока массив не опустеет
   $ARR_SIZE = ARRSIZE($ARR) // получаем размер массива
   FOR ($i=0, $i<$ARR_SIZE*2) // здесь цикл рандомизации
      $n1 = RND(0,$ARR_SIZE-1)
      $n2 = RND(0,$ARR_SIZE-1)
      $R = $ARR[$n1]
      $ARR[$n1] = $ARR[$n2]
      $ARR[$n2] = $R
   END_CYC
   
   $r = ARRPOP($ARR) // извлекаем последнее значение из массива (массив становится меньше)
   SWITCH($r) // свитч выполнит секцию в соответствии с этим числом
   CASE(1)
      LCLICK(10,10) // координаты задай свои
   CASE(2)
      LCLICK(10,10)
   CASE(3)
      LCLICK(10,10)
   CASE(4)
      LCLICK(10,10)
   CASE(5)
      LCLICK(10,10)
   CASE(6)
      LCLICK(10,10)
   CASE(7)
      LCLICK(10,10)
   CASE(8)
      LCLICK(10,10)
   CASE(9)
      LCLICK(10,10)
   CASE(10)
      LCLICK(10,10)
   CASE(11)
      LCLICK(10,10)
   CASE(12)
      LCLICK(10,10)
   DEFAULT
   END_SWITCH
   WAITMS(RND(300,400))
END_CYC
« Last Edit: December 16, 2016, 10:06:52 AM by Oraven »

hellstaff

  • Освоившийся
  • **
  • Posts: 21
    • View Profile
Re: Помогите . новичку
« Reply #4 on: December 16, 2016, 10:41:42 AM »
...Еще больше понятней стало ...
...А куда подставлять число .которое определяет сколько координат из представленных 12-и надо кликать .например 6(5.4.3)?...
...Т.е. скрипт ужо готов . нужно лишь подставить координаты?...
Best regards!
P.S. Тема "Помогите НОВИЧКУ"
Пока еще не все вопросы...
« Last Edit: December 16, 2016, 11:20:03 AM by hellstaff »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Помогите . новичку
« Reply #5 on: December 16, 2016, 11:45:43 AM »
Мне вот тоже непонятно что значит 6(5.4.3)

вот еще вариант. 6 случайных из 12

Code: (clickermann) [Select]
UNDEFINE($arr)
FOR($a=0,$a<12)
   ARRPUSH($arr, $a) // пут подготавливаем массив чисел
END_CYC

$i = ARRSIZE($arr)-1
WHILE($i>0) //  и рандомизируем его
   $j = RND(0,$i)
   IF($i ! $j)
      $tmp = $arr[$j]
      $arr[$j] = $arr[$i]
      $arr[$i] = $tmp
   END_IF
   INC($i,-1)
END_CYC

FOR($a=0,($a<ARRSIZE($arr))&($a<6)) // будет выбрано 6 случайных секций
   SWITCH($arr[$a])
   CASE(1)
      LCLICK(10,10) // координаты задай свои
   CASE(2)
      LCLICK(10,10)
   CASE(3)
      LCLICK(10,10)
   CASE(4)
      LCLICK(10,10)
   CASE(5)
      LCLICK(10,10)
   CASE(6)
      LCLICK(10,10)
   CASE(7)
      LCLICK(10,10)
   CASE(8)
      LCLICK(10,10)
   CASE(9)
      LCLICK(10,10)
   CASE(10)
      LCLICK(10,10)
   CASE(11)
      LCLICK(10,10)
   CASE(12)
      LCLICK(10,10)
   DEFAULT
   END_SWITCH
   WAITMS(RND(300,400))
END_CYC

« Last Edit: December 16, 2016, 11:56:04 AM by Oraven »

hellstaff

  • Освоившийся
  • **
  • Posts: 21
    • View Profile
Re: Помогите . новичку
« Reply #6 on: December 16, 2016, 12:41:06 PM »
Итак - 6(5.4.3.2) означает :
6 координат из 12 предоставленных.
5 координат из 12 предоставленных.
и т.д. но .... из последнего предоставленного кода очевидно .что это вот эта строка :
FOR($a=0,($a<ARRSIZE($arr))&($a<6)) // будет выбрано 6 случайных секций .
Далее : если координат будет больше или меньше - то менять значение нужно в этой строке :
FOR($a=0,$a<12).
Я правильно понял ?
Т.е. это уже готовый скрипт . нужно только подставить значения и координаты ?
Я правильно понял ?
Best regards ?

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Помогите . новичку
« Reply #7 on: December 16, 2016, 01:21:39 PM »
Далее : если координат будет больше или меньше - то менять значение нужно в этой строке :
FOR($a=0,$a<12).
Я правильно понял ?
Т.е. это уже готовый скрипт . нужно только подставить значения и координаты ?
Я правильно понял ?
Best regards ?

Конечно же скрипт готовый.
Смысл в том чтобы создать массив чисел от 0-12. Затем рандомизировать их порядок. И в цикле выполнять SWITCH возвращая из массива эти числа как номера секций.


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Помогите . новичку
« Reply #8 on: December 16, 2016, 01:44:54 PM »
Почти все обсуждаемые случайные числа из этой темы.

Вот адаптированно к твоей задаче:

Вариант 1
[spoiler]
Code: (clickermann) [Select]
// сколько координат кликнуть
$count_cl = 5

// заносим в массив все пары координат
STRSEPARATE("10:10:20:20:30:30:40:40:50:50:60:60:70:70:80:80:90:90:100:100:110:110:120:120", ":", $coords)

//==============================================================================

LOGCLEAR
$count_corr = ARRSIZE($coords) / 2
IF($count_cl > $count_corr)
    LOGWRITE("Кликов больше чем заданно координат!")
    HALT
END_IF

//создаем массив номеров пар (по числу пар координат)
UNDEFINE($num)
FOR($i=0, $i < $count_corr)
    ARRPUSH($num, $i)
END_CYC

//перемешиваем массив номеров
$num_size = ARRSIZE($num)
FOR($i=0, $i < $num_size*2)
    $n1 = RND(0, $num_size-1)
    $n2 = RND(0, $num_size-1)
    $tmp = $num[$n1]
    $num[$n1] = $num[$n2]
    $num[$n2] = $tmp
END_CYC

// делаем клики $count_cl раз
FOR($i=0, $i < $count_cl)
    $ind = $num[$i]
    $cx = $coords[$ind*2]
    $cy = $coords[$ind*2 + 1]
    //LOGWRITE("X/Y  ", $cx, " / ", $cy)
    LCLICK($cx, $cy)
    WAITMS(200)
END_CYC
HALT
[/spoiler]

Вариант 2 Победитель нашего конкурса на основе решения Atas-а
[spoiler]
Code: (clickermann) [Select]
// сколько координат кликнуть
$count_cl = 5

// заносим в массив все пары координат
STRSEPARATE("10:10:20:20:30:30:40:40:50:50:60:60:70:70:80:80:90:90:100:100:110:110:120:120", ":", $coords)

//==============================================================================

LOGCLEAR

// проверка на корректность заданного кол-ва кликов. Не обязательна :-)
IF($count_cl > (ARRSIZE($coords) / 2))
    LOGWRITE("Кликов больше чем заданно координат!")
    HALT
END_IF

// делаем клики $count_cl раз
FOR($i=0, $i < $count_cl)
    $n = RND(0, (ARRSIZE($coords) / 2 - 1)) // случайный номер из номеров пар
    $cx = $coords[$n*2]
    $cy = $coords[$n*2 + 1]
   
    // удаляем из массива использованные
    $coords[$n*2] = $coords[ARRSIZE($coords) - 2]
    $coords[$n*2 + 1] = $coords[ARRSIZE($coords) - 1]
    $temp = ARRPOP($coords)
    $temp = ARRPOP($coords)
    LOGWRITE("X/Y  ", $cx, " / ", $cy)
    LCLICK($cx, $cy)
    WAITMS(200)
END_CYC
HALT
[/spoiler]
« Last Edit: December 16, 2016, 02:18:58 PM by Vint »


hellstaff

  • Освоившийся
  • **
  • Posts: 21
    • View Profile
Re: Помогите . новичку
« Reply #9 on: December 16, 2016, 02:04:23 PM »
  Огромное СПАСИБО ! ...но
Иногда кликает 5 координат вместо 6
Изменил только количество координат 13 :
FOR($a=0,$a<13)
Сам код :

Code: (clickermann) [Select]
[// 16.12.2016
UNDEFINE($arr)
FOR($a=0,$a<13)
   ARRPUSH($arr, $a) // пут подготавливаем массив чисел
END_CYC

$i = ARRSIZE($arr)-1
WHILE($i>0) //  и рандомизируем его
   $j = RND(0,$i)
   IF($i ! $j)
      $tmp = $arr[$j]
      $arr[$j] = $arr[$i]
      $arr[$i] = $tmp
   END_IF
   INC($i,-1)
END_CYC

FOR($a=0,($a<ARRSIZE($arr))&($a<6)) // будет выбрано 6 случайных секций
   SWITCH($arr[$a])
   CASE(1)
      LCLICK(430,630+RND(+5,-5)) // координаты задай свои
   CASE(2)
      LCLICK(390,550+RND(+5,-5))
   CASE(3)
      LCLICK(470,550+RND(+5,-5))
   CASE(4)
      LCLICK(270,510+RND(+5,-5))
   CASE(5)
      LCLICK(590,510+RND(+5,-5))
   CASE(6)
      LCLICK(550,430+RND(+5,-5))
   CASE(7)
      LCLICK(430,430+RND(+5,-5))
   CASE(8)
      LCLICK(310,430+RND(+5,-5))
   CASE(9)
      LCLICK(230,350+RND(+5,-5))
   CASE(10)
      LCLICK(315,310+RND(+5,-5))
   CASE(11)
      LCLICK(435,350+RND(+5,-5))
   CASE(12)
      LCLICK(550,310+RND(+5,-5))   
   CASE(13)
      LCLICK(630,350+RND(+5,-5))
   DEFAULT
   END_SWITCH
   WAITMS(RND(300,400))
END_CYC
LCLICK(430,790+RND(5,-5))

WAITMS(RND(3600,3700))

LCLICK(430,790+RND(5,-5))


WAITMS(RND(300,400))


GOTO(1)]


..Может . рандомно кликает в одну и туже координату?...
...Может чего забыл или не туда вписал ?...
...По наблюдениям не кликает в 13 координату .может там чего то ...
Best regards !
« Last Edit: December 16, 2016, 02:07:40 PM by hellstaff »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Помогите . новичку
« Reply #10 on: December 16, 2016, 02:15:50 PM »
..Может . рандомно кликает в одну и туже координату?...
...Может чего забыл или не туда вписал ?...
...По наблюдениям не кликает в 13 координату .может там чего то ...

Это ошибка у Андрея.
массив он формирует с числами начиная с нуля: 0 1 2 3...
А CASE настроены с 1.
Или CASE переделать с 0 или, что проще, поправить создание массива
Code: (clickermann) [Select]
FOR($a=0,$a<12)
   ARRPUSH($arr, $a+1) // тут подготавливаем массив чисел
END_CYC

А ещё лучше возьми второй код из моего поста.
Там при изменениях нужно менять только в одном месте. Не нужно дописывать простыню из CASE


hellstaff

  • Освоившийся
  • **
  • Posts: 21
    • View Profile
Re: Помогите . новичку
« Reply #11 on: December 16, 2016, 02:34:03 PM »
  Спасибо !
Т.е вместо :
FOR($a=0,$a<13)
   ARRPUSH($arr, $a) // пут подготавливаем массив чисел
END_CYC   неправильно
надо :
FOR($a=1,$a<13)
   ARRPUSH($arr, $a) // пут подготавливаем массив чисел
END_CYC  правильно - замена $a=0 на $a=1 ?
Это из песни Помогите НОВИЧКУ . ну нуб я в программировании . но очень надо !
Best regards !


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Помогите . новичку
« Reply #12 on: December 16, 2016, 04:00:20 PM »
  Спасибо !
Т.е вместо :
FOR($a=0,$a<13)
   ARRPUSH($arr, $a) // пут подготавливаем массив чисел
END_CYC   неправильно
надо :
FOR($a=1,$a<13)
   ARRPUSH($arr, $a) // пут подготавливаем массив чисел
END_CYC  правильно - замена $a=0 на $a=1 ?
Это из песни Помогите НОВИЧКУ . ну нуб я в программировании . но очень надо !
Best regards !

Неправильно. Точнее не совсем.
Было:
Code: (clickermann) [Select]
    FOR($a=0, $a < 12)
       ARRPUSH($arr, $a)
    END_CYC

В массив пишешь или на 1 больше
Code: (clickermann) [Select]
    FOR($a=0, $a < 12)
       ARRPUSH($arr, $a+1)
    END_CYC

Или перебираешь индексы не от 0 до MAX, а от 1 до MAX+1
Code: (clickermann) [Select]
    FOR($a=1, $a < 12+1)
       ARRPUSH($arr, $a)
    END_CYC
- если меняешь начальное значение, меняй и конечное.


hellstaff

  • Освоившийся
  • **
  • Posts: 21
    • View Profile
Re: Помогите . новичку
« Reply #13 on: December 16, 2016, 05:09:51 PM »
 Дк кейсов 13 . потому и :
FOR($a=1,$a<13).
...а разве 12+1 не равно 13 . ведь скрипт писался с :
Code: (clickermann) [Select]
[    UNDEFINE($arr)
    FOR($a=0,$a<12)
       ARRPUSH($arr, $a) // пут подготавливаем массив чисел
    END_CYC
     
    $i = ARRSIZE($arr)-1
    WHILE($i>0) //  и рандомизируем его
       $j = RND(0,$i)
       IF($i ! $j)
          $tmp = $arr[$j]
          $arr[$j] = $arr[$i]
          $arr[$i] = $tmp
       END_IF
       INC($i,-1)
    END_CYC
     
    FOR($a=0,($a<ARRSIZE($arr))&($a<6)) // будет выбрано 6 случайных секций
       SWITCH($arr[$a])
       CASE(1)
          LCLICK(10,10) // координаты задай свои
       CASE(2)
          LCLICK(10,10)
       CASE(3)
          LCLICK(10,10)
       CASE(4)
          LCLICK(10,10)
       CASE(5)
          LCLICK(10,10)
       CASE(6)
          LCLICK(10,10)
       CASE(7)
          LCLICK(10,10)
       CASE(8)
          LCLICK(10,10)
       CASE(9)
          LCLICK(10,10)
       CASE(10)
          LCLICK(10,10)
       CASE(11)
          LCLICK(10,10)
       CASE(12)
          LCLICK(10,10)
       DEFAULT
       END_SWITCH
       WAITMS(RND(300,400))
    END_CYC
уважаемого Oravena . а там . в условии было 12 координат ...
...обьясните .плиз разницу между 13 и 12+1 . если координат участвующих в рандоме 13
Best regards !
« Last Edit: December 16, 2016, 05:36:46 PM by hellstaff »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Помогите . новичку
« Reply #14 on: December 16, 2016, 05:47:30 PM »
Дк кейсов 13 . потому и :
FOR($a=1,$a<13).
...а разве 12+1 не равно 13 . ведь скрипт писался с :

уважаемого Oravena . а там . в условии было 12 координат ...
...обьясните .плиз разницу между 13 и 12+1 . если координат участвующих в рандоме 13
Best regards !
Все мои примеры для 12 координат! Обрати внимание на было - стало.
А там где у тебя кейсов 13, нужно писать уже 14.

...а разве 12+1 не равно 13 . ведь скрипт писался с :
Одно и то же.
Почему 12+1, а не 13? Для удобства изменения. Вот ты сейчас поменял кол-во координат с 12 на 13
Изменил только количество координат 13 :

Для этого просмотрел код и быстро где увидел 12 меняешь на 13. Где глаз зацепился за число 12...
А если через неделю нужно будет поменять на 18, так же быстро заменишь не вникая в сам код.

Вот чтобы не нужно было редактировать "внутри" основного кода я и предложил использовать другой. Где настройки всего в двух строках в начале, больше никуда лазить не нужно. И даже не нужно считать сколько там координат 12, 13 или 18. Просто дописываешь в строку сколько нужно и всё.
« Last Edit: December 16, 2016, 05:50:52 PM by Vint »