Цитата(cirus @ 12.11.2018, 12:24)
Используйте эту версию пилота:
http://uopilot.uokit.comNight version Stable
Архив с картинками распаковать на диск C:\
Image.zip ( 20,54 килобайт )
Кол-во скачиваний: 257Открыть скрин из первого поста в paint'е, запустить скрипт.
код
Код
showwindow windowhandle minimize // свернуть пилот
wait 1000
// Поиск числа с помощью FindImage
init_arr %GetImage (1) 0 0 1920 1080 // координаты для поиска, StartX StartY EndX EndY
set linedelay 0
init_arr %picture 1 2 3 4 5 7 00 11 55 66 77 99 // имена картинок (0.bmp, 1.bmp и т. д.)
init_arr %symbol 1 2 3 4 5 7 0 1 5 6 7 9 // символ соответствующий имени, т. е. картинка 0.bmp соответствует 0
set $path "C:\Image" // папка с картинками
set $bmp "*.bmp*" // формат картинок
set #deltaY 30 // расстояние между строками (можно указать высоту картинок)
set #deltaspace 40 // допустимое расстояние между цифрами, иначе будет считаться что это не одно число
set #accuracy 90 // точность поиска для Findimage
set #deviation 3 // погрешность оттенка для Findimage
set #wait 2 // пауза между поиском картинок, если указать меньше искать будет быстрее, но нагрузит процессор
set #timeproc 2000 // время (в мсек) для поиска картинок, если 0 не выйдет из процедуры пока не найдётся хотя бы 1 картинка
set #repeatimage 2 // допустимое смещение координат, если используется несколько видов одной картинки
dir (%path $path $bmp)
set delimiter ' '
while 1 = 1
set size(%result) // уничтожить массив с предыдущими результатами
set size(%coord) // уничтожить массив с предыдущими координатами
call test %picture %symbol %GetImage %path #deltaY #deltaspace #accuracy #deviation #wait #timeproc #repeatimage // процедура поиска
// save_array %result C:\Users\abc\Desktop\result111.txt // массив с результатами поиска
// save_array %coord C:\Users\abc\Desktop\coord111.txt // массив с координатами чисел
if size(%result[]) > 1 // если найдено 2 числа
// ТУТ НУЖНЫЕ ДЕЙСТВИЯ
hint (36 clBlue 400, 300 (%result[1 1] %result[1 2]))
if %result[1 1] > %result[1 2]
// если первое число больше второго
// нужные действия
end_if
/////////////
else
hint Числа не найдены
end_if
end_while
// процедура поиска и сортировки
proc test %picture %symbol %GetImage %path #deltaY #deltaspace #accuracy #deviation #wait #timeproc #repeatimage
set #GetStartX %GetImage [1 1]
set #GetStartY %GetImage [1 2]
set #GetEndX %GetImage [1 3]
set #GetEndY %GetImage [1 4]
set #current_script current_script
// загрузка картинок в память
if size(%path) > 0 // если картинки найдены
for #i 1 size(%path)
for #j 1 size(%picture)
if %path [#i 3] = %picture [#j]
set #n #n + 1
set %image [#n] LoadImage(%path [#i 1])
set %number [#n] %symbol [#j]
break
end_if
end_for
end_for
else
log Картинки в: $path не найдены
log Скрипт остановлен
stop_script #current_script
end_if
// поиск картинок и их сортировка
set size(%result1)
set size(%coord_tmp)
while size(%result1) = 0 and (#timeproc > timer or #timeproc = 0)
set #z 0
set %get GetImage(#GetStartX #GetStartY #GetEndX #GetEndY) // сохранить часть экрана в память
set #v %get [1 1]
for #i 1 size(%number)
set #a Findimage(0 0 %get [1 2] %get [1 3] (%image[#i 1]) %a #v #accuracy -1 #deviation) // поиск
if #a < 0
log Ошибка поиска картинки. Код ошибки: #a
log Скрипт остановлен
stop_script #current_script
end_if
if #a > 0
for #j 1 size(%a)
set #z #z + 1
init_arr %result1 (1 1 #z) %number[#i] %a[#j 1] %a[#j 2] // запись результатов поиска в массив
end_for
end_if
wait #wait
end_for
if size(%result1) > 0
gosub sortY // сортировка по Y и X
end_if
set $b DeleteImage(%get[1 1]) // удалить изображение, полученное GetImage
end_while
goto end // выйти из процедуры
:sortY
///// удаление повторных координат, если используется несколько видов одной картинки
set #size 0
set %tmp %result1
set size(%result1)
for #i 1 size(%tmp[1])
set #break 0
for #n 1 #size
set #xrepeat %tmp[2 #i] - %result1[2 #n]
set #yrepeat %tmp[3 #i] - %result1[3 #n]
if abs(#xrepeat) <= #repeatimage and abs(#yrepeat) <= #repeatimage
set #break 1
break
end_if
end_for
if #break = 0
set #size #size + 1
init_arr %result1 (1 1 #size) %tmp [1 #i] %tmp [2 #i] %tmp [3 #i]
end_if
end_for
///////
set #z 0
set #z1 0
set #z2 1
set #z4 0
sort_array %result1 -3
while 1 = 1
set #z 0
set size(%tmp)
for #i #z2 eval(size(%result1 [1]) - 1)
set #j #i + 1
set #x %result1 [3 #i] - %result1 [3 #j]
if abs(#x) < #deltaY
set #z #z + 1
init_arr %tmp (1 1 #z) %result1 [1 #i] %result1 [2 #i] %result1 [3 #i]
else
set #z #z + 1
init_arr %tmp (1 1 #z) %result1 [1 #i] %result1 [2 #i] %result1 [3 #i]
break
end_if
end_for
set #z2 #z2 + #z
if #z2 = size(%result1[])
set #x %result1 [3 #i] - %result1 [3 #j]
if abs(#x) > #deltaY
set #jj #j
sort_array %tmp -2
set #z1 #z1 + 1
init_arr %result (#z1) %tmp [1]
set %coord_tmp [#z1] %tmp [2 1], %tmp [3 1]
set %coord.#current_script [#z1] %tmp [2 #z], %tmp [3 #z]
gosub space
set size(%tmp)
set #z #z + 1
init_arr %tmp (1 1 #z) %result1 [1 #jj] %result1 [2 #jj] %result1 [3 #jj]
set #z1 #z1 + 1
set %result.#current_script [#z1] %tmp [1]
set %coord.#current_script [#z1] %tmp [2 #z], %tmp [3 #z]
gosub end
end_if
set #z #z + 1
init_arr %tmp (1 1 #z) %result1 [1 #j] %result1 [2 #j] %result1 [3 #j]
sort_array %tmp -2
set #z1 #z1 + 1
init_arr %result (#z1) %tmp [1]
set %coord_tmp [#z1] %tmp [2 1], %tmp [3 1]
gosub space
break
else
sort_array %tmp -2
set #z1 #z1 + 1
init_arr %result (#z1) %tmp [1]
set %coord_tmp [#z1] %tmp [2 1], %tmp [3 1]
gosub space
end_if
end_while
return
:space
set #z3 0
set size(%space)
set #z4 #z4 + 1
//посчитать где нужны пробелы
for #i 1 eval(size(%tmp[]) - 1)
set #j #i + 1
set #space %tmp [2 #i] - %tmp [2 #j]
if abs(#space) > #deltaspace
set #z3 #z3 + 1
set %space[#z3] #j
set #size_coord 1
while %coord_tmp[#z1 #size_coord] != ""
set #size_coord #size_coord + 1
end_while
set %coord_tmp [#z1 #size_coord] %tmp [2 #j], %tmp [3 #j]
end_if
end_for
// вставить пробелы
for #i 1 size(%space)
set $str %result [#z4]
set $str insert(" " $str %space[#i])
set #j #i + 1
set %space[#j] %space[#j] + #i
set %result [#z4] $str
end_for
// сохранение массива в основном скрипте
for #i 1 size(%result)
set size(%tmp1)
init_arr %tmp1 (1) %result [#i]
for #j 1 size(%tmp1[1])
set %result.#current_script [#i #j] %tmp1 [1 #j]
set %coord.#current_script [#i #j] %coord_tmp [#i #j]
end_for
end_for
return
:end
end_proc
Hello, can u help me? Its dont work =/