Author Topic: Сценарий записи кликов  (Read 7183 times)

0 Members and 2 Guests are viewing this topic.

Крис Тинка

  • Активный участник
  • ***
  • Posts: 171
    • View Profile
Сценарий записи кликов
« on: January 07, 2014, 06:23:47 PM »
Мудрила, мудрила и что-то перемудрила)))
Цель: Записать координаты нескольких объектов и координаты кнопки "закрыть". Объектов два вида, с одним видом нужно взаимодействовать 1 раз в 5 минут, с другим 1 раз в 10 минут.
Code: (clickermann) [Select]
DEFINE($close_rec)
setup1:
HINTPOPUP("Кликните на колодец или бочку", "Clickermann")
$kolodec = 0
WHILE($kolodec = 0)
   WAITMS(10)
   IF(ISKEYDOWN(1) = 1)
      SOUND ("sound\Accepted.wav")
      ARRPUSH ($rec,$_xmouse)
      ARRPUSH ($rec,$_ymouse)
      $kolodec = 1
   END_IF
END_CYC
while(ISKEYDOWN(1) = 1)
   WAITMS(10)
END_CYC
HINTPOPUP("Закройте окно", "Clickermann")
$close = 0
WHILE($close = 0)
   WAITMS(10)
   IF(ISKEYDOWN(1) = 1)
      SOUND ("sound\Accepted.wav")
      IF($close_rec = 0)
         $close_rec = 1
         $x_close = $_xmouse
         $y_close = $_ymouse
         $close_rec = 1
      END_IF
      $close = 1
   END_IF
   while(ISKEYDOWN(1) = 1)
      WAITMS(10)
   END_CYC
END_CYC
HINTPOPUP("Чтобы добавить еще - нажмите  1. Чтобы перейти к автоматам - нажмите  2. Чтобы закончить настройку - нажмите  3", "Clickermann")
$setup = 0
WHILE($setup = 0)
   WAITMS(10)
   IF(ISKEYDOWN(49) = 1)
      $setup = 1
   END_IF
   IF(ISKEYDOWN(50) = 1)
      $setup = 2
   END_IF
   IF(ISKEYDOWN(51) = 1)
      $setup = 3
   END_IF
END_CYC
SOUND ("sound\Accepted.wav")
IF($setup = 1)
   goto(setup1)
END_IF
IF($setup = 3)
   goto(setup_end)
END_IF
setup2:
HINTPOPUP("Кликните на автомат", "Clickermann")
$avtomat = 0
WHILE($avtomat = 0)
   WAITMS(10)
   IF(ISKEYDOWN(1) = 1)
      SOUND ("sound\Accepted.wav")
      ARRPUSH ($rec_a,$_xmouse)
      ARRPUSH ($rec_a,$_ymouse)
      $avtomat = 1
   END_IF
END_CYC
while(ISKEYDOWN(1) = 1)
   WAITMS(10)
END_CYC
HINTPOPUP("Закройте окно", "Clickermann")
$close = 0
WHILE($close = 0)
   WAITMS(10)
   IF(ISKEYDOWN(1) = 1)
      SOUND ("sound\Accepted.wav")
      $close = 1
   END_IF
END_CYC
while(ISKEYDOWN(1) = 1)
   WAITMS(10)
END_CYC
HINTPOPUP("Чтобы добавить еще - нажмите  2. Чтобы закончить настройку - нажмите  3", "Clickermann")
$setup = 0
WHILE($setup = 0)
   WAITMS(10)
   IF(ISKEYDOWN(50) = 1)
      $setup = 1
   END_IF
   IF(ISKEYDOWN(51) = 1)
      $setup = 2
   END_IF
END_CYC
SOUND ("sound\Accepted.wav")
IF($setup = 1)
   goto(setup2)
END_IF
setup_end:
HINTPOPUP("Настройка закончена", "Clickermann")
// Проверка записанных координат

$n_rec = arrsize($rec)
$n_rec_a = arrsize($rec_a)
LOGWRITE("Размер первого массива: " , $n_rec)


