Kleines Problem brauche Hilfe

10/12/2013 16:52 relax90#1
Hallo,
ich habe ein kleines Problem mit einem Code ( ich weis er ist für Könner schwachsinnig weils viel zu umständlich geschrieben ist aber nur so versteh ich ihn ^^ )

Ich habe eine Funktion geschrieben für einen kleinen Bot leider kommt immer die Meldung Func has no matching endfunc statement und weis nicht warum das so ist.

Hier ist der Code.
Code:
Func Gegnersuchen()
			    $result1 = _ImageSearch ("Bogenschütze.bmp",1,$x1,$y1,0)
	  If 		$result1 = 1 Then
			    Return True
		 ElseIf
			   $result2 = _ImageSearch ("Schwert.bmp",1,$x2,$y2,0)	
			If $result2 = 1 Then
			   Return True
		 ElseIf
			   $result3 = _Imagesearch ("Skelett.bmp",1,$x3,$y3,0)
			If $result3 = 1 Then
			   Return True
		 ElseIf
			   $result4 = _Imagesearch ("Skelett2.bmp",1,$x4,$y4,0)
			If $result4 = 1 Then
			   Return True
		 ElseIf
			   $result5 = _Imagesearch ("Skelett3.bmp",1,$x5,$y5,0)
			If $result5 = 1 Then
			   Return True
		 ElseIf
			   $result6 = _Imagesearch ("Speerkämpfer.bmp",1,$x6,$y6,0)
			If $result6 = 1 Then
			   Return True
		 ElseIf
			   $result7 = _Imagesearch ("Wurm.bmp",1,$x7,$y7,0)
			If $result7 = 1 Then
			   Return True
		 ElseIf $collectTreasure Then
			   $result8 = _Imagesearch ("Schatztruhe.bmp",1,$x8,$y8)
			If $result8 = 1 Then
			Return True
		 EndIf
		 Else
			   Return False
		 EndIf
EndFunc

Schonmal danke :D
10/12/2013 16:57 alpines#2
So ist es teilweise richtig
Code:
Func Gegnersuchen()
			    $result1 = _ImageSearch ("Bogenschütze.bmp",1,$x1,$y1,0)
	  If 		$result1 = 1 Then
			    Return True
		 ElseIf
			   $result2 = _ImageSearch ("Schwert.bmp",1,$x2,$y2,0)	
			If $result2 = 1 Then
			   Return True
		 ElseIf
			   $result3 = _Imagesearch ("Skelett.bmp",1,$x3,$y3,0)
			If $result3 = 1 Then
			   Return True
		 ElseIf
			   $result4 = _Imagesearch ("Skelett2.bmp",1,$x4,$y4,0)
			If $result4 = 1 Then
			   Return True
		 ElseIf
			   $result5 = _Imagesearch ("Skelett3.bmp",1,$x5,$y5,0)
			If $result5 = 1 Then
			   Return True
		 ElseIf
			   $result6 = _Imagesearch ("Speerkämpfer.bmp",1,$x6,$y6,0)
			If $result6 = 1 Then
			   Return True
		 ElseIf
			   $result7 = _Imagesearch ("Wurm.bmp",1,$x7,$y7,0)
			If $result7 = 1 Then
			   Return True
		 ElseIf $collectTreasure Then
			   $result8 = _Imagesearch ("Schatztruhe.bmp",1,$x8,$y8)
			If $result8 = 1 Then
			Return True
		 Else
			   Return False
		 EndIf
EndFunc
Das EndIf vor dem Else muss weg, desweiteren fehlen extrem viele EndIfs, weil du die einzeiligen If-Verzweigungen auf 2 Zeilen packst.
Code:
If $result8 = 1 Then
Return True
Das ist falsch, das unten hier ist richtig
Code:
If $result8 = 1 Then Return True
10/12/2013 17:41 relax90#3
habe es nun so abgeändert wie Sie mir geschrieben haben allerdings gibt er mir immernoch den gleichen Fehlercode

Code:
Func Gegnersuchen()
			    $result1 = _ImageSearch ("Bogenschütze.bmp",1,$x1,$y1,0)
	  If 		$result1 = 1 Then Return True
		 ElseIf
			   $result2 = _ImageSearch ("Schwert.bmp",1,$x2,$y2,0)	
			If $result2 = 1 Then Return True
		 ElseIf
			   $result3 = _Imagesearch ("Skelett.bmp",1,$x3,$y3,0)
			If $result3 = 1 Then Return True
		 ElseIf
			   $result4 = _Imagesearch ("Skelett2.bmp",1,$x4,$y4,0)
			If $result4 = 1 Then Return True
		 ElseIf
			   $result5 = _Imagesearch ("Skelett3.bmp",1,$x5,$y5,0)
			If $result5 = 1 Then Return True
		 ElseIf
			   $result6 = _Imagesearch ("Speerkämpfer.bmp",1,$x6,$y6,0)
			If $result6 = 1 Then Return True
		 ElseIf
			   $result7 = _Imagesearch ("Wurm.bmp",1,$x7,$y7,0)
			If $result7 = 1 Then Return True
		 ElseIf $collectTreasure Then
			   $result8 = _Imagesearch ("Schatztruhe.bmp",1,$x8,$y8)
			If $result8 = 1 Then Return True
		 EndIf
		 Else
			   Return False
