Найти тему

08.07.2021. Автокликер и Трофейная рыбалка 2: рефакторинг кода

доработанная с сайта Drasler.ru
доработанная с сайта Drasler.ru

Сегодня 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С"