WHILE($n_rec > 0)
   LOGWRITE("№" , $n_rec, " = " ,$rec[$n_rec-1])
   INC($n_rec,-1)
END_CYC

LOGWRITE("Размер второго массива: " , $n_rec_a)

WHILE($n_rec_a > 0)
   LOGWRITE("№" , $n_rec_a, " = " , $rec_a[$n_rec_a-1])
   INC($n_rec_a,-1)
END_CYC


start:
DEFINE($avt)
$st = $_time_t

$n_rec = arrsize($rec)
$n_rec_a = arrsize($rec_a)

$a=0
while ($n_rec > 0)
   $y = $rec[$n_rec-1]
   $x = $rec[$n_rec-2]
   INC($n_rec,-2)
   INC($a)
   LOGWRITE("Колодец №", $a , " координаты: X:" , $x , " Y:" , $y)
END_CYC

IF($avt = 0)
   LOGWRITE("---------------------------------")
   $a=0
   
   while ($n_rec_a > 0)
      $y = $rec_a[$n_rec_a-1]
      $x = $rec_a[$n_rec_a-2]
      INC($n_rec_a,-2)
      INC($a)
      LOGWRITE("Автомат №", $a , " координаты: X:" , $x , " Y:" , $y)
   END_CYC
   
   $avt = 1
ELSE
   $avt = 0
end_if

LOGWRITE("Координаты кнопки закрыть: X:", $x_close , " Y:", $y_close )
LOGWRITE("=================================")

$w = $_time_t-$st
IF($W <3 )
   WAIT(3-$w)
END_IF
goto(start)
Делаю условные клики для первого вида - 3 объекта, для второго - 2 объекта. С первым видом все получается, а вот со вторым проблемы. Сначала выдает первые координаты и выходит из цикла (нужно чтобы выдал все), потом вторые координаты, потом вообще не заходит в цикл.
Code: [Select]
22:00:19 Колодец №1 координаты: X:241 Y:48
22:00:19 Колодец №2 координаты: X:1126 Y:134
22:00:19 Колодец №3 координаты: X:348 Y:46
22:00:19 ---------------------------------
22:00:19 Автомат №1 координаты: X:343 Y:183
22:00:19 Координаты кнопки закрыть: X:416 Y:45
22:00:19 =================================
22:00:22 Колодец №1 координаты: X:241 Y:48
22:00:22 Колодец №2 координаты: X:1126 Y:134
22:00:22 Колодец №3 координаты: X:348 Y:46
22:00:22 Координаты кнопки закрыть: X:416 Y:45
22:00:22 =================================
22:00:24 Колодец №1 координаты: X:241 Y:48
22:00:24 Колодец №2 координаты: X:1126 Y:134
22:00:24 Колодец №3 координаты: X:348 Y:46
22:00:24 ---------------------------------
22:00:24 Автомат №1 координаты: X:456 Y:44
22:00:24 Координаты кнопки закрыть: X:416 Y:45
22:00:24 =================================
22:00:27 Колодец №1 координаты: X:241 Y:48
22:00:27 Колодец №2 координаты: X:1126 Y:134
22:00:27 Колодец №3 координаты: X:348 Y:46
22:00:27 Координаты кнопки закрыть: X:416 Y:45
22:00:27 =================================
22:00:30 Колодец №1 координаты: X:241 Y:48
22:00:30 Колодец №2 координаты: X:1126 Y:134
22:00:30 Колодец №3 координаты: X:348 Y:46
22:00:30 ---------------------------------
22:00:30 Координаты кнопки закрыть: X:416 Y:45
22:00:30 =================================
22:00:33 Колодец №1 координаты: X:241 Y:48
22:00:33 Колодец №2 координаты: X:1126 Y:134
22:00:33 Колодец №3 координаты: X:348 Y:46
22:00:33 Координаты кнопки закрыть: X:416 Y:45
22:00:33 =================================
22:00:36 Колодец №1 координаты: X:241 Y:48
22:00:36 Колодец №2 координаты: X:1126 Y:134
22:00:36 Колодец №3 координаты: X:348 Y:46
22:00:36 ---------------------------------
22:00:36 Автомат №1 координаты: X:343 Y:183
22:00:36 Координаты кнопки закрыть: X:416 Y:45
22:00:36 =================================
« Last Edit: January 08, 2014, 09:54:05 AM by Крис Тинка »