EndFunc
normalerweise sollte das doch richtig sein diese Funktion macht keine weiter Funktion auf. Es gibt auch einen Anfang und ein Ende.

Okay ich habe bereits herausgefunden, dass ich erst die ganzen Funktionen einfügen muss damit es funktioniert ^^
Wollte ursprünglich erst schauen, dass die Funktionen alle i.O. sind und mich dann an den schweren Teil machen nämlich das ganze zusammen laufen lassen ^^
10/13/2013 19:30 lolkop#4
Quote:
Originally Posted by relax90 View Post
habe es nun so abgeändert wie Sie mir geschrieben haben allerdings gibt er mir immernoch den gleichen Fehlercode

Code:
Func Gegnersuchen()
			    $result1 = _ImageSearch ("Bogenschütze.bmp",1,$x1,$y1,0)
	  If 		$result1 = 1 Then Return True
		 ElseIf
			   $result2 = _ImageSearch ("Schwert.bmp",1,$x2,$y2,0)	
			If $result2 = 1 Then Return True
		 ElseIf
			   $result3 = _Imagesearch ("Skelett.bmp",1,$x3,$y3,0)
			If $result3 = 1 Then Return True
		 ElseIf
			   $result4 = _Imagesearch ("Skelett2.bmp",1,$x4,$y4,0)
			If $result4 = 1 Then Return True
		 ElseIf
			   $result5 = _Imagesearch ("Skelett3.bmp",1,$x5,$y5,0)
			If $result5 = 1 Then Return True
		 ElseIf
			   $result6 = _Imagesearch ("Speerkämpfer.bmp",1,$x6,$y6,0)
			If $result6 = 1 Then Return True
		 ElseIf
			   $result7 = _Imagesearch ("Wurm.bmp",1,$x7,$y7,0)
			If $result7 = 1 Then Return True
		 ElseIf $collectTreasure Then
			   $result8 = _Imagesearch ("Schatztruhe.bmp",1,$x8,$y8)
			If $result8 = 1 Then Return True
		 EndIf
		 Else
			   Return False
EndFunc
normalerweise sollte das doch richtig sein diese Funktion macht keine weiter Funktion auf. Es gibt auch einen Anfang und ein Ende.

Okay ich habe bereits herausgefunden, dass ich erst die ganzen Funktionen einfügen muss damit es funktioniert ^^
Wollte ursprünglich erst schauen, dass die Funktionen alle i.O. sind und mich dann an den schweren Teil machen nämlich das ganze zusammen laufen lassen ^^
1. ElseIf ist eine normale abfrage und erwartet somit eine expression und vorallem ein Then

bsp:
Code:
Dim $x=5
If $x=1 Then
	ConsoleWrite("$x = 1"&@CRLF)
ElseIf $x=5 Then
	ConsoleWrite("$x = 5"&@CRLF)
EndIf
2. was soll dieses ganze sinnlose gerüst dort überhaupt?
alles was du tust ist überprüfen ob werte 1 sind.... ist das der fall wird wahr zurück gegeben... ist es nicht der fall wird false zurück gegeben...

das erledigt man in funktionen so:
Code:
Func Gegnersuchen()
	If _ImageSearch ("Bogenschütze.bmp",1,$x1,$y1,0) = 1 Then Return True
	If _ImageSearch ("Schwert.bmp",1,$x2,$y2,0) = 1 Then Return True
	If _Imagesearch ("Skelett.bmp",1,$x3,$y3,0) = 1 Then Return True
	If _Imagesearch ("Skelett2.bmp",1,$x4,$y4,0) = 1 Then Return True
	If _Imagesearch ("Skelett3.bmp",1,$x5,$y5,0) = 1 Then Return True
	If _Imagesearch ("Speerkämpfer.bmp",1,$x6,$y6,0) = 1 Then Return True
	If _Imagesearch ("Wurm.bmp",1,$x7,$y7,0) = 1 Then Return True
	If $collectTreasure And _Imagesearch ("Schatztruhe.bmp",1,$x8,$y8) = 1 Then Return True
	Return False
EndFunc
3. du arbeitest mit 8 verschiedenen bildern mit jeweils unterschiedlichen x und y werten.
das ganze arbeitet man ordnungsgemäß mit einem array ab und erhält am ende
Code:
Dim $array[8][3] = [["Bogenschütze.bmp",100,100],...,["Schatztruhe.bmp",800,800]]
Func Gegnersuchen($array) ;$array[index][bild,x,y]
	For $i=0 To UBound($array)-1
		_ImageSearch($array[$i][0],1, $array[$i][1], $array[$i][2],0) = 1 Then Return True
	Next
	Return False
EndFunc