Что нового

[Массивы] Как присвоить поиску пикселя значения и заставить выполнять определённые команды

Yuriy09

Новичок
Сообщения
11
Репутация
0
должно как нашло пиксель со значением "346" выполнять определённые действия,вроде бы делаю всё правильно,но работает не так как надо ,не ищет пиксель,от собственно и код,так понятней будет
Код:
HotKeySet("{esc}",close)

Func close()
	Exit
EndFunc

Dim $con[5]

$con[0] = 0xFFECB7 
$con[1] = 0x520003 
$con[2] = 0xFFE70A 
$con[3] = 0x229201 
$con[4] = 0xCEC5B5 

$1 = PixelSearch(620,270,660,305,$con)
$2 = PixelSearch(660,270,700,305,$con)
$3 = PixelSearch(700,270,740,305,$con)
$4 = PixelSearch(740,270,780,305,$con)
$5 = PixelSearch(780,270,820,305,$con)
$6 = PixelSearch(820,270,860,305,$con)

$1 = "1"
$2 = "2"
$3 = "3"
$4 = "4"
$5 = "5"
$6 = "6"

While 1
If "346" Then
	MouseClick("left",840,290)
	MouseClick("left",805,290)
EndIf
WEnd
 

vovsla

Осваивающий
Сообщения
607
Репутация
36
Код:
HotKeySet("{esc}",close)

Func close()
    Exit
EndFunc

Dim $con[5]

$con[0] = 0xFFECB7
$con[1] = 0x520003
$con[2] = 0xFFE70A
$con[3] = 0x229201
$con[4] = 0xCEC5B5

While 1
	If PixSearch($con) Then
		MouseClick("left",840,290)
		MouseClick("left",805,290)
	EndIf
WEnd

Func Func PixSearch($PixArr)
	If PixelSearch(620,270,660,305,$PixArr[0]) Then Return True
	If PixelSearch(660,270,700,305,$PixArr[1]) Then Return True
	If PixelSearch(700,270,740,305,$PixArr[2]) Then Return True
	If PixelSearch(740,270,780,305,$PixArr[3]) Then Return True
	If PixelSearch(780,270,820,305,$PixArr[4]) Then Return True
	Return False
EndFunc



Добавлено:
Сообщение автоматически объединено:

Что за значение 346 не понятно. Глядя на код не сразу догадался, видимо нужно выполнять действия если одновременно найдены пиксели которым присвоены номера 3, 4 и 6 ? И видимо нужно искать не конкретный пиксель, а по всему массиву пикселей? Может лучше использовать _ImageSearch ?
 
Автор
Y

Yuriy09

Новичок
Сообщения
11
Репутация
0
потом ещё надо будет дописывать код,сейчас "346" потом добавлю "124" ,"235" и ... выполнятся клик будет по разным координатам


Добавлено:
Сообщение автоматически объединено:

Vovsla сказал(а):


Добавлено:
Сообщение автоматически объединено:

Что за значение 346 не понятно. Глядя на код не сразу догадался, видимо нужно выполнять действия если одновременно найдены пиксели которым присвоены номера 3, 4 и 6 ? И видимо нужно искать не конкретный пиксель, а по всему массиву пикселей? Может лучше использовать _ImageSearch ?


да,нужно искать по всему массиву разные пиксели и там где "346" если нашло то выполнять действия,потом ещё допишу на "124" и тд,всё по разным координатам будет кликать
 

vovsla

Осваивающий
Сообщения
607
Репутация
36
Не понятно. Есть 5 пикселей разного цвета и 6 координат
Ищем 1 пиксель из 5 по 6 координатам. И что считать успешным поиском? Когда пиксель 1 найден хотя-бы по одному из координат или по всем? В общем т.к. много непонятного вот функция которая выдает 2D массив, дальше можно выставлять условие по любой комбинации результатов
Код:
#include <Array.au3>