Крис Тинка

  • Активный участник
  • ***
  • Posts: 171
    • View Profile
Re: Сценарий записи кликов
« Reply #1 on: January 07, 2014, 06:54:39 PM »
И еще почему-то не всегда с первого раза срабатывает  IF(ISKEYDOWN(1) = 1)

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Сценарий записи кликов
« Reply #2 on: January 07, 2014, 07:47:39 PM »
И еще почему-то не всегда с первого раза срабатывает  IF(ISKEYDOWN(1) = 1)
Потому, что в цикле ожидания клика нет задержки. Начинает сильно тупить. Нужно добавить через ELSE.
При ожидании кнопок есть.
А какой смысл несет переменная $avt ? Я не могу понять, зачем такие сложности.


Крис Тинка

  • Активный участник
  • ***
  • Posts: 171
    • View Profile
Re: Сценарий записи кликов
« Reply #3 on: January 07, 2014, 08:22:00 PM »
Благодаря "$avt" условие IF($avt=1) выполняется через 1 раз. 1, 3, 5 раз и т.д. Может как-то по другому можно.... Я так придумала.
Добавила задержку, но не через ELSE, а выше ифа.
Нашла ошибку в WHILE
Было
Code: (clickermann) [Select]
$close = 0
WHILE($close = 0)
   WAITMS(10)
   IF(ISKEYDOWN(1) = 1)
      SOUND ("sound\Accepted.wav")
      $close = 1
   END_IF
   while(ISKEYDOWN(1) = 1)
      WAITMS(10)
   END_CYC
END_CYC
Надо так
Code: (clickermann) [Select]
$close = 0
WHILE($close = 0)
   WAITMS(10)
   IF(ISKEYDOWN(1) = 1)
      SOUND ("sound\Accepted.wav")
      $close = 1
   END_IF
END_CYC
while(ISKEYDOWN(1) = 1)
   WAITMS(10)
END_CYC
В итоге: Проблема с IF(ISKEYDOWN(1) = 1) пропала. Проблема с записью/чтением координат для автоматов осталась
« Last Edit: January 07, 2014, 08:33:56 PM by Крис Тинка »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Сценарий записи кликов
« Reply #4 on: January 07, 2014, 09:12:38 PM »
Благодаря "$avt" условие IF($avt=1) выполняется через 1 раз. 1, 3, 5 раз и т.д. Может как-то по другому можно....
Зачем - понятно, не понятно зачем так сложно.
DEFINE($avt,0)
IF($avt=0)
// да. Действие.
$avt=1
ELSE
$avt=0
END_IF


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Сценарий записи кликов
« Reply #5 on: January 07, 2014, 09:21:53 PM »
Для поиска вставь в начале старта вывод в лог размеры массивов и их содержимое. Я с телефона, поэтому сам не могу посмотреть.
И проще было бы не жонглировать вспомогательными массивами, а вместо arrpop считывать по индексу. Так на много проще всё.
« Last Edit: January 07, 2014, 10:14:54 PM by Vint »


Крис Тинка

  • Активный участник
  • ***
  • Posts: 171
    • View Profile
Re: Сценарий записи кликов
« Reply #6 on: January 08, 2014, 08:01:56 AM »
Добавила вывод в лог размера массивов и содержимое. Помогло понять, что проблема в этом куске
Code: (clickermann) [Select]
start:
DEFINE($avt)
$st = $_time_t
$a=0
while (arrsize($rec) > 0)
   $y = arrpop($rec)
   $x = arrpop($rec)
   ARRPUSH($rec_backup,$y)
   ARRPUSH($rec_backup,$x)
   INC($a)
   LOGWRITE("Колодец №", $a , " координаты: X:" , $x , " Y:" , $y)
END_CYC
while (arrsize($rec_backup) > 0)
   $temp = arrpop($rec_backup)
   ARRPUSH($rec,$temp)
END_CYC
UNDEFINE($temp)
IF($avt = 0)
   LOGWRITE("---------------------------------")
   $a=0
   while (arrsize($rec_a) > 0)
      $y = arrpop($rec_a)
      $x = arrpop($rec_a)
      ARRPUSH($rec_a_backup,$y)
      ARRPUSH($rec_a_backup,$x)
      INC($a)
      LOGWRITE("Автомат №", $a , " координаты: X:" , $x , " Y:" , $y)
   END_CYC
   while (arrsize($rec_a_backup) > 0)
      $temp = arrpop($rec_a_backup)
      ARRPUSH($rec_a,$temp)
   END_CYC
   UNDEFINE($temp)
   $avt = 1
ELSE
   $avt = 0
end_if
LOGWRITE("Координаты кнопки закрыть: X:", $x_close , " Y:", $y_close )
LOGWRITE("=================================")

$w = $_time_t-$st
IF($W <3 )
   WAIT(3-$w)
END_IF
goto(start)
Координаты автомата берутся не из массива, а вообще не понятно откуда
Code: [Select]
11:52:07 Размер первого массива: 6
11:52:07 №6 = 141
11:52:07 №5 = 183
11:52:07 №4 = 51
11:52:07 №3 = 172
11:52:07 №2 = 49
11:52:07 №1 = 232
11:52:07 Размер второго массива: 4
11:52:07 №4 = 51
11:52:07 №3 = 172
11:52:07 №2 = 49
11:52:07 №1 = 232
11:52:07 Колодец №1 координаты: X:183 Y:141
11:52:07 Колодец №2 координаты: X:172 Y:51
11:52:07 Колодец №3 координаты: X:232 Y:49
11:52:07 ---------------------------------
11:52:07 Автомат №1 координаты: X:312 Y:318
11:52:07 Координаты кнопки закрыть: X:514 Y:46
11:52:07 =================================
11:52:10 Колодец №1 координаты: X:183 Y:141
11:52:10 Колодец №2 координаты: X:172 Y:51
11:52:10 Колодец №3 координаты: X:232 Y:49
11:52:10 ---------------------------------
11:52:10 Автомат №1 координаты: X:544 Y:182
11:52:10 Координаты кнопки закрыть: X:514 Y:46
11:52:10 =================================
11:52:13 Колодец №1 координаты: X:183 Y:141
11:52:13 Колодец №2 координаты: X:172 Y:51
11:52:13 Колодец №3 координаты: X:232 Y:49
11:52:13 ---------------------------------
11:52:13 Координаты кнопки закрыть: X:514 Y:46
11:52:13 =================================
11:52:16 Колодец №1 координаты: X:183 Y:141
11:52:16 Колодец №2 координаты: X:172 Y:51
11:52:16 Колодец №3 координаты: X:232 Y:49
11:52:17 Координаты кнопки закрыть: X:514 Y:46
11:52:17 =================================
11:52:20 Колодец №1 координаты: X:183 Y:141
11:52:20 Колодец №2 координаты: X:172 Y:51
11:52:20 Колодец №3 координаты: X:232 Y:49
11:52:20 ---------------------------------
11:52:20 Автомат №1 координаты: X:312 Y:318
11:52:20 Координаты кнопки закрыть: X:514 Y:46
11:52:20 =================================
Заменила на такой сценарий
Code: (clickermann) [Select]
start:
DEFINE($avt)
$st = $_time_t

$n_rec = arrsize($rec)
$n_rec_a = arrsize($rec_a)

