2015년 9월 28일 3일차 시작
==========================================================
모양을 완성했으니 어떻게 세븐나이츠를 컴퓨터에서 자동화를 시킬 것인지 생각 해야겠지?
먼저 컴퓨터에서 세븐나이츠를 실행 시키는 방법을 알아보자.
컴퓨터에서 실행 시키는 방법은 에뮬레이터를 이용하는 방법.
내가 알고 있는 에뮬레이터들은
1. 블루스택
2. 앤디
3. 지니모션
4. 녹스
5. 윈드로이
6. 미러링 (ex. 모비즌)
대략 이정도?
어떤 에뮬레이터를 사용하는지에 따라서 만들어지는 프로그램의 방향도 달라지니깐
잘 선택해야지.
에뮬레이터에서 가장 만만한게
1번 블루스택과 6번 미러링 정도?
그 외에는 내가 잘 모르거나 또는 컴퓨터 사양이 많이 받쳐줘야 되기 때문!
1번 , 6번 어느걸로 할까.....는
1번으로 해야지 6번으로 하면 휴대폰을 계속 켜놔야 해서 번거롭잖아.
에뮬레이터를 정했으니 자동화를 어떻게 시킬껀지 정해야겠지?
자동화를 시키는 방법은 2가지
1. PixelSearch
2. ImageSearch
1번과 2번에는 서로 장단점이 있어.
1번의 경우는 속도가 빠르고 정확도가 높은 장점을 지니고 있지.
대신에 다른 컴퓨터에서 제대로 작동이 되질 않을 수도 있고,
만드는데 시간이 오래 걸려.
2번의 경우는 어느 컴퓨터에서도 작동이 되어질 확률이 높아.
대신에 속도가 1번보다는 느리고 엉뚱한 것을 검색 할 수도 있고,
만드는데 시간이 오래 걸리지 않아.
그렇다면 몇 번으로 만드는게 좋을까?
역시 2번이지!
왜냐하면 꼭 내 컴퓨터에서만 쓴다는 보장이 없잖아?
내 컴퓨터를 못쓰게 되는 상황이 올 수도 있는거지.
그리고 만드는데 걸리는 시간도 1번 보다는 훨~씬 덜 걸리니깐 말이야!
그렇다면 ImageSerch에 대해서 잘 알아야겠지?
ImageSerch , 저장할X , 저장할Y , 시작X1 , 시작Y1 , 끝X2 , 끝Y2 , ImageFile(옵션)
참고로 이미지서치는 CoordMood를 사용해야 돼.
단순히 ImageSerch만 컴퓨터 해상도 내에 어디서 무엇이 진행되는지는 알 수가 없어.
왜냐고? 컴퓨터 해상도 내에 에뮬레이터가 어디있는지 알고 시작점을 만든다는 거야?
그러니깐 에뮬레이터가 어디있는지 알아야 겠지?
에뮬레이터가 어디있는지 알기 위해선 다른 명령어가 필요해.
바로 WinGetPos 라는 명령어지.
음.... 어디 한번 만들어 볼까?
========================== 코드 ============================
==========================================================
음..... 문제가 있군.
Msgbox와 전체적으로 말이야.
Msgbox가 뜨게되면 진행이 멈추게 되고,
저렇게 소스를 사용 하게되면
계속해서 저걸 써야하니 줄수가 매우 길어지겠지..?
어디보자.. 줄일 수 있는 방법이....
========================== 코드 ============================
이렇게 만들면
내가 필요할 때마다 호출 하면 되니,
저 많은 것들이 1줄로 요약 된다는 말씀.
이미지검색(ClickX,ClickY,UseError,경로) <- 와 같이 말이야.
그렇다면 소스는 해결 되었고,
Msgbox는 어떻게 처리할까?
음... 음....
아! 기록! 기록을 남기자!!
Gui에 기록을 저장 하는거지. 그러면 어디서 오류가 나는지도 알 수 있고,
진행도 막히지 않으니 좋잖아?
기록이라.. 어떻게 구현해야 될까?
가능성이 있는 Gui는 ListBox밖에 없나?
ListBox를 이용해서 함수를 만든 다음에 내가 필요한 곳에서
기록이 되도록 만들면 되려나?? 에라 모르겠다!! 일단 만들어보자!
========================== 코드 =========-==================
이런식으로 기록을 할 함수를 만들어 두고
변수 := "기록"
MyLog(변수)
또는
기록 := "기록"
변수 = %기록%
MyLog(변수)
를 이용해서 ListBox에 계속해서 Text를 남기면서
마지막에 적힌 Text를 선택을 하도록 만드는거지!
그렇다면 위에 코드도 이렇게 바뀔수가 있지!
이런식으로 말이야!
=========================================================
후... 오늘은 여기까지!
이미지검색 함수를 만들었으니,
마우스 관련 함수(클릭)와키보드 관련 함수를 만들면 함수 부분은 이로써 끝!!
※주의※
내가 올려둔 코드를 이용 또는 스크랩 할 때는 반드시 출처를 남겨주길 바래.
그리고 소스에 일부로 오타를 냈으니 찾아서 수정하길 바래~
2015년 9월 28일 3일차 끝~
==========================================================
==========================================================
모양을 완성했으니 어떻게 세븐나이츠를 컴퓨터에서 자동화를 시킬 것인지 생각 해야겠지?
먼저 컴퓨터에서 세븐나이츠를 실행 시키는 방법을 알아보자.
컴퓨터에서 실행 시키는 방법은 에뮬레이터를 이용하는 방법.
내가 알고 있는 에뮬레이터들은
1. 블루스택
2. 앤디
3. 지니모션
4. 녹스
5. 윈드로이
6. 미러링 (ex. 모비즌)
대략 이정도?
어떤 에뮬레이터를 사용하는지에 따라서 만들어지는 프로그램의 방향도 달라지니깐
잘 선택해야지.
에뮬레이터에서 가장 만만한게
1번 블루스택과 6번 미러링 정도?
그 외에는 내가 잘 모르거나 또는 컴퓨터 사양이 많이 받쳐줘야 되기 때문!
1번 , 6번 어느걸로 할까.....는
1번으로 해야지 6번으로 하면 휴대폰을 계속 켜놔야 해서 번거롭잖아.
에뮬레이터를 정했으니 자동화를 어떻게 시킬껀지 정해야겠지?
자동화를 시키는 방법은 2가지
1. PixelSearch
2. ImageSearch
1번과 2번에는 서로 장단점이 있어.
1번의 경우는 속도가 빠르고 정확도가 높은 장점을 지니고 있지.
대신에 다른 컴퓨터에서 제대로 작동이 되질 않을 수도 있고,
만드는데 시간이 오래 걸려.
2번의 경우는 어느 컴퓨터에서도 작동이 되어질 확률이 높아.
대신에 속도가 1번보다는 느리고 엉뚱한 것을 검색 할 수도 있고,
만드는데 시간이 오래 걸리지 않아.
그렇다면 몇 번으로 만드는게 좋을까?
역시 2번이지!
왜냐하면 꼭 내 컴퓨터에서만 쓴다는 보장이 없잖아?
내 컴퓨터를 못쓰게 되는 상황이 올 수도 있는거지.
그리고 만드는데 걸리는 시간도 1번 보다는 훨~씬 덜 걸리니깐 말이야!
그렇다면 ImageSerch에 대해서 잘 알아야겠지?
ImageSearch, OutputVarX, OutputVarY, X1, Y1, X2, Y2, ImageFile
간단하게 해석하자면 이정도랄까...?ImageSerch , 저장할X , 저장할Y , 시작X1 , 시작Y1 , 끝X2 , 끝Y2 , ImageFile(옵션)
참고로 이미지서치는 CoordMood를 사용해야 돼.
단순히 ImageSerch만 컴퓨터 해상도 내에 어디서 무엇이 진행되는지는 알 수가 없어.
왜냐고? 컴퓨터 해상도 내에 에뮬레이터가 어디있는지 알고 시작점을 만든다는 거야?
그러니깐 에뮬레이터가 어디있는지 알아야 겠지?
에뮬레이터가 어디있는지 알기 위해선 다른 명령어가 필요해.
바로 WinGetPos 라는 명령어지.
WinGetPos [, X, Y, Width, Height, WinTitle, WinText, ExcludeTitle, ExcludeText]
이걸 이용하면 간단하게 ImageSerach를 사용할 수가 있지.음.... 어디 한번 만들어 볼까?
========================== 코드 ============================
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
CoordMood , Peixel , Screen ; 좌표를 Peixel 모드 / 찾는 화면을 Screen 모드
WinGetPos , GetX , GetY , GetW , GetH , BlueStacks App Player ; 블루스택의 좌표를 가져옴
SysSet , GetF , 7 ; 테마의 프레임 값을 가져옴.
SysSet , GetC , 4 ; 테마의 캡션 값을 가져옴.
; 블루스택의 시작점 좌표 구하기
sX := GetX + GetF
sY := GetY + GetF + GetC
; 블루스택의 끝점 좌표 구하기
sX2 := GetX + GetW - GetF
sY2 := GetY + GetH - GetF
; 오차 60%로 찾는다.
ImageFile := ;아직 이미지 파일 없음.
ImageSerach , vX , vY , sX , sY , sX2 , sY2 , *100 %ImageFile% ;아직 이미지 파일이 없음.
IfExist , %ImageFile% ; 만약에 이미지 파일이 없다면.
{
msgbox , 48 , 오류 , 이미지 파일이 해당 경로에 없음. %ImageFile%
}
if(ErrorLevel = 2)
{
msgbox , 48 , 오류 , ImageSearch에 오류가 생김.
}
if(ErrorLevel = 1)
{
msgbox , 48 , 오류 , 이미지를 찾지 못함.
}
if(ErrorLevel = 0) ; 검색에 성공하면 클릭할 X , Y값을 저장.
{
ClickX := vX - GetX - 22 ;좌표가 Screen모드이기 때문에 GetX와 GetY값을 빼줌.
ClickY := vY - GetY - 22 ;22는 블루스택 하단 검은색 줄.
}
|
==========================================================
음..... 문제가 있군.
Msgbox와 전체적으로 말이야.
Msgbox가 뜨게되면 진행이 멈추게 되고,
저렇게 소스를 사용 하게되면
계속해서 저걸 써야하니 줄수가 매우 길어지겠지..?
어디보자.. 줄일 수 있는 방법이....
========================== 코드 ============================
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
이미지검색(ByRef ClickX , ByRef ClickY , UseError , ImageFile)
{
CoordMood , Peixel , Screen ; 좌표를 Peixel 모드 / 찾는 화면을 Screen 모드
WinGetPos , GetX , GetY , GetW , GetH , BlueStacks App Player ; 블루스택의 좌표를 가져옴
SysSet , GetF , 7 ; 테마의 프레임 값을 가져옴.
SysSet , GetC , 4 ; 테마의 캡션 값을 가져옴.
; 블루스택의 시작점 좌표 구하기
sX := GetX + GetF
sY := GetY + GetF + GetC
; 블루스택의 끝점 좌표 구하기
sX2 := GetX + GetW - GetF
sY2 := GetY + GetH - GetF
ImageSerach , vX , vY , sX , sY , sX2 , sY2 , *%UseError% %ImageFile% ;아직 이미지 파일이 없음.
IfExist , %ImageFile% ; 만약에 이미지 파일이 없다면.
{
msgbox , 48 , 오류 , 이미지 파일이 해당 경로에 없음. %ImageFile%
return false
}
if(ErrorLevel = 2)
{
msgbox , 48 , 오류 , ImageSearch에 오류가 생김.
return false
}
if(ErrorLevel = 1)
{
msgbox , 48 , 오류 , 이미지를 찾지 못함.
return false
}
if(ErrorLevel = 0) ; 검색에 성공하면 Click할 X , Y값을 저장.
{
ClickX := vX - GetX - 22 ; 좌표가 Screen모드이기 때문에 GetX와 GetY값을 빼줌.
ClickY := vY - GetY - 22 ; 22는 블루스택 하단 검은색 줄.
return true
}
}
|
이렇게 만들면
내가 필요할 때마다 호출 하면 되니,
저 많은 것들이 1줄로 요약 된다는 말씀.
이미지검색(ClickX,ClickY,UseError,경로) <- 와 같이 말이야.
그렇다면 소스는 해결 되었고,
Msgbox는 어떻게 처리할까?
음... 음....
아! 기록! 기록을 남기자!!
Gui에 기록을 저장 하는거지. 그러면 어디서 오류가 나는지도 알 수 있고,
진행도 막히지 않으니 좋잖아?
기록이라.. 어떻게 구현해야 될까?
가능성이 있는 Gui는 ListBox밖에 없나?
ListBox를 이용해서 함수를 만든 다음에 내가 필요한 곳에서
기록이 되도록 만들면 되려나?? 에라 모르겠다!! 일단 만들어보자!
========================== 코드 =========-==================
1
2
3
4
5
6
7
8
9
10
11
12
|
MyLog(WriteLog)
{
GuiControl, Font , LogList
LogList := WriteLog "|"
GuiControl, , LogList , %LogList%
GuiControl, Choose , %nWriteLog%
nWriteLog++
return
}
|
이런식으로 기록을 할 함수를 만들어 두고
변수 := "기록"
MyLog(변수)
또는
기록 := "기록"
변수 = %기록%
MyLog(변수)
를 이용해서 ListBox에 계속해서 Text를 남기면서
마지막에 적힌 Text를 선택을 하도록 만드는거지!
그렇다면 위에 코드도 이렇게 바뀔수가 있지!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
이미지검색(ByRef ClickX , ByRef ClickY , UseError , ImageFile)
{
CoordMood , Peixel , Screen ; 좌표를 Peixel 모드 / 찾는 화면을 Screen 모드
WinGetPos , GetX , GetY , GetW , GetH , BlueStacks App Player ; 블루스택의 좌표를 가져옴
SysSet , GetF , 7 ; 테마의 프레임 값을 가져옴.
SysSet , GetC , 4 ; 테마의 캡션 값을 가져옴.
; 블루스택의 시작점 좌표 구하기
sX := GetX + GetF
sY := GetY + GetF + GetC
; 블루스택의 끝점 좌표 구하기
sX2 := GetX + GetW - GetF
sY2 := GetY + GetH - GetF
ImageSerach , vX , vY , sX , sY , sX2 , sY2 , *%UseError% %ImageFile% ;아직 이미지 파일이 없음.
IfExist , %ImageFile% ; 만약에 이미지 파일이 없다면.
{
WriteLog := " 오류 발생 " ImageFile " 없음."
MyLog(WriteLog)
return false
}
if(ErrorLevel = 2)
{
WriteLog := " 오류 발생 !!"
MyLog(WriteLog)
return false
}
if(ErrorLevel = 1)
{
WriteLog := " 이미지 못 찾음 !! " ImageFile
MyLog(WriteLog)
return false
}
if(ErrorLevel = 0) ; 검색에 성공하면 Click할 X , Y값을 저장.
{
WriteLog := " 이미지 찾음 !! " ImageFile
MyLog(WriteLog)
ClickX := vX - GetX - 22 ; 좌표가 Screen모드이기 때문에 GetX와 GetY값을 빼줌.
ClickY := vY - GetY - 22 ; 22는 블루스택 하단 검은색 줄.
return true
}
}
|
이런식으로 말이야!
=========================================================
후... 오늘은 여기까지!
이미지검색 함수를 만들었으니,
마우스 관련 함수(클릭)와키보드 관련 함수를 만들면 함수 부분은 이로써 끝!!
※주의※
내가 올려둔 코드를 이용 또는 스크랩 할 때는 반드시 출처를 남겨주길 바래.
그리고 소스에 일부로 오타를 냈으니 찾아서 수정하길 바래~
2015년 9월 28일 3일차 끝~
==========================================================
개발일지 쓰시나바요 재미있네요 ^^ 자주 들어와서 구경하고 갈게요
답글삭제