HotKeySet("{esc}",close)

Func close()
    Exit
EndFunc

Dim $con[5]

$con[0] = 0xFFECB7
$con[1] = 0x520003
$con[2] = 0xFFE70A
$con[3] = 0x229201
$con[4] = 0xCEC5B5

$SearchResult=PixSearch($con)


Select
	Case $SearchResult[0][3]=1 And $SearchResult[0][4]=1 And $SearchResult[0][6]=1
		Click1()
EndSelect



While Sleep(100)
WEnd



Func PixSearch($PixArr)
	Dim $Result[UBound($PixArr)][6]
	For $PixArrNum=0 To UBound($PixArr)-1
		$Result[$PixArrNum][0]=PixelSearch(620,270,660,305,$PixArr[$PixArrNum])
		$Result[$PixArrNum][1]=PixelSearch(660,270,700,305,$PixArr[$PixArrNum])
		$Result[$PixArrNum][2]=PixelSearch(700,270,740,305,$PixArr[$PixArrNum])
		$Result[$PixArrNum][3]=PixelSearch(740,270,780,305,$PixArr[$PixArrNum])
		$Result[$PixArrNum][4]=PixelSearch(780,270,820,305,$PixArr[$PixArrNum])
		$Result[$PixArrNum][5]=PixelSearch(820,270,860,305,$PixArr[$PixArrNum])
	Next

    Return $Result
EndFunc

Func Click1()
	 MouseClick("left",840,290)
     MouseClick("left",805,290)
EndFunc
 
Автор
Y

Yuriy09

Новичок
Сообщения
11
Репутация
0
Vovsla сказал(а):
Не понятно. Есть 5 пикселей разного цвета и 6 координат
Ищем 1 пиксель из 5 по 6 координатам. И что считать успешным поиском? Когда пиксель 1 найден хотя-бы по одному из координат или по всем? В общем т.к. много непонятного вот функция которая выдает 2D массив, дальше можно выставлять условие по любой комбинации результатов

выполнение кода : в 6-и ячейках таблицы выпадает по 6 цветов в разном порядке,код должен найти 3 ячейки одного цвета по схеме 2 цвета стоит рядом друг с другом 3 цвет стоит через 1 ячейку и потом выполнить клик мышью ! По скрину если нашло красный цвет на 346 то клик на 6 ячейку потом на 5-ю
 

Вложения

  • табл.jpg
    табл.jpg
    15.7 КБ · Просмотры: 3

vovsla

Осваивающий
Сообщения
607
Репутация
36
Тогда я бы сделал наоборот. Если координаты появления пикселей известны, то нужно получить цвета пикселей по 6 точкам и сравнить их. Хотя, можно пользоваться и предыдущим скриптом.
 
Автор
Y

Yuriy09

Новичок
Сообщения
11
Репутация
0
Vovsla сказал(а):
Тогда я бы сделал наоборот. Если координаты появления пикселей известны, то нужно получить цвета пикселей по 6 точкам и сравнить их. Хотя, можно пользоваться и предыдущим скриптом.
Нечего не происходит когда запускаю твой код,а как будет тогда с imagesearch , там по координатам много одинакового пикселя в ячейках через paint случайно рассмотрел,pixelsearch к сожалению не подходит,от код с Pixelsearch который работает , как его потом на imagesearch перевести также с массивами и по короче если возможно:stars:
Код:
HotKeySet("{esc}",close)

Func close()
Exit
EndFunc

Dim $con[5],$Result[36]

$con[0] = 0x29261A
$con[1] = 0xFF0020 
$con[2] = 0xFFFF2C 
$con[3] = 0x00700D
$con[4] = 0xDFDFDE 

While 1

$Result[0]=PixResult(620,270,660,305,$con)
$Result[1]=PixResult(660,270,700,305,$con)
$Result[2]=PixResult(700,270,740,305,$con)
$Result[3]=PixResult(740,270,780,305,$con)
$Result[4]=PixResult(780,270,820,305,$con)
$Result[5]=PixResult(820,270,860,305,$con)

