본문 바로가기
이미지맥스 그리고 루아(lua)/[응용] 내장함수 활용

[이미지맥스] 테이블로 나열한 여러 이미지를 서치 혹은 클릭하는 함수 isTable(), clickTable()

by 위치결정 2021. 7. 18.
반응형

2021.03.29 - [이미지맥스, lua/이미지맥스 ImageMax] - [이미지맥스] ImageSearch()의 결과값을 boolean 값으로 받기

2021.07.18 - [이미지맥스, lua/이미지맥스 ImageMax] - [이미지맥스] 여러 이미지검색 결과를 boolean 값으로 받기 (isImage()함수mk.2)

2021.05.04 - [이미지맥스, lua/이미지맥스 ImageMax] - [이미지맥스] 루아 내부함수를 응용해보자! -4- (clickImage()함수)

 

계속해서 이미지의 검색 결과를 boolean 값으로 리턴 받는 방법에 대해 연구하고있습니다.

이번에도 동일하게 MultiImage() 함수를 활용하여 테이블 형태로 검색할 이미지를 나열하여 일괄적으로 찾을수 있는 방법에 대해 연구해봅니다.

-- 테이블 이미지서치 함수 (결과 boolean 반환)
function isTable(_img_table, _operator_str)
    local boolean
    if type(_img_table) == 'table' then
        if _operator_str == 'or' or _operator_str == '|' or _operator_str == nil then
            OPERATOR = '|'
        elseif _operator_str == 'and' or _operator_str == '&' then
            OPERATOR = '&'
        end

        local img_str
        for index, value in ipairs(_img_table) do
            if index == 1 then
                img_str = value
            else
                img_str = img_str..OPERATOR..value
            end
        end

        if MultiImage(img_str) == 1 then
            boolean = true
        end
    end
    return boolean
end

-- 인수 : 검색할 이미지 이름이 저장된 테이블 변수, AND 혹은 OR 동작 구분 식별자



-- 테이블 이미지클릭 함수
function clickTable(_img_table)
    local boolean
    if type(_img_table) == 'table' then
        for key, value in pairs(_img_table) do
            local ret, acc, ix, iy, sx, sy = ImageSearch(value)
            if ret == 1 then
                print('click Image : '..value)
                local rx = ix - sx
                local ry = iy - sy
                Mouse(LBUTTON, CLICK, ix, iy, 0, 0, rx, ry)
                boolean = true
            end
        end
    end
    return boolean
end

-- 인수 : 클릭할 이미지 이름이 저장된 테이블 변수

검색할 여러이미지를 생성하여 테이블에 이미지의 이름을 스트링형태로 저장하고

이미지검색 함수 첫번째 인수로 지정합니다. 그리고 두번째 인수로 OR검색을 할지 AND검색을 할지 선택를 합니다. 'or', '|', 혹은 아무것도 기입하지 않으면 OR검색을 실행하며, 'and', '&'를 기입하면 AND 검색을 합니다.

 

이미지클릭 함수에도 동일한 테이블을 지정하면, 테이블에 저장된 이미지들을 for반복문을 통해 검색후 발견시 해당 이미지를 클릭합니다.

 

예를 들어 버튼1부터 버튼10까지 검색하여 결과를 받고싶다면 테이블에 버튼1부터 버튼10까지 삽입을 해놓은 후 테이블의 모든 이미지를 멀티이미지 OR조건으로 검색하게 하는 것이죠.

 

-- sample
btns = {'btn_1', 'btn_2', 'btn_3', 'btn_4', 'btn_5', 'btn_6', 'btn_7', 'btn_8', 'btn_9', 'btn_10'}
if isTable(btns) then
    print('버튼을 발견하였습니다.')
    clickTable(btns)
end


-- 내장함수만을 사용하여 작성시
if ImageSearch('btn_1') == 1 then
    print('버튼을 발견하였습니다.')
    ImageClick('btn_1')
end
if ImageSearch('btn_2') == 1 then
    print('버튼을 발견하였습니다.')
    ImageClick('btn_2')
end
if ImageSearch('btn_3') == 1 then
    print('버튼을 발견하였습니다.')
    ImageClick('btn_3')
end
if ImageSearch('btn_4') == 1 then
    print('버튼을 발견하였습니다.')
    ImageClick('btn_4')
end
if ImageSearch('btn_5') == 1 then
    print('버튼을 발견하였습니다.')
    ImageClick('btn_5')
end
if ImageSearch('btn_6') == 1 then
    print('버튼을 발견하였습니다.')
    ImageClick('btn_6')
end
if ImageSearch('btn_7') == 1 then
    print('버튼을 발견하였습니다.')
    ImageClick('btn_7')
end
if ImageSearch('btn_8') == 1 then
    print('버튼을 발견하였습니다.')
    ImageClick('btn_8')
end
if ImageSearch('btn_9') == 1 then
    print('버튼을 발견하였습니다.')
    ImageClick('btn_9')
end
if ImageSearch('btn_10') == 1 then
    print('버튼을 발견하였습니다.')
    ImageClick('btn_10')
end

여러개의 버튼을 테이블로 정의 해놓고 테이블을 이미지 검색 함수로 실행할 변수로 지정하면 테이블에 저장된 모든 이미지를 검색하고 발견한 이미지를 클릭합니다.

 

추후 테이블의 이미지 이름만 변경하면 검색과 클릭을 손쉽게 가능하게됩니다.

 

여러 이미지에 대해 검색 및 클릭을 구현할때 간결해집니다.

반응형

댓글