ImageSearch not working correctly ?

Ask gaming related questions (AHK v1.1 and older)
Iterer
Posts: 3
Joined: 15 Mar 2018, 05:15

ImageSearch not working correctly ?

15 Mar 2018, 05:18

Hi,
I've made a script that search image and push buttons for a game it's simple. There is 4 numbers written (1, 2, 3, 4) that the script should press in order, for instance : 1 2 3 are displayed so the script must push 1 2 3 in order to win the game.
The problem is that we don't know when the numbers spawn on the screen as well as how many number we can have it goes from 1 number in the middle of the screen to 3 so I captured the possibilities and where the numbers spawn on the screen.

[1|2|3|4] [1|2|3|4] [1|2|3|4]
[1|2|3|4] [1|2|3|4]
[1|2|3|4]

Above is the pattern of how numbers can spawn on the screen : 3 numbers, 2 or 1 and here is my not-working code :

Code: Select all

#NoEnv

name1=1.png
name2=2.png
name3=3.png
name4=4.png

; all 450, 420, 1500, 750

ifWinExist, XX
{
	OutputDebug, %A_Now%: Launching.
	
	WinActivate
	Sleep, 50
	Loop
	{
		Left()

		CoordMode, Mouse, Screen
		MouseGetPos, xx, yy
		Tooltip %xx%`, %yy%
	}
}

Left() 
{
	OutputDebug, %A_Now%: Left()
	
	ImageSearch, AX, AY, 700, 590, 830, 710, *30 %name1% 
	if ErrorLevel = 0
	{
		Send, {1 down}
		Sleep, 10
		Send, {1 up}
		
		OutputDebug, %A_Now%: 1 found for left.
		
		Middle()
	}
	else if ErrorLevel = 1 
	{
		ImageSearch, AX, AY, 700, 590, 830, 710, *30 %name2% 
		if ErrorLevel = 0
		{
			Send, {2 down}
			Sleep, 10
			Send, {2 up}
			
			OutputDebug, %A_Now%: 2 found for left.
			
			Middle()
		}
		else if ErrorLevel = 1 
		{
			ImageSearch, BZ, BY, 700, 590, 830, 710, *30 %name3% 
			if ErrorLevel = 0
			{
				Send, {3 down}
				Sleep, 10
				Send, {3 up}
				
				OutputDebug, %A_Now%: 3 found for left.
				
				Middle()
			}
			else if ErrorLevel = 1 
			{
				ImageSearch, CX, CZ, 700, 590, 830, 710, *30 %name4% 
				if ErrorLevel = 0
				{
					Send, {4 down}
					Sleep, 10
					Send, {4 up}
					
					OutputDebug, %A_Now%: 4 found for left.
					
					Middle()
				}
				else if ErrorLevel = 1 
				{
					LeftMiddle() 
				}
			}
		}
	}
}

LeftMiddle() 
{
	OutputDebug, %A_Now%: LeftMiddle()
	
	ImageSearch, AX, AY, 800, 590, 930, 710, *30 %name1% 
	if ErrorLevel = 0
	{
		Send, {1 down}
		Sleep, 10
		Send, {1 up}
		
		OutputDebug, %A_Now%: 1 found for left middle.
		
		RightMiddle()
	}
	else if ErrorLevel = 1 
	{
		ImageSearch, AX, AY, 800, 590, 930, 710, *30 %name2% 
		if ErrorLevel = 0
		{
			Send, {2 down}
			Sleep, 10
			Send, {2 up}
			
			OutputDebug, %A_Now%: 2 found for left middle.
			
			RightMiddle()
		}
		else if ErrorLevel = 1 
		{
			ImageSearch, BZ, BY, 800, 590, 930, 710, *30 %name3% 
			if ErrorLevel = 0
			{
				Send, {3 down}
				Sleep, 10
				Send, {3 up}
				
				OutputDebug, %A_Now%: 3 found for left middle.
				
				RightMiddle()
			}
			else if ErrorLevel = 1 
			{
				ImageSearch, CX, CZ, 800, 590, 930, 710, *30 %name4% 
				if ErrorLevel = 0
				{
					Send, {4 down}
					Sleep, 10
					Send, {4 up}
					
					OutputDebug, %A_Now%: 4 found for left middle.
					
					RightMiddle()
				}
				else if ErrorLevel = 1 
				{
					Middle() 
				}
			}
		}
	}
}

Middle() 
{
	Sleep, 5
	
	OutputDebug, %A_Now%: Middle()
	
	ImageSearch, AX, AY, 900, 590, 1030, 710, *30 %name1% 
	if ErrorLevel = 0
	{
		Send, {1 down}
		Sleep, 10
		Send, {1 up}
			
		OutputDebug, %A_Now%: 1 found for middle.
	}
	else if ErrorLevel = 1 
	{
		ImageSearch, AX, AY, 900, 590, 1030, 710, *30 %name2% 
		if ErrorLevel = 0
		{
			Send, {2 down}
			Sleep, 10
			Send, {2 up}
				
			OutputDebug, %A_Now%: 2 found for middle.
		}
		else if ErrorLevel = 1 
		{				
			ImageSearch, BZ, BY, 900, 590, 1030, 710, *30 %name3% 
			if ErrorLevel = 0
			{
				Send, {3 down}
				Sleep, 10
				Send, {3 up}
					
				OutputDebug, %A_Now%: 3 found for middle.
			}
			else if ErrorLevel = 1 
			{
				ImageSearch, CX, CZ, 900, 590, 1030, 710, *30 %name4% 
				if ErrorLevel = 0
				{
					Send, {4 down}
					Sleep, 10
					Send, {4 up}
						
					OutputDebug, %A_Now%: 4 found for middle.
				}
			}
		}
	}
}

RightMiddle() 
{
	Sleep, 5
	
	OutputDebug, %A_Now%: RightMiddle()
	
	ImageSearch, AX, AY, 1000, 590, 1130, 710, *30 %name1% 
	if ErrorLevel = 0
	{
		Send, {1 down}
		Sleep, 10
		Send, {1 up}
		
		OutputDebug, %A_Now%: 1 found for right middle.
	}
	else if ErrorLevel = 1 
	{
		ImageSearch, AX, AY, 1000, 590, 1130, 710, *30 %name2% 
		if ErrorLevel = 0
		{
			Send, {2 down}
			Sleep, 10
			Send, {2 up}
			
			OutputDebug, %A_Now%: 2 found for left right middle.
		}
		else if ErrorLevel = 1 
		{
			ImageSearch, BZ, BY, 1000, 590, 1130, 710, *30 %name3% 
			if ErrorLevel = 0
			{
				Send, {3 down}
				Sleep, 10
				Send, {3 up}
				
				OutputDebug, %A_Now%: 3 found for right middle.
			}
			else if ErrorLevel = 1 
			{
				ImageSearch, CX, CZ, 1000, 590, 1130, 710, *30 %name4% 
				if ErrorLevel = 0
				{
					Send, {4 down}
					Sleep, 10
					Send, {4 up}
					
					OutputDebug, %A_Now%: 4 found for right middle.
				}
			}
		}
	}
}

Right() 
{
	Sleep, 5
	
	OutputDebug, %A_Now%: 3 Right()
	
	ImageSearch, AX, AY, 1100, 590, 1230, 710, *30 %name1% 
	if ErrorLevel = 0
	{
		Send, {1 down}
		Sleep, 10
		Send, {1 up}
		
		OutputDebug, %A_Now%: 1 found for right.
	}
	else if ErrorLevel = 1 
	{
		ImageSearch, AX, AY, 1100, 590, 1230, 710, *30 %name2% 
		if ErrorLevel = 0
		{
			Send, {2 down}
			Sleep, 10
			Send, {2 up}
			
			OutputDebug, %A_Now%: 2 found for right.
		}
		else if ErrorLevel = 1 
		{
			ImageSearch, BZ, BY, 1100, 590, 1230, 710, *30 %name3% 
			if ErrorLevel = 0
			{
				Send, {3 down}
				Sleep, 10
				Send, {3 up}
				
				OutputDebug, %A_Now%: 3 found for right.
			}
			else if ErrorLevel = 1 
			{
				ImageSearch, CX, CZ, 1100, 590, 1230, 710, *30 %name4% 
				if ErrorLevel = 0
				{
					Send, {4 down}
					Sleep, 10
					Send, {4 up}
					
					OutputDebug, %A_Now%: 4 found for right.
				}
			}
		}
	}
}
Thanks for your help.
Iterer
Posts: 3
Joined: 15 Mar 2018, 05:15

Re: ImageSearch not working correctly ?

15 Mar 2018, 05:20

I forgot to tell that if I only use my Middle() function it works for the game with 1 number.
Helgef
Posts: 4709
Joined: 17 Jul 2016, 01:02
Contact:

Re: ImageSearch not working correctly ?

15 Mar 2018, 05:26

Note that inside the functions, the variables name1...4 aren't visible, you can use global.

Cheers.
Iterer
Posts: 3
Joined: 15 Mar 2018, 05:15

Re: ImageSearch not working correctly ?

15 Mar 2018, 05:43

So I must use the key word global at the start of every functions.
Helgef
Posts: 4709
Joined: 17 Jul 2016, 01:02
Contact:

Re: ImageSearch not working correctly ?

15 Mar 2018, 05:59

or make the variables super-global, eg,

Code: Select all

global name1 := "1.png"
f()
f(){
	msgbox % name1
}
Cheers.

Return to “Gaming Help (v1)”

Who is online

Users browsing this forum: peter_ahk and 61 guests