$Result[6] = PixResult(620,310,660,350,$con)
$Result[7] = PixResult(660,310,700,350,$con)
$Result[8] = PixResult(700,310,740,350,$con)
$Result[9] = PixResult(740,310,780,350,$con)
$Result[10] = PixResult(780,310,820,350,$con)
$Result[11] = PixResult(820,310,860,350,$con)

$Result[12] = PixResult(620,350,660,395,$con)
$Result[13] = PixResult(660,350,700,395,$con)
$Result[14] = PixResult(700,350,740,395,$con)
$Result[15] = PixResult(740,350,780,395,$con)
$Result[16] = PixResult(780,350,820,395,$con)
$Result[17] = PixResult(820,350,860,395,$con)

$Result[18] = PixResult(620,390,660,440,$con)
$Result[19] = PixResult(660,390,700,440,$con)
$Result[20] = PixResult(700,390,740,440,$con)
$Result[21] = PixResult(740,390,780,440,$con)
$Result[22] = PixResult(780,390,820,440,$con)
$Result[23] = PixResult(820,390,860,440,$con)

$Result[24] = PixResult(620,430,660,485,$con)
$Result[25] = PixResult(660,430,700,485,$con)
$Result[26] = PixResult(700,430,740,485,$con)
$Result[27] = PixResult(740,430,780,485,$con)
$Result[28] = PixResult(780,430,820,485,$con)
$Result[29] = PixResult(820,430,860,485,$con)

$Result[30] = PixResult(620,470,660,530,$con)
$Result[31] = PixResult(660,470,700,530,$con)
$Result[32] = PixResult(700,470,740,530,$con)
$Result[33] = PixResult(740,470,780,530,$con)
$Result[34] = PixResult(780,470,820,530,$con)
$Result[35] = PixResult(820,470,860,530,$con)

$va = PixelSearch(622, 220,648, 246,0x304F13,2)
If Not @error Then
line1()
EndIf
	Sleep(100)
WEnd

