Сегодня 08 июля 2021 года 9 часов 20 минут, четверг. +25
Всем доброго дня!
В прошлой статье
22.06.2021 - 05.07.2021. Автокликер и Трофейная рыбалка 2: определяем ночь и день
нагородили код с переходами к меткам, в коде остались неиспользуемые огрызки, многократно используются схожие команды. Сам код в комментарии к приведенной выше статье.
Пора заняться оптимизацией кода!
У нас три удочки и 3 проверки на подсечки:
IF_PICTURE_IN (558,672,644,755, $str2, -1, 100)
Кроме этого, есть еще проверки времени.
Думаю можно использовать подпрограммы (SUB) с параметрами.
область проверки и имя контрольной картинки можно поместить в массив и передавать в подпрограмму.
Команда
TFREADARR ("file", $arr) - загружает массив из файла
позволяет загружать массив из текстового файла, поэтому параметры пропишем в текстовых файлах.
В проектах кликера создаем новую папку "Night". В ней будет храниться выполняемый скрипт. Далее создаем папку "Param" для хранения текстовых файлов для массивов. Нужна еще папка "Pic" для контрольных картинок.
В папке парам создаем текстовый файл "1_UD.txt" с содержимым:
558
672
644
755
pic\top_001.bmp
Проверяем работу загрузки и передачи параметров в подпрограмму
TFREADARR ("Param\1_UD.TXT", $1_array)
LOGWRITE ($1_array[0])
LOGWRITE ($1_array[1])
LOGWRITE ($1_array[2])
LOGWRITE ($1_array[3])
LOGWRITE ($1_array[4])
Лог файл:
10:00:54 558
10:00:54 672
10:00:54 644
10:00:54 755
10:00:54 top_001.bmp
Отлично! Параметры загружаются!
В подпрограмму можно передавать несколько переменных. Массив в подпрограмму не передается.
Ладно, отлично, но можно передавать имя текстового файла для формирования массива.
Надо бы передавать еще код удочки. Чтобы не заблудиться пишем:
SUB(Check_Fish, $file_name) // подпрограмма с параметрами
// тело выполняется только после вызова
TFREADARR ($file_name, $array)
$Cod_UD = $array[0]
$x_1 = $array[1]
$y_1 = $array[2]
$x_2 = $array[3]
$y_2 = $array[4]
$pic_name = $array[5]
END_SUB
Check_Fish("Param\1_UD.TXT") // вызов подпрограммы (обязательно ниже подпрограммы)
12 часов 04 минуты
Далее все переходы к меткам перемещаем в подпрограммы. Проверку окна продажи также можно поместить в отдельную подпрограмму. Избавляемся от ненужных циклов по формированию имен файлов контрольных картинок.
Оптимизировал до такой степени, что кликер уходит в завис.
Ищу причину.
17 часов 54 минуты
Как выяснилось кликер зависал на SUB(push)
Переименовал в push_it перестал зависать. Что-то не нашел типовой команды push. Но видно конфликтовал с этим.
Все бы ничего, но TFREADARR ($file_name, $array) каждый раз дописывает новые значения не очищая массив
UNDEFINE ($var) спасет отца русской демократии!
UNDEFINE ($var) - удаляет переменную из памяти
Чудненько! Из наших здоровенных портянок получился вполне небольшой кодик.
Вот пример ловли без учета времени.
Тело программы:
$check = 0
//активизируем окно игры
LCLICK(1002,278)
WAIT(1)
//fishing:
WHILE($check = 0) // цикл ожидания
KEYPRESS(#1)
WAIT(1)
KEYPRESS(#2)
WAIT(1)
KEYPRESS(#3)
WAIT(1)
Check_Fish("Param\1_UD.TXT")
Check_Fish("Param\2_UD.TXT")
Check_Fish("Param\3_UD.TXT")
WAITMS(25)
END_CYC
Подпрограмма (выше тела):
SUB(Check_Fish, $file_name) // подпрограмма с параметрами
// тело выполняется только после вызова
TFREADARR ($file_name, $array)
//LOGWRITE(arrsize($array))
$Cod_UD = $array[0]
$x_1 = $array[1]
$y_1 = $array[2]
$x_2 = $array[3]
$y_2 = $array[4]
$pic_name = $array[5]
GETSCREEN($x_1,$y_1,$x_2,$y_2)
COLORMODE(8)
IF_PICTURE_IN ($x_1,$y_1,$x_2,$y_2, $pic_name, -1, 100)
IF ($Cod_UD = 1)
KEYPRESS(#1)
END_IF
IF ($Cod_UD = 2)
KEYPRESS(#2)
END_IF
IF ($Cod_UD = 3)
KEYPRESS(#3)
END_IF
WAIT(1)
RDOWN(RND(1010,1030),RND(540,565))
WAIT(1)
MOVE(RND(1010,1025),RND(300,315))
Wait(1)
KEYDOWN(#space)
WAIT(10)
KEYUP(#space)
WAIT(1)
RUP(RND(1010,1025),RND(300,315))
WAIT(10)
//продать рыбу
LCLICK(RND(925,930),RND(715,723))
WAIT(2)
//Заброс
LCLICK(RND(1010,1020),RND(645,650))
WAIT(5)
END_IF
UNDEFINE($array)
END_SUB
Код ловли ночью в комментариях.
Канал "Дневник программиста 1С"