Author Topic: Циклы? Чтото пошло не так, Прошу хэлп.  (Read 2067 times)

0 Members and 1 Guest are viewing this topic.

m1hai

  • Зашел в гости
  • *
  • Posts: 10
    • View Profile
Я новенький пожалуйста помогите разобраться. Он должен выбрать рандомно одну из коордонат представленных, потом нажать на левый клик, повторяясь 4 раза, если рандомно выбирает число которое было то возвращается обратно и опять рандом выбирает и идёт дальше.

Code: (clickermann) [Select]
$curent[0]=0
$curent[1]=0
$curent[2]=0
$curent[3]=0
$a=0
FOR($a,$a<4)
LOGWRITE ($a)
skip:
$ran = RNDFROM(700,500,850,1050,1222,1400)
LOGWRITE("Получил"+$ran)

FOR($i=0,$i<4)
IF($curent[$i]=$ran)
LOGWRITE("Совпадение"+$ran)
GOTO(skip)
END_IF
END_CYC

$curent[$a]=$ran
LCLICK($ran,630)
LOGWRITE("Нажал"+$ran)
WAITMS(300)   
END_CYC
WAITMS(100)

Написал несколько информации в лог чтобы увидеть что идёт не так.
вот:
Code: (clickermann) [Select]
21:43:11 0
21:43:11 Получил+850
21:43:11 Нажал+850
21:43:11 1
21:43:11 Получил+850
21:43:11 Совпадение+850
21:43:11 Получил+1050
21:43:11 Нажал+1050
21:43:12 Нажал+1050
21:43:12 3
21:43:12 Получил+500
21:43:12 Нажал+500

А должно быть так:
Code: (clickermann) [Select]
21:43:11 0
21:43:11 Получил+850
21:43:11 Нажал+850
21:43:11 1
21:43:11 Получил+850
21:43:11 Совпадение+850
21:43:11 Получил+1050
21:43:11 Нажал+1050
         2
         Получил+"рандом"
         Нажал+"рандом"
21:43:12 3
21:43:12 Получил+500
21:43:12 Нажал+500


Спасибо заранее.
« Last Edit: March 28, 2018, 09:59:07 PM by m1hai »

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Циклы? Чтото пошло не так, Прошу хэлп.
« Reply #1 on: March 28, 2018, 10:35:27 PM »
Прыгать на метку по гото из цикла категорически запрещено.

Можно было бы поправить твой скрипт, но лучше взять готовый. Вот тема с идентичной задачей http://crapware.aidf.org/forum/index.php?topic=3535.0

А вот отредактированный вариант для тебя:
Code: (clickermann) [Select]
STRSEPARATE ("700,500,850,1050,1222,1400", ",", $arr)  //массив из чисел


$n = 4 //указать число выполняемых действий

FOR($a=0,$a<$n) // повторяем $n раз
   print($a)
   
   $i = rnd(0,ARRSIZE($arr)-1)    //рандомный элемент массива.
   
   LCLICK(int($arr[$i]),630)   
   print("Нажал ",int($arr[$i]))
   
   
   $arr[$i] = $arr[ARRSIZE($arr)-1]    //удаляем использованный элемент
   $del = ARRPOP($arr)
   
   WAITMS(300)
END_CYC
HALT  // выход

m1hai

  • Зашел в гости
  • *
  • Posts: 10
    • View Profile
Re: Циклы? Чтото пошло не так, Прошу хэлп.
« Reply #2 on: March 28, 2018, 10:54:19 PM »
Прыгать на метку по гото из цикла категорически запрещено.

Можно было бы поправить твой скрипт, но лучше взять готовый. Вот тема с идентичной задачей http://crapware.aidf.org/forum/index.php?topic=3535.0

А вот отредактированный вариант для тебя:
Code: (clickermann) [Select]
STRSEPARATE ("700,500,850,1050,1222,1400", ",", $arr)  //массив из чисел


$n = 4 //указать число выполняемых действий

FOR($a=0,$a<$n) // повторяем $n раз
   print($a)
   
   $i = rnd(0,ARRSIZE($arr)-1)    //рандомный элемент массива.
   
   LCLICK(int($arr[$i]),630)   
   print("Нажал ",int($arr[$i]))
   
   
   $arr[$i] = $arr[ARRSIZE($arr)-1]    //удаляем использованный элемент
   $del = ARRPOP($arr)
   
   WAITMS(300)
END_CYC
HALT  // выход

Cпасибо большое за алтернативный вариант. Просто пока что на разобрался в этом синтаксисе и попробовал сделать из ограниченной мною видимости функций и возможностей :).

m1hai

  • Зашел в гости
  • *
  • Posts: 10
    • View Profile
Re: Циклы? Чтото пошло не так, Прошу хэлп.
« Reply #3 on: March 28, 2018, 11:22:20 PM »
Прыгать на метку по гото из цикла категорически запрещено.

Можно было бы поправить твой скрипт, но лучше взять готовый. Вот тема с идентичной задачей http://crapware.aidf.org/forum/index.php?topic=3535.0

А вот отредактированный вариант для тебя:
Code: (clickermann) [Select]
STRSEPARATE ("700,500,850,1050,1222,1400", ",", $arr)  //массив из чисел


$n = 4 //указать число выполняемых действий

FOR($a=0,$a<$n) // повторяем $n раз
   print($a)
   
   $i = rnd(0,ARRSIZE($arr)-1)    //рандомный элемент массива.
   
   LCLICK(int($arr[$i]),630)   
   print("Нажал ",int($arr[$i]))
   
   
   $arr[$i] = $arr[ARRSIZE($arr)-1]    //удаляем использованный элемент
   $del = ARRPOP($arr)
   
   WAITMS(300)
END_CYC
HALT  // выход
Поставил в цикл весь код, иногда всё таки нажимает на те же координаты. Не знаю почему.Прошу еще раз посмотреть.  :(

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Циклы? Чтото пошло не так, Прошу хэлп.
« Reply #4 on: March 28, 2018, 11:34:13 PM »
После завершения нажатий, или перед обьявлением массива, нужно обнулять его, так как в массиве  остаются не используемые (не удаленные) элементы, а STRSEPARATE дописывает к ним еще.

Code: (clickermann) [Select]
STRSEPARATE ("700,500,850,1050,1222,1400", ",", $arr)  //массив из чисел
 
 
$n = 4 //указать число выполняемых действий
 
FOR($a=0,$a<$n) // повторяем $n раз
   print($a)
 
   $i = rnd(0,ARRSIZE($arr)-1)    //рандомный элемент массива.
 
   LCLICK(int($arr[$i]),630)   
   print("Нажал ",int($arr[$i]))
 
 
   $arr[$i] = $arr[ARRSIZE($arr)-1]    //удаляем использованный элемент
   $del = ARRPOP($arr)
 
   WAITMS(300)
END_CYC

UNDEFINE($arr) //удаляем массив


HALT  // выход


m1hai

  • Зашел в гости
  • *
  • Posts: 10
    • View Profile
Re: Циклы? Чтото пошло не так, Прошу хэлп.
« Reply #5 on: March 28, 2018, 11:38:26 PM »
Cпасибо. Всё понятно.  :) Тут можно репутацию как нибудь вашу поднять с какой то кнопкой :) ?