$a=0
while ($n_rec > 0)
   $y = $rec[$n_rec-1]
   $x = $rec[$n_rec-2]
   INC($n_rec,-2)
   INC($a)
   LOGWRITE("Колодец №", $a , " координаты: X:" , $x , " Y:" , $y)
END_CYC

IF($avt = 0)
   LOGWRITE("---------------------------------")
   $a=0
   
   while ($n_rec_a > 0)
      $y = $rec_a[$n_rec_a-1]
      $x = $rec_a[$n_rec_a-2]
      INC($n_rec_a,-2)
      INC($a)
      LOGWRITE("Автомат №", $a , " координаты: X:" , $x , " Y:" , $y)
   END_CYC
   
   $avt = 1
ELSE
   $avt = 0
end_if

LOGWRITE("Координаты кнопки закрыть: X:", $x_close , " Y:", $y_close )
LOGWRITE("=================================")

$w = $_time_t-$st
IF($W <3 )
   WAIT(3-$w)
END_IF
goto(start)
Проблема не ушла. Запустила на 4.9 версии, появился второй автомат, но координаты берутся не из массива....
Code: [Select]
12:38:19 Размер первого массива: 6
12:38:19 №6 = 77
12:38:19 №5 = 180
12:38:19 №4 = 237
12:38:19 №3 = 166
12:38:19 №2 = 38
12:38:19 №1 = 324
12:38:19 Размер второго массива: 4
12:38:19 №4 = 237
12:38:19 №3 = 166
12:38:19 №2 = 38
12:38:19 №1 = 324
12:38:19 Колодец №1 координаты: X:180 Y:77
12:38:19 Колодец №2 координаты: X:166 Y:237
12:38:19 Колодец №3 координаты: X:324 Y:38
12:38:19 ---------------------------------
12:38:19 Автомат №1 координаты: X:196 Y:307
12:38:19 Автомат №2 координаты: X:561 Y:183
12:38:19 Координаты кнопки закрыть: X:530 Y:45
12:38:19 =================================
12:38:23 Колодец №1 координаты: X:180 Y:77
12:38:23 Колодец №2 координаты: X:166 Y:237
12:38:23 Колодец №3 координаты: X:324 Y:38
12:38:23 Координаты кнопки закрыть: X:530 Y:45
12:38:23 =================================
12:38:26 Колодец №1 координаты: X:180 Y:77
12:38:26 Колодец №2 координаты: X:166 Y:237
12:38:26 Колодец №3 координаты: X:324 Y:38
12:38:26 ---------------------------------
12:38:26 Автомат №1 координаты: X:196 Y:307
12:38:26 Автомат №2 координаты: X:561 Y:183
12:38:26 Координаты кнопки закрыть: X:530 Y:45
12:38:26 =================================
12:39:13 Колодец №1 координаты: X:180 Y:77
12:39:13 Колодец №2 координаты: X:166 Y:237
12:39:13 Колодец №3 координаты: X:324 Y:38
12:39:13 Координаты кнопки закрыть: X:530 Y:45
12:39:13 =================================
12:39:16 Колодец №1 координаты: X:180 Y:77
12:39:16 Колодец №2 координаты: X:166 Y:237
12:39:16 Колодец №3 координаты: X:324 Y:38
12:39:16 ---------------------------------
12:39:16 Автомат №1 координаты: X:196 Y:307
12:39:16 Автомат №2 координаты: X:561 Y:183
12:39:16 Координаты кнопки закрыть: X:530 Y:45
12:39:16 =================================
« Last Edit: January 08, 2014, 08:42:21 AM by Крис Тинка »

Крис Тинка

  • Активный участник
  • ***
  • Posts: 171
    • View Profile
Re: Сценарий записи кликов
« Reply #7 on: January 08, 2014, 09:59:33 AM »
Нашла ошибку в переменных. В 115 строке вместо $rec_a было $rec. На 4.9 версии все работает. На 4.8 почему-то глючит. Vint, спасибо помог сократить скрипт, что привело к ускорению нахождения ошибки!