Springen oder GOTO?

  • Hi,
    gibt es eine Möglichkeit, mit der das Script zu einer beliebigen Position springen kann?

    Ich möchte nämlich folgende Zeilen anwenden:


    Also wenn $zaehler ausgelöst wird wäre es cool, wenn das Script gleich zum Anfang springt.

    Bis jetzt hatte ich einen normalen "Then ExitLoop" Befehl eingebaut.
    Damit werden dann aber noch knappe 50 Zeilen abgearbeitet, was ja irgendwie überflüssig ist, wenn keine Nachricht gefunden wurde.


    Wäre echt nett, wenn ihr mir helfen könntet.

    Gruß
    Flocki

    Einmal editiert, zuletzt von Flocki (19. Juli 2010 um 22:26)

  • Goto ist böse. Und nichts was man mit Goto machen kann, kann man mit dem schlauen einsatz von funktionen und schleifen nicht auch.

    Wenn du aber unbedingt wirrren und unverständlichen Code (Dank GoTo) haben willst, dann kannst du Sprungmarken Simulieren.

    [autoit]

    $Sprungmarke = True
    $ZweiteSprungmarke = True

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

    MsgBox(0, "", "Hier sind wir vorbei")
    While $Sprungmarke ; Sprungmarke initialisieren
    MsgBox(0, "", "Wir haben die erste Sprungmarke erreicht")
    If MsgBox(4, "", "Zurückspringen? (Mit Ja zurückspringen)") = 6 Then ContinueLoop
    If MsgBox(4, "", "Bist du sicher? (Mit Nein zurückspringen)") = 7 Then ContinueLoop
    While $ZweiteSprungmarke
    MsgBox(0, "", "Wir haben die zweite Sprungmarke erreicht")
    If MsgBox(1, "", "Es wird jetzt zu der ersten Sprungmarke gesprungen (Mit Ok zurückspringen)") = 1 Then ContinueLoop 2
    If MsgBox(1, "", "Dann wengistens zu der zweiten? (Mit Ok zurückspringen)") = 1 Then ContinueLoop

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

    $ZweiteSprungmarke = False
    WEnd
    $Sprungmarke = False ; Endlosschleife verhindern (Danach muss direkt das Wend folgen)
    WEnd ; ab hier kannn man nicht mehr zurückspringen

    [/autoit]
  • Hmm... diesen Quelltext mit den Sprungmarken finde ich ja mal so richtung unübersichtlich. Ich als Anfänger Steige da gar nicht durch ;(


    Zitat

    schlauen einsatz von funktionen und schleifen


    Welche Funktionen meinst du damit?
    Dann könnte ich in der Hilfe-Datei vielleicht ein paar Beispiele finden.

    Mein Quelltext besteht übrigens aus vielen While 1 Schleifen.
    Wenn die Bedingung erfüllt wird, gehts immer zur nächsten Schleife weiter usw...

  • Hmm... diesen Quelltext mit den Sprungmarken finde ich ja mal so richtung unübersichtlich. Ich als Anfänger Steige da gar nicht durch ;(


    Genau das meine ich.

    Mit schlauem einsatz von Funktionen und Schleifen meine ich, dass du die Aktionen deines Programms in Funktionen auslagern sollst. Ohne deinen Code zu sehen kann ich dir aber nicht wirklich was dazu sagen.

    Aber ContinueLoop solltest du dir trotzdem mal anschauen - das ist das Gegenstück zu ExitLoop und springt zum beginn einer Schleife zurück, das funktioniert dann auch über mehrere Schleifenebenen hinweg.

    Übrigens sagt mir meine Intuition dass es hier um einen Bot geht. Deswegen weise ich dich mal auf die Forenregeln hin, und möchte dich im Falle des Falles bitten, nochmals google nach dem, für deine Zwecke richtigen, Forum zu suchen.

    LG

  • Wenn ich dein Script richtig verstand dann könnte dies ein Lösung sein. Hab zu jeder Zeile noch ne Bemerkung geschrieben damit verstehst was vor sich geht!

    Spoiler anzeigen
    [autoit]


    while 1 ;Endlosschleife
    $eingetroffen = 0x5C0000 ;-> Für was das da sein sollte, verstehe ich leider nicht!!!
    do
    $zaehler += 1 ;Addiert zu $zaehler eins dazu
    If PixelGetColor (95, 570) = 0x5C0000 Then ExitLoop 2 ;Wenn die gesuchte Bedinung eintritt, dann werden beide Schleifen (do,while) verlassen!
    Sleep(60000)
    until $zaehler = 15 ;Wiederholt die Schleife bis $zaehler = 15 ist
    ;-> $zeahler = 15
    WEnd

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

    ;Hier gehts weiter wenn PixelGetColor-Bediungung erfüllt ist.
    ; zb: Beep(1000,1000)

    [/autoit]
  • Zitat von Faweyr

    Für was das da sein sollte, verstehe ich leider nicht!!!

    ich schon....(BotBotBotBotBot)
    Ich hab das Schnipsel im 1. Post einfach mal angeguckt und versucht die Logik zu verstehen: (Ich fasse jetzt das Script in einem Satz zusammen)

    [autoit]

    Wenn innerhalb der nächsten 15 Minuten
    das Pixel eine bestimmte Farbe hat, soll die Schleife verlassen werden(um den Pixelgefunden-Code ausführen),
    ansonsten an den "Anfang" gesprungen werden(logischerweise wird auch die Schleife verlassen).....

    [/autoit]


    wird zu:

    [autoit]


    Merke dir die aktuelle Zeit
    Solange (DasPixel nicht gefunden wurde) und (die Differenz zur gemerkten Zeit kleiner als 15 Minuten ist)
    bleibe in der Schleife
    Falls die Zeit nicht abgelaufen ist ;dann wurde ein Pixel gefunden
    Arbeite den pixelcode ab

    [/autoit]


    kann man 1:1 in AutoIt übersetzen

    [autoit]

    ;anfang, z.B Do/Until oder For/To oder While/Wend
    $eingetroffen = 0x5C0000 ;pixelfarbe
    $t = TimerInit() ; Merke dir die aktuelle Zeit
    While (Sleep(10) * PixelGetColor(95, 570) <> $eingetroffen) and (TimerDiff($t) < 900000) ;Solange (DasPixel nicht gefunden wurde) und (die Differenz zur gemerkten Zeit kleiner als 15 Minuten ist)
    WEnd ;bleibe in der Schleife
    If TimerDiff($t) <900000 Then ;Falls die Zeit nicht abgelaufen ist ( dann wurde logischerweise ein Pixel gefunden)
    ;Pixelgefunden-Code abarbeiten
    EndIf
    ;ab zum anfang

    [/autoit]


    das Sleep(10) entlastet den Prozessor, könnte man auch in die zeile zwischen while und Wend schreiben

  • Dankeschön.. jetzt läufts.

    Aber was hat ihr immer mit eurem "BotBotBot..."?!?
    Ist ja wie eine Hexenjagt hier...