mit den schleifen krieg ichs nicht hin. bäuchte GOTO

  • Bräuchte dringend Unterstüzung,

    Gibt es eine möglichkeit von meinen "goto" (von allen) punkten zum start zu springen. Mit den schleifen funzt es leider nicht.

    :start

    MouseClick ( "left", 334 , 660, 2 )
    MouseClick ( "left", 511 , 674 )
    MouseClick ( "left", 590 , 547 )
    MouseClick ( "left", 299 , 635 )
    Sleep ( 13000 )
    MouseClick ( "left", 334 , 660 )

    If PixelGetColor( 424, 329 ) = "0x205048" Then
    goto:start
    EndIf

    MouseClick ( "left", 511 , 674 )
    MouseClick ( "left", 590 , 547 )
    MouseClick ( "left", 299 , 635 )
    Sleep ( 13000 )
    MouseClick ( "left", 334 , 660 )

    If PixelGetColor( 424, 329 ) = "0x205048" Then
    goto:start
    EndIf

    MouseClick ( "left", 511 , 674 )
    MouseClick ( "left", 590 , 547, 2 )
    MouseClick ( "left", 299 , 635 )
    Sleep ( 13000 )
    MouseClick ( "left", 334 , 660 )

    If PixelGetColor( 424, 329 ) = "0x205048" Then
    goto:start
    EndIf

  • Nein. Mein Ziel ist: das er nur dann zum start zurücksprinngt wenn die Pixel (rot im hexacode) erkannt werden. Sonst soll er den nächsten Absatz abarbeiten.

    Trotzdem danke für deine Antwort. Das mit
    func habe ich bereits versucht. (mehrfach) vileicht stelle ich mich irgendwie blöd an. :cursing:

  • Steh grad irgendwie aufm Schlauch... aber sollte es nicht so gehen?

    Spoiler anzeigen
    [autoit]

    $NextStep = False
    While 1
    MouseClick ( "left", 334 , 660, 2 )
    MouseClick ( "left", 511 , 674 )
    MouseClick ( "left", 590 , 547 )
    MouseClick ( "left", 299 , 635 )
    Sleep ( 13000 )
    MouseClick ( "left", 334 , 660 )

    [/autoit] [autoit][/autoit] [autoit]

    $NextStep = True
    If PixelGetColor( 424, 329 ) = "0x205048" Then $NextStep = False

    [/autoit] [autoit][/autoit] [autoit]

    If $NextStep Then
    MouseClick ( "left", 511 , 674 )
    MouseClick ( "left", 590 , 547 )
    MouseClick ( "left", 299 , 635 )
    Sleep ( 13000 )
    MouseClick ( "left", 334 , 660 )

    [/autoit] [autoit][/autoit] [autoit]

    $NextStep = True
    If PixelGetColor( 424, 329 ) = "0x205048" Then $NextStep = False
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $NextStep Then
    MouseClick ( "left", 511 , 674 )
    MouseClick ( "left", 590 , 547, 2 )
    MouseClick ( "left", 299 , 635 )
    Sleep ( 13000 )
    MouseClick ( "left", 334 , 660 )

    [/autoit] [autoit][/autoit] [autoit]

    If Not PixelGetColor( 424, 329 ) = "0x205048" Then ExitLoop
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    WEnd

    [/autoit]


    PS:

    [autoit]

    $NextStep = True
    If PixelGetColor( 424, 329 ) = "0x205048" Then $NextStep = False

    [/autoit][autoit][/autoit][autoit]

    ; Das ist Absicht so! Immerhin ist's 3 Zeilen kürzer kürzer als

    [/autoit][autoit][/autoit][autoit]

    If PixelGetColor( 424, 329 ) = "0x205048" Then
    $NextStep = False
    Else
    $NextStep = True
    EndIf

    [/autoit]
  • Irgendwie funktioniert der sprung zum anfang nicht so recht. nach deiner beschreibung sollte er beim continueloop eigentlich bei While1 (programzeile1) erneut starten.

    vieleicht könnt ihr mir helfen.

    [autoit]

    While 1
    MsgBox (0,"message", "20cent")
    MouseClick ( "left", 334 , 660, 2 )
    MouseClick ( "left", 511 , 674 )
    MouseClick ( "left", 670 , 568 )
    MouseClick ( "left", 299 , 635 )
    Sleep ( 13000 )
    MouseClick ( "left", 334 , 660 )
    If PixelGetColor( 298, 522 ) = "0x000000" Then ContinueLoop (1)
    MsgBox (0,"message", "40cent")
    MouseClick ( "left", 511 , 674 )
    MouseClick ( "left", 670 , 568 )
    MouseClick ( "left", 299 , 635 )
    Sleep ( 13000 )
    MouseClick ( "left", 334 , 660 )
    If PixelGetColor( 298, 522 ) = "0x000000" Then ContinueLoop (1)
    MsgBox (0,"message", "80cent")
    MouseClick ( "left", 511 , 674 )
    MouseClick ( "left", 670 , 568, 2 )
    MouseClick ( "left", 299 , 635 )
    Sleep ( 13000 )
    MouseClick ( "left", 334 , 660 )
    If PixelGetColor( 298, 522 ) = "0x000000" Then ContinueLoop (1)
    MsgBox (0,"message", "1,60")
    MouseClick ( "left", 511 , 674 )
    MouseClick ( "left", 670 , 568, 4 )
    MouseClick ( "left", 299 , 635 )
    Sleep ( 13000 )
    MouseClick ( "left", 334 , 660 )
    if PixelGetColor( 298, 522 ) = "0x000000" Then ContinueLoop (1)
    MsgBox (0,"message", "3,20")
    MouseClick ( "left", 511 , 674 )
    MouseClick ( "left", 670 , 568, 8 )
    MouseClick ( "left", 299 , 635 )
    Sleep ( 13000 )
    MouseClick ( "left", 334 , 660 )
    if PixelGetColor( 298, 522 ) = "0x000000" Then ContinueLoop (1)
    MsgBox (0,"message", "6,40")
    MouseClick ( "left", 511 , 674 )
    MouseClick ( "left", 670 , 568, 16 )
    MouseClick ( "left", 299 , 635 )
    Sleep ( 13000 )
    MouseClick ( "left", 334 , 660 )
    If PixelGetColor( 298, 522 ) = "0x000000" Then ContinueLoop (1)
    MsgBox (0,"message", "12,80")
    MouseClick ( "left", 511 , 674 )
    MouseClick ( "left", 670 , 568, 32 )
    MouseClick ( "left", 299 , 635 )
    Sleep ( 13000 )
    MouseClick ( "left", 334 , 660 )
    If PixelGetColor( 298, 522 ) = "0x000000" Then ContinueLoop (1)
    MsgBox (0,"message", "25,60")
    MouseClick ( "left", 511 , 674 )
    MouseClick ( "left", 670 , 568, 64 )
    MouseClick ( "left", 299 , 635 )
    Sleep ( 13000 )
    MouseClick ( "left", 334 , 660 )
    If PixelGetColor( 298, 522 ) = "0x000000" Then ContinueLoop (1)
    MsgBox (0,"message", "51,20")
    MouseClick ( "left", 511 , 674 )
    MouseClick ( "left", 670 , 568, 124 )
    MouseClick ( "left", 299 , 635 )
    Sleep ( 13000 )
    MouseClick ( "left", 334 , 660 )
    If PixelGetColor( 298, 522 ) = "0x000000" Then ContinueLoop (1)
    MsgBox (0,"message", "100")
    MouseClick ( "left", 511 , 674 )
    MouseClick ( "left", 670 , 568, 265 )
    MouseClick ( "left", 299 , 635 )
    Sleep ( 13000 )
    MouseClick ( "left", 334 , 660 )
    If PixelGetColor( 298, 522 ) = "0x000000" Then ContinueLoop (1)
    MsgBox (0,"message", "100")
    MouseClick ( "left", 511 , 674 )
    MouseClick ( "left", 670 , 568 )
    MouseClick ( "left", 299 , 635 )
    Sleep ( 13000 )
    MouseClick ( "left", 334 , 660 )
    If Not PixelGetColor( 298, 522 ) = "0x000000" Then ContinueLoop (1)
    WEnd

    [/autoit]
    • Offizieller Beitrag

    nach deiner beschreibung sollte er beim continueloop eigentlich bei While1 (programzeile1) erneut starten.


    Und genau das passiert auch. Debugge einfach mal mit ConsoleWrite.
    Hier siehst du, dass es genau so funktioniert:

    Spoiler anzeigen
    [autoit]

    $i = 0
    $max = 10
    While 1
    $i += 1
    If $i = $max Then ExitLoop
    $z = Random(1,5,1)
    ConsoleWrite('Random 1 = ' & $z & @CRLF)
    Switch $z
    Case 1, 2
    ConsoleWrite($z & ' - ContinueLoop aus 1.Abfrage' & @CRLF)
    ContinueLoop
    Case 3, 4, 5
    ConsoleWrite('weiter' & @CRLF)
    EndSwitch
    $z = Random(1,5,1)
    ConsoleWrite('Random 2 = ' & $z & @CRLF)
    Switch $z
    Case 1, 2
    ConsoleWrite($z & ' - ContinueLoop aus 2.Abfrage' & @CRLF)
    ContinueLoop
    Case 3, 4, 5
    ConsoleWrite('weiter' & @CRLF)
    EndSwitch
    WEnd

    [/autoit]
  • Als Kontrollfunktion habe ich bereits die Msgboxen eingebaut. Doch leider springt er wenn die If bedingung erfüllt ist nicht an den Anfang der Schleife.

    Weiter oben habe ich mein programm gepostet, vieleicht kannst du mir ja sagen was ich falsch mache. :cursing: Ich dreh schon halb durch. Sehe nur noch Zahlen und Buchstaben. (beginne schon im Autoit zu denken ) ;)

    • Offizieller Beitrag

    Du mußt mal alle Schritte debuggen, dann siehst du, wo die Loops stattfinden.

    Spoiler anzeigen
    [autoit]

    While 1
    MsgBox (0,"message", "20cent")
    MouseClick ( "left", 334 , 660, 2 )
    MouseClick ( "left", 511 , 674 )
    MouseClick ( "left", 670 , 568 )
    MouseClick ( "left", 299 , 635 )
    Sleep ( 13000 )
    MouseClick ( "left", 334 , 660 )
    If PixelGetColor( 298, 522 ) = "0x000000" Then
    ConsoleWrite('ContinueLoop 1' & @CRLF)
    ContinueLoop
    EndIf
    MsgBox (0,"message", "40cent")
    MouseClick ( "left", 511 , 674 )
    MouseClick ( "left", 670 , 568 )
    MouseClick ( "left", 299 , 635 )
    Sleep ( 13000 )
    MouseClick ( "left", 334 , 660 )
    If PixelGetColor( 298, 522 ) = "0x000000" Then
    ConsoleWrite('ContinueLoop 2' & @CRLF)
    ContinueLoop
    EndIf
    MsgBox (0,"message", "80cent")
    MouseClick ( "left", 511 , 674 )
    MouseClick ( "left", 670 , 568, 2 )
    MouseClick ( "left", 299 , 635 )
    Sleep ( 13000 )
    MouseClick ( "left", 334 , 660 )
    If PixelGetColor( 298, 522 ) = "0x000000" Then
    ConsoleWrite('ContinueLoop 3' & @CRLF)
    ContinueLoop
    EndIf
    MsgBox (0,"message", "1,60")
    MouseClick ( "left", 511 , 674 )
    MouseClick ( "left", 670 , 568, 4 )
    MouseClick ( "left", 299 , 635 )
    Sleep ( 13000 )
    MouseClick ( "left", 334 , 660 )
    if PixelGetColor( 298, 522 ) = "0x000000" Then
    ConsoleWrite('ContinueLoop 4' & @CRLF)
    ContinueLoop
    EndIf
    MsgBox (0,"message", "3,20")
    MouseClick ( "left", 511 , 674 )
    MouseClick ( "left", 670 , 568, 8 )
    MouseClick ( "left", 299 , 635 )
    Sleep ( 13000 )
    MouseClick ( "left", 334 , 660 )
    if PixelGetColor( 298, 522 ) = "0x000000" Then
    ConsoleWrite('ContinueLoop 5' & @CRLF)
    ContinueLoop
    EndIf
    MsgBox (0,"message", "6,40")
    MouseClick ( "left", 511 , 674 )
    MouseClick ( "left", 670 , 568, 16 )
    MouseClick ( "left", 299 , 635 )
    Sleep ( 13000 )
    MouseClick ( "left", 334 , 660 )
    If PixelGetColor( 298, 522 ) = "0x000000" Then
    ConsoleWrite('ContinueLoop 6' & @CRLF)
    ContinueLoop
    EndIf
    MsgBox (0,"message", "12,80")
    MouseClick ( "left", 511 , 674 )
    MouseClick ( "left", 670 , 568, 32 )
    MouseClick ( "left", 299 , 635 )
    Sleep ( 13000 )
    MouseClick ( "left", 334 , 660 )
    If PixelGetColor( 298, 522 ) = "0x000000" Then
    ConsoleWrite('ContinueLoop 7' & @CRLF)
    ContinueLoop
    EndIf
    MsgBox (0,"message", "25,60")
    MouseClick ( "left", 511 , 674 )
    MouseClick ( "left", 670 , 568, 64 )
    MouseClick ( "left", 299 , 635 )
    Sleep ( 13000 )
    MouseClick ( "left", 334 , 660 )
    If PixelGetColor( 298, 522 ) = "0x000000" Then
    ConsoleWrite('ContinueLoop 8' & @CRLF)
    ContinueLoop
    EndIf
    MsgBox (0,"message", "51,20")
    MouseClick ( "left", 511 , 674 )
    MouseClick ( "left", 670 , 568, 124 )
    MouseClick ( "left", 299 , 635 )
    Sleep ( 13000 )
    MouseClick ( "left", 334 , 660 )
    If PixelGetColor( 298, 522 ) = "0x000000" Then
    ConsoleWrite('ContinueLoop 9' & @CRLF)
    ContinueLoop
    EndIf
    MsgBox (0,"message", "100")
    MouseClick ( "left", 511 , 674 )
    MouseClick ( "left", 670 , 568, 265 )
    MouseClick ( "left", 299 , 635 )
    Sleep ( 13000 )
    MouseClick ( "left", 334 , 660 )
    If PixelGetColor( 298, 522 ) = "0x000000" Then
    ConsoleWrite('ContinueLoop 10' & @CRLF)
    ContinueLoop
    EndIf
    MsgBox (0,"message", "100")
    MouseClick ( "left", 511 , 674 )
    MouseClick ( "left", 670 , 568 )
    MouseClick ( "left", 299 , 635 )
    Sleep ( 13000 )
    MouseClick ( "left", 334 , 660 )
    ;~ If Not PixelGetColor( 298, 522 ) = "0x000000" Then ContinueLoop (1) ; <== unnütz, da Schleife sowieso am Ende von vorn beginnt
    WEnd

    [/autoit]
  • Jetzt weiß ich nur das er mein ContinueLoop übersieht obwohl die Voraussetzung (pixelget) erfüllt ist. Habe es auch schon mit varialblen versucht, so wie weiter oben zu sehen.

    • Offizieller Beitrag

    Jetzt weiß ich nur das er mein ContinueLoop übersieht obwohl die Voraussetzung (pixelget) erfüllt ist.


    Du mußt schon konkreter werden.
    Wird dir denn in die Console 'ContinueLoop1 .. 10' (was grade zutrifft) ausgegeben? Wenn ja, dann beginnt anschließend die Schleife von vorn. 100 % sicher. Du kannst dir zusätzlich noch einen Zähler für die Schleifendurchläufe einbauen und ausgeben lassen. Nur wenn bei jedem Durchlauf alle "ContinueLoop1..10" ausgegeben werden, wäre der Fall eingetreten, dass die ContinueLoop nicht ausgeführt werden. Das aber, kann nicht eintreten.
    Ich nehme eher an, du hast eine falsche Abfragelogik und rechnest mit einem Ergebnis, dass niemals eintreten kann. Das können wir allerdings nicht sehen, da wir keine Ahnung haben ob dein Farbenspiel korrekt ist.

  • Das klingt logisch. ;)

    ich werd dranbleiben und posten wenn ich den Fehler gefunden habe. Vielen dank für deine Hilfe, Unterstützung und Zeit.

    mfg. Mathiluke

  • Hi,

    aus eigener Erfahrung würde ich mal vermuten, dass Deine Farbe nicht immer exakt dem Hex-Wert entspricht, den Du abfragst!?! Das kannst Du ja mal testen, indem Du Dir die tatsächlichen Farbwerte ausgeben läßt.

    Ich nehme in solchen Fällen lieber

    PixelSearch ( left, top, right, bottom, colour [, shade-variation [, step [, hwnd]]] )

    da kannst Du über die "shade-variation" ein gewisses farbspektrum abfragen, das klappt meist besser ............

  • die lösung haben wir die ganze zeit vor augen sehen sie aber nicht:

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1
    While 2
    MsgBox (0,"message", "20cent")
    MouseClick ( "left", 334 , 660, 2 )
    MouseClick ( "left", 511 , 674 )
    MouseClick ( "left", 670 , 568 )
    MouseClick ( "left", 299 , 635 )
    Sleep ( 13000 )
    MouseClick ( "left", 334 , 660 )
    If PixelGetColor( 298, 522 ) = "0x000000" Then ExitLoop
    MsgBox (0,"message", "40cent")
    MouseClick ( "left", 511 , 674 )
    MouseClick ( "left", 670 , 568 )
    MouseClick ( "left", 299 , 635 )
    Sleep ( 13000 )
    MouseClick ( "left", 334 , 660 )
    If PixelGetColor( 298, 522 ) = "0x000000" Then ExitLoop
    MsgBox (0,"message", "80cent")
    MouseClick ( "left", 511 , 674 )
    MouseClick ( "left", 670 , 568, 2 )
    MouseClick ( "left", 299 , 635 )
    Sleep ( 13000 )
    MouseClick ( "left", 334 , 660 )
    If PixelGetColor( 298, 522 ) = "0x000000" Then ExitLoop
    MsgBox (0,"message", "1,60")
    MouseClick ( "left", 511 , 674 )
    MouseClick ( "left", 670 , 568, 4 )
    MouseClick ( "left", 299 , 635 )
    Sleep ( 13000 )
    MouseClick ( "left", 334 , 660 )
    if PixelGetColor( 298, 522 ) = "0x000000" Then ExitLoop
    MsgBox (0,"message", "3,20")
    MouseClick ( "left", 511 , 674 )
    MouseClick ( "left", 670 , 568, 8 )
    MouseClick ( "left", 299 , 635 )
    Sleep ( 13000 )
    MouseClick ( "left", 334 , 660 )
    if PixelGetColor( 298, 522 ) = "0x000000" Then ExitLoop
    MsgBox (0,"message", "6,40")
    MouseClick ( "left", 511 , 674 )
    MouseClick ( "left", 670 , 568, 16 )
    MouseClick ( "left", 299 , 635 )
    Sleep ( 13000 )
    MouseClick ( "left", 334 , 660 )
    If PixelGetColor( 298, 522 ) = "0x000000" Then ExitLoop
    MsgBox (0,"message", "12,80")
    MouseClick ( "left", 511 , 674 )
    MouseClick ( "left", 670 , 568, 32 )
    MouseClick ( "left", 299 , 635 )
    Sleep ( 13000 )
    MouseClick ( "left", 334 , 660 )
    If PixelGetColor( 298, 522 ) = "0x000000" Then ExitLoop
    MsgBox (0,"message", "25,60")
    MouseClick ( "left", 511 , 674 )
    MouseClick ( "left", 670 , 568, 64 )
    MouseClick ( "left", 299 , 635 )
    Sleep ( 13000 )
    MouseClick ( "left", 334 , 660 )
    If PixelGetColor( 298, 522 ) = "0x000000" Then ExitLoop
    MsgBox (0,"message", "51,20")
    MouseClick ( "left", 511 , 674 )
    MouseClick ( "left", 670 , 568, 124 )
    MouseClick ( "left", 299 , 635 )
    Sleep ( 13000 )
    MouseClick ( "left", 334 , 660 )
    If PixelGetColor( 298, 522 ) = "0x000000" Then ExitLoop
    MsgBox (0,"message", "100")
    MouseClick ( "left", 511 , 674 )
    MouseClick ( "left", 670 , 568, 265 )
    MouseClick ( "left", 299 , 635 )
    Sleep ( 13000 )
    MouseClick ( "left", 334 , 660 )
    If PixelGetColor( 298, 522 ) = "0x000000" Then ExitLoop
    MsgBox (0,"message", "100")
    MouseClick ( "left", 511 , 674 )
    MouseClick ( "left", 670 , 568 )
    MouseClick ( "left", 299 , 635 )
    Sleep ( 13000 )
    MouseClick ( "left", 334 , 660 )
    If Not PixelGetColor( 298, 522 ) = "0x000000" Then ExitLoop
    WEnd
    Wend

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit]