Автокликер Clickermann :: Форум
		Основной раздел => Общие вопросы => Topic started by: Крис Тинка on January 07, 2014, 06:23:47 PM
		
			
			- 
				Мудрила, мудрила и что-то перемудрила)))
 Цель: Записать координаты нескольких объектов и координаты кнопки "закрыть". Объектов два вида, с одним видом нужно взаимодействовать 1 раз в 5 минут, с другим 1 раз в 10 минут.
 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 объекта. С первым видом все получается, а вот со вторым проблемы. Сначала выдает первые координаты и выходит из цикла (нужно чтобы выдал все), потом вторые координаты, потом вообще не заходит в цикл.
 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 =================================
- 
				И еще почему-то не всегда с первого раза срабатывает  IF(ISKEYDOWN(1) = 1)
			
- 
				И еще почему-то не всегда с первого раза срабатывает  IF(ISKEYDOWN(1) = 1)
 
 Потому, что в цикле ожидания клика нет задержки. Начинает сильно тупить. Нужно добавить через ELSE.
 При ожидании кнопок есть.
 А какой смысл несет переменная $avt ? Я не могу понять, зачем такие сложности.
- 
				Благодаря "$avt" условие IF($avt=1) выполняется через 1 раз. 1, 3, 5 раз и т.д. Может как-то по другому можно.... Я так придумала. 
 Добавила задержку, но не через ELSE, а выше ифа.
 Нашла ошибку в WHILE
 Было$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
 
Надо так$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) пропала. Проблема с записью/чтением координат для автоматов осталась
- 
				Благодаря "$avt" условие IF($avt=1) выполняется через 1 раз. 1, 3, 5 раз и т.д. Может как-то по другому можно....
 
 Зачем - понятно, не понятно зачем так сложно.
 DEFINE($avt,0)
 IF($avt=0)
 // да. Действие.
 $avt=1
 ELSE
 $avt=0
 END_IF
- 
				Для поиска вставь в начале старта вывод в лог размеры массивов и их содержимое. Я с телефона, поэтому сам не могу посмотреть.
 И проще было бы не жонглировать вспомогательными массивами, а вместо arrpop считывать по индексу. Так на много проще всё.
- 
				Добавила вывод в лог размера массивов и содержимое. Помогло понять, что проблема в этом куске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)
Координаты автомата берутся не из массива, а вообще не понятно откуда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 =================================
 
Заменила на такой сценарий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 версии, появился второй автомат, но координаты берутся не из массива....
 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 =================================
 
- 
				Нашла ошибку в переменных. В 115 строке вместо $rec_a было $rec. На 4.9 версии все работает. На 4.8 почему-то глючит. Vint, спасибо помог сократить скрипт, что привело к ускорению нахождения ошибки!