If - ElseIf / Imagesearch Hilfe

01/09/2014 12:43 flumio#1
Hallo Community,

Ich brauch mal wieder eure Hilfe, weil ich nach langen Suchen und rumprobieren nicht weiter komme.

Code:
Func step2()
	If _WaitForImageSearch("data/munze.bmp",60000,1,$x,$y,10) > 0 Then ;sucht die Münze und findet sie *funktioniert 
		MouseClick("left", $x ,$y, 1, 1)
		Sleep(500)
		MouseClick("left", 686 ,374, 1, 10) ;spielt die Karte
	ElseIf _WaitForImageSearch("data/munze.bmp",60000,1,$x,$y,10) > 0 Then ;findet er die Münze nicht *funktioniert 
		_WaitForImageSearch("data/morlok1.bmp",60000,1,$x,$y,10) Or _WaitForImageSearch("data/morlok1.bmp",60000,1,$x,$y,10) Or _WaitForImageSearch("data/arkane1.bmp",60000,1,$x,$y,10) ;soll er nach den 3 Möglichkeiten suchen *funktioniert  nicht!
		MouseClick("left", $x ,$y, 1, 1)
		Sleep(500)
		MouseClick("left", 686 ,374, 1, 10)
	EndIf ;entweder er spielt die Karten, oder halt nicht.
	If _WaitForImageSearch("data/fertig1.bmp",60000,1,$x,$y,10) or _WaitForImageSearch("data/fertig2.bmp",60000,1,$x,$y,10) > 0 Then
		MouseClick("left", $x ,$y, 1, 1)
	EndIf ;nach dem er ja spielte oder nicht, solll er hier nun die Runde beenden *funktioniert 
EndFunc
Problem ist, so wie ich das suchen nach den 3 Möglichkeiten geschrieben habe, funktioniert es nicht, Autoit bringt eine Fehlermeldung.
Ich finde leider nicht heraus wie es richtig sein sollte.

Ich möchte gerne das so hinbekommen,
suche münze = true
-> münze klicken und spielen
suche münze = false
-> nach 3 anderen suchen = 1 davon true
-> klicken und spielen
wenn das true ist
runde beenden
suche nach den 3 aber = false
runde beenden

Ich hoffe mal das man mich versteht was ich meine und der eine oder andere mir schreiben könnte wie es richtig funktioniert.
01/09/2014 13:53 Croco™#2
Du hast nach dem ElseIf das nächste If vergessen !?
Quote:
_WaitForImageSearch("data/morlok1.bmp",60000,1,$x,$y,10) Or _WaitForImageSearch("data/morlok1.bmp",60000,1,$x,$y,10) Or _WaitForImageSearch("data/arkane1.bmp",60000,1,$x,$y,10)
Oder ist diese Zeile so beabsichtigt ?
01/09/2014 15:52 flumio#3
Ich habe mich nur an die Hilfe gehalten,
Code:
If <expression> Then
    statements
    ...
[ElseIf expression-n Then
    [elseif statements ... ]]
    ...
[Else
    [else statements]
    ...
EndIf
Hier würde doch nach ElseIf dann EndIf folgen ?
Oder wo müsste deiner Meinung nach das If hin ?
01/09/2014 16:14 alpines#4
_WaitForImage wartet glaube ich 1 Minute bei 60.000ms, warum scannst du nicht einfach nach dem Bild und wenns nicht da ist ElseIf statt 1 Minute für jedes zu warten?
_WaitForImage ist unnötig, benutz es nicht.
01/09/2014 20:16 flumio#5
beim hin und her probieren gar nicht beobachtet, nun gut es liegt nicht an der Zeit.

Ich brauch _WaitForImageSearch, weil ich darauf Warten muss etwas zu finden um denen Rundenstart zu signalisieren.

Mein größeres Problem liegt in der Schreibweise.
Ich glaube hier hab ich es besser beschrieben.
Code:
If 		Image > 0 Then ;Zeigt mir das meine Runde startet 	;hier streickt AutoIt wegen 2x Then ?
		Image > 0 Then ;erste Karte gefunden 			;hier streickt AutoIt wegen 2x Then ?
		Karte spielen
ElseIf	        Image < 0 Then ;erste Karte nicht gefunden
		If Image Or Image Or Image > 0 Then ;3 anderen Karten 	;hier streickt AutoIt wegen If-Then, ohne würde es gehen, aber ich brauche ja If-Then
		Karte spielen
;ein Else brauch ich ja nicht, weil wenn bei den 3 Karten = false danach eh Runde beenden kommt
Endif
		Runde beenden
btw. er Arbeitet ja in der If von oben nach unten
Image = true Then ;Runde startet
Image = true Then
Karte spielen

und das lässt Autoit irgendwie leider nicht zu ... das ich zwei mal so suche

Schreibe ich,
If ImageStart = true Then
EndIf
If ImageErsteKarte = true Then
Karte spielen
EndIf
If ImageErsteKarte = false Then
3 Karten suchen ; erlaubt Autoit wieder nicht
EndIf

Würde alles bis auf die 3 Karten funktionieren, aber die anderen Sachen hätten nichts mit einander zu tun.
01/10/2014 14:52 YatoDev#6
Quote:
Originally Posted by flumio View Post
beim hin und her probieren gar nicht beobachtet, nun gut es liegt nicht an der Zeit.

Ich brauch _WaitForImageSearch, weil ich darauf Warten muss etwas zu finden um denen Rundenstart zu signalisieren.
Do
Until ImageSearch = 1 ?
01/10/2014 17:52 flumio#7
Es ist ja schön und nett, aber ihr versucht mir dort zu helfen wo ich gar nicht nach Hilfe frage.
z.B. habe ich nie was zum Thema der Zeit/Timing gefragt, auch hat das nichts mit meinem Problem zu tun.

Ich hoffe ihr versteht mich nicht falsch, es soll nicht böse oder beleidigend klingen.

Schon paar mal erwähnt das es an der Richtigkeit der Schreibweise des Codes scheitert. Doch hier konnte mir leider keiner der Profis bis lang helfen.

Nach langem hinein steigern, hab ich mir die richtige Vorgehensweise erlernt und konnte somit den Code auch Fehlerfrei schreiben.
Ja, es lag nur daran, alles andere war richtig.
Ich kann mit guten gewissen sagen, ein Profi, hätte das auf den ersten blick erkennen müssen. Weil ich nun weiß wie einfach es eigentlich war.

Nichts-desto-trotz bedanke ich mich bei jeden der sich die Mühe gemacht hat, mein Problem zu lösen. Nämlich niemanden xD

Versteht es bitte nicht falsch, ich habe mich nur geärgert weil es total einfach war, aber mich einige Stunden gekostet hat es zu beheben. Nun bin ich aber auch selber wieder schlauer geworden.
Der Lern-Effekt war da. :D