Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: scat on June 03, 2020, 11:17:41 AM
-
у Феди $xu1 = 10 яблок
у Васи $xu2 = 20 яблок
у Валеры $xu3 = 30 яблок
какую формулу написать что у Валеры $xu3 больше всего яблок??
или из массива переменных выделить наибольшее число
$xu1 = 0 // федя
$xu2 = 0 // вася
$xu3 = 0 // валера
WAITMS(500)
GETSCREEN
SCANPICTURE($ARR_SCAN, 759,436, 841,694, "xu1.bmp", -1, 100)
$ARR_NUM = 0
WHILE ($ARR_NUM < ARRSIZE($ARR_SCAN))
$X = $ARR_SCAN [$ARR_NUM]
INC($ARR_NUM,1)
$Y = $ARR_SCAN [$ARR_NUM]
INC($ARR_NUM,1)
INC($xu1, 1)
WAITMS(100)
END_CYC
UNDEFINE($ARR_SCAN)
GETSCREEN
SCANPICTURE($ARR_SCAN, 759,436, 841,694, "xu2.bmp", -1, 100)
$ARR_NUM = 0
WHILE ($ARR_NUM < ARRSIZE($ARR_SCAN))
$X = $ARR_SCAN [$ARR_NUM]
INC($ARR_NUM,1)
$Y = $ARR_SCAN [$ARR_NUM]
INC($ARR_NUM,1)
INC($xu2, 1)
WAITMS(100)
END_CYC
UNDEFINE($ARR_SCAN)
GETSCREEN
SCANPICTURE($ARR_SCAN, 759,436, 841,694, "xu3.bmp", -1, 100)
$ARR_NUM = 0
WHILE ($ARR_NUM < ARRSIZE($ARR_SCAN))
$X = $ARR_SCAN [$ARR_NUM]
INC($ARR_NUM,1)
$Y = $ARR_SCAN [$ARR_NUM]
INC($ARR_NUM,1)
INC($xu3, 1)
WAITMS(100)
END_CYC
UNDEFINE($ARR_SCAN)
LOGWRITE ("федя яблок: ", $xu1,"шт" ) // 10
LOGWRITE ("вася яблок", $xu2,"шт" ) // 20
LOGWRITE ("валера яблок ", $xu3,"шт") //30
-
какую формулу написать что у Валеры $xu3 больше всего яблок??
или из массива переменных выделить наибольшее число
Вот как то так, примерно.
Скрипт переделал. Координаты найденных картинок можно добавить если нужны.
LOGCLEAR
STRSEPARATE("Федя:Вася:Валера", ":", $collectors) // Сборщики яблок, через разделитель ":"
FOR($i = 0, $i < ARRSIZE($collectors))
GETSCREEN
// Ищем картинки с именами "Федя.bmp", "Вася.bmp", "Валера.bmp"
SCANPICTURE($ARR_SCAN, 759,436, 841,694, STRCONCAT($collectors[$i], ".bmp"), -1, 100)
ARRPUSH($count, ARRSIZE($ARR_SCAN)/2) // Количество яблок найденных текущим сборщиком, добавляем в массив
INIWRITE("config.ini", ARRSIZE($ARR_SCAN)/2, $collectors[$i], "ЯБЛОКИ") // Записываем в базу количество найденных сборщиком яблок и имя сборщика
UNDEFINE($ARR_SCAN)
END_CYC
// LOGWRITE ("Федя яблок: ", $count[0]," шт." ) // 10
// LOGWRITE ("Вася яблок: ", $count[1]," шт." ) // 20
// LOGWRITE ("Валера яблок: ", $count[2]," шт.") //30
ARRSORT($count) // Сортируем массив с количеством яблок
$max_count = $count[ARRSIZE($count-1)] // Максимальное количество яблок, в сортированном массиве из цифр, будет в последней ячейке
// LOGWRITE ($max_count)
$winner = INIREAD("config.ini", $max_count, "ЯБЛОКИ") // Берем из базы имя сборщика, собравшего максимальное количество яблок
// LOGWRITE ($winner)
LOGWRITE ("Больше всех яблок собрал ", $winner, " (", $max_count, " шт.)") // Выводим результат в лог
HALT
Да, еще GETSCREEN надо вынести из цикла, если по условиям задачи достаточно одного снимка экрана.
-
Другой вариант скрипта. Вместо связки "ini-файл + массив", теперь один массив, со склеенными строками "количество + имя" и STRFILTER для "расклейки" этих строк. Так должно работать быстрее.
LOGCLEAR
STRSEPARATE("Федя:Вася:Валера", ":", $names)
GETSCREEN
FOR($i = 0, $i < ARRSIZE($names))
// Ищем картинки с именами "Федя.bmp", "Вася.bmp", "Валера.bmp"
SCANPICTURE($ARR_SCAN, 759,436, 841,694, STRCONCAT($names[$i], ".bmp"), -1, 100)
ARRPUSH($arr, STRCONCAT(ARRSIZE($ARR_SCAN)/2, $names[$i])) // Количество найденных яблок добавляем в массив
LOGWRITE (STRCONCAT($names[$i], " яблок: ", ARRSIZE($ARR_SCAN)/2, " шт."))
UNDEFINE($ARR_SCAN)
END_CYC
ARRSORT($arr) // Сортируем массив с количеством яблок
// Максимальное количество яблок, в сортированном массиве из цифр, будет в последней ячейке
$max_count = STRFILTER($arr[ARRSIZE($arr) - 1], "0123456789", 1)
//LOGWRITE ($max_count)
LOGWRITE ("Больше всех яблок собрал ", STRFILTER($arr[ARRSIZE($arr) - 1], "0123456789", 0), " (", $max_count, " шт.)")
HALT
Еще как вариант - сравнивать количество яблок условием внутри цикла и сохранять в переменную только наибольшую цифру + имя. Без массивов.
-
Еще как вариант - сравнивать количество яблок условием внутри цикла и сохранять в переменную только наибольшую цифру + имя. Без массивов.
Если возможно поподробнее
массив необязателен важна скорость просчета и вывод конечного результата
-
Тогда так. Совсем просто стало.)) Вывод сообщений в лог много времени отнимает, по этому лишние (отладочные) сообщения лучше отключать.
LOGCLEAR
STRSEPARATE("Федя:Вася:Валера", ":", $names)
GETSCREEN
FOR($i = 0, $i < ARRSIZE($names))
// Ищем картинки с именами "Федя.bmp", "Вася.bmp", "Валера.bmp"
SCANPICTURE($ARR_SCAN, 685,222, 1115,608, STRCONCAT($names[$i], ".bmp"), -1, 100)
IF($max_count < ARRSIZE($ARR_SCAN)/2)
$max_count = ARRSIZE($ARR_SCAN)/2
$max_name = $names[$i]
END_IF
LOGWRITE (STRCONCAT($max_name, " яблок: ", ARRSIZE($ARR_SCAN)/2, " шт."))
UNDEFINE($ARR_SCAN)
END_CYC
LOGWRITE ("Больше всех яблок собрал ", $max_name, " (", $max_count, " шт.)")
HALT
-
(https://i.ibb.co/bRVFqsg/42fb31ds-1920.jpg) (https://ibb.co/gF8dHSM)
3 вариант самое то Спасибо тебе добрый человек