Func line1()
	If $result[6] = $result[13] And $result[13] = $result[18] Then
	MouseClick("left",680,370)
	MouseClick("left",640,370)
	Else
	If $result[7] = $result[12] And $result[12] = $result[19] Then
	MouseClick("left",680,370)
	MouseClick("left",640,370)
	Else
	If $result[8] = $result[13] And $result[13] = $result[20] Then
	MouseClick("left",680,370)
	MouseClick("left",720,370)
	Else
	If $result[7] = $result[14] And $result[14] = $result[19] Then
	MouseClick("left",680,370)
	MouseClick("left",720,370)
	Else
	If $result[8] = $result[15] And $result[15] = $result[20] Then
	MouseClick("left",720,370)
	MouseClick("left",760,370)
	Else
	If $result[9] = $result[14] And $result[14] = $result[21] Then
	MouseClick("left",720,370)
	MouseClick("left",760,370)
	Else
	If $result[9] = $result[16] And $result[16] = $result[21] Then
	MouseClick("left",760,370)
	MouseClick("left",800,370)
	Else
	If $result[10] = $result[15] And $result[15] = $result[22] Then
	MouseClick("left",760,370)
	MouseClick("left",800,370)
	Else
	If $result[10] = $result[17] And $result[17] = $result[22] Then
	MouseClick("left",800,370)
	MouseClick("left",840,370)
	Else
	If $result[11] = $result[16] And $result[16] = $result[23] Then
	MouseClick("left",800,370)
	MouseClick("left",840,370)
	Else
	If $result[12] = $result[19] And $result[19] = $result[24] Then
	MouseClick("left",640,410)
	MouseClick("left",680,410)
	Else
	If $result[13] = $result[18] And $result[18] = $result[25] Then
	MouseClick("left",680,410)
	MouseClick("left",640,410)
	Else
	If $result[13] = $result[20] And $result[20] = $result[25] Then
	MouseClick("left",720,410)
	MouseClick("left",680,410)
	Else
	If $result[14] = $result[19] And $result[19] = $result[26] Then
	MouseClick("left",720,410)
	MouseClick("left",680,410)
	Else
	If $result[15] = $result[20] And $result[20] = $result[27] Then
	MouseClick("left",720,410)
	MouseClick("left",760,410)
	Else
	If $result[14] = $result[21] And $result[21] = $result[27] Then
	MouseClick("left",720,410)
	MouseClick("left",760,410)
	Else
	If $result[16] = $result[21] And $result[21] = $result[28] Then
	MouseClick("left",760,410)
	MouseClick("left",800,410)
	Else
	If $result[15] = $result[22] And $result[22] = $result[27] Then
	MouseClick("left",760,410)
	MouseClick("left",800,410)
	Else
	If $result[16] = $result[23] And $result[23] = $result[28] Then
	MouseClick("left",800,410)
	MouseClick("left",840,410)
	Else
	If $result[17] = $result[22] And $result[22] = $result[29] Then
	MouseClick("left",800,410)
	MouseClick("left",800,410)
	Else
	If $result[18] = $result[25] And $result[25] = $result[30] Then
	MouseClick("left",640,450)
	MouseClick("left",680,450)
	Else
	If $result[19] = $result[24] And $result[24] = $result[31] Then
	MouseClick("left",640,450)
	MouseClick("left",680,450)
	Else
	If $result[19] = $result[26] And $result[26] = $result[31] Then
	MouseClick("left",720,450)
	MouseClick("left",680,450)
	Else
	If $result[20] = $result[25] And $result[25] = $result[32] Then
	MouseClick("left",720,450)
	MouseClick("left",680,450)
	Else
	If $result[20] = $result[27] And $result[27] = $result[32] Then
	MouseClick("left",720,450)
	MouseClick("left",760,450)
	Else
	If $result[21] = $result[26] And $result[26] = $result[33] Then
	MouseClick("left",720,450)
	MouseClick("left",760,450)
	Else
	If $result[21] = $result[28] And $result[28] = $result[33] Then
	MouseClick("left",760,450)
	MouseClick("left",800,450)
	Else
	If $result[22] = $result[27] And $result[27] = $result[34] Then
	MouseClick("left",760,450)
	MouseClick("left",800,450)
	Else
	If $result[22] = $result[29] And $result[29] = $result[35] Then
	MouseClick("left",800,450)
	MouseClick("left",840,450)
	Else
	If $result[23] = $result[28] And $result[28] = $result[35] Then
	MouseClick("left",800,450)
	MouseClick("left",840,450)
	EndIf
	EndIf
	EndIf
	EndIf
	EndIf
	EndIf
	EndIf
	EndIf
	EndIf
	EndIf
	EndIf
	EndIf
	EndIf
	EndIf
	EndIf
	EndIf
	EndIf
	EndIf
	EndIf
	EndIf
	EndIf
	EndIf
	EndIf
	EndIf
	EndIf
	EndIf
	EndIf
	EndIf
	EndIf
	EndIf
	Sleep(100)
	EndFunc

func PixResult($x1,$y1,$x2,$y2,$col)
	Local $result = -1
	for $i = 0 to UBound($col) - 1 				; перебираем все цвета
		PixelSearch($x1,$y1,$x2,$y2,$con[$i]) 	; ищем цвет
		if NOT @error Then 						; если цвет обнаружен
			$result = $i						; назначаем номер обнаруженного цвета
			ExitLoop 							; выходим из цикла
		EndIf
	Next

	Return $result 								; возвращаем номер обнаруженного цвета, если ни чего не нашел, то -1
endfunc
 
Верх