1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Suche nur nach helle Farben im breich der Coordinaten X und Y

Dieses Thema im Forum "Main Forum" wurde erstellt von Cascraft, 1. August 2017.

  1. Cascraft

    Cascraft New Member

    Registriert seit:
    13. Juli 2017
    Beiträge:
    15
    Zustimmungen:
    0
    Punkte für Erfolge:
    1
    Hallo zusammen,

    wie mache ich das mein Script entweder nach helle oder dunkle Farben sucht bzw. welche Funktion wird benötigt?


    Code (Text):
    ;Mit F5 Programm beenden
    #include <Array.au3>
    #Include <Misc.au3>

    Func _OnExit()
        Exit
    EndFunc
    OnAutoItExitRegister("_OnExit")
    HotKeySet("{F5}", "_OnExit")
    Global $oben_links[2]
    Global $unten_rechts[2]
    Global $farben_ignorieren[1]
    While Not _IsPressed("04")
        Sleep(500)
        ToolTip("linke obere ecke mit MOUSE3 angeben") ; Bereich im Bildschirm auswählen
    WEnd
    $oben_links[0] = MouseGetPos(0)
    $oben_links[1] = MouseGetPos(1)
    While Not _IsPressed("01")
        Sleep(500)
        ToolTip("rechte untere ecke mit MOUSE1 angeben") ; Bereich im Bildschirm auswählen
    WEnd
    $unten_rechts[0] = MouseGetPos(0)
    $unten_rechts[1] = MouseGetPos(1)
    While Not _IsPressed("1B")
        ToolTip("Farben angeben, die nicht beachtet werden sollen" & @CRLF & "Mouse3 = hinzufügen" & @CRLF & "ESC = fertig")
        If _IsPressed("04") Then
            _ArrayAdd($farben_ignorieren, PixelGetColor(MouseGetPos(0),MouseGetPos(1)))
            MsgBox(0,"","Farbe wurde hinzugefügt")
        EndIf
        Sleep(500)
    WEnd
    tooltip("")
    For $temp_y = $oben_links[1] To $unten_rechts[1]
        For $temp_x = $oben_links[0] To $unten_rechts[0]
            TrayTip("status","höhe: " & $temp_y & " / " & $unten_rechts[1] &@CRLF & "breite: " & $temp_x & " / " & $unten_rechts[0] &@CRLF & "Beenden: F5", 1111111)
            If _ArraySearch($farben_ignorieren,PixelGetColor($temp_x, $temp_y) ) < 1 Then MouseClick("LEFT", $temp_x, $temp_y, 1, 1)
        Next
    Next


    Hier ein beispiel Bild:
    [​IMG]

    Dafür versuche ich einen Bot zu schreiben.
    Beispiel:

    Wenn Nur ein Dunkles Kästchen in bereich der X und Y koordinate zu sehen ist, dann gehe mit der Maus zum dunklen Kästchen und umgekehrt genau so ====>

    Wenn nur helles ein Kästchen in bereich der X und Y koordinate zu sehen ist, dann gehe mit der Maus zum Kasten hin.
     
  2. Ingolf

    Ingolf Member Ehrenmitglied

    Registriert seit:
    2. Juli 2017
    Beiträge:
    41
    Zustimmungen:
    21
    Punkte für Erfolge:
    8
    Geschlecht:
    männlich
    Ort:
    Hamburg
    was hällst du von einem vergleich ?
    als erstes vergleichst du die oberen beiden vierecke wen die farbe die gleiche ist suchst du an allen stellen nach der farbe bis ein unterschied gefunden wurde
    ist zwar nicht das was du umbedingt willst als nach hell oder dunkel suchen aber so würde es auch gehen :)
     
    SilverHazard gefällt das.
  3. SilverHazard

    SilverHazard Moderator Mitarbeiter Moderator

    Registriert seit:
    2. Juli 2017
    Beiträge:
    56
    Zustimmungen:
    44
    Punkte für Erfolge:
    18
    Geschlecht:
    männlich
    Hi,

    wenn ich das richtig verstehe, suchst du eigentlich nicht nach hellen oder dunklen Farben, sondern nur nach "anderen" Farben.

    Dafür würde ich so vorgehen:
    1. Die Eckpunkte des Spielfeldes rausfinden (hast du vermutlich eh schon gemacht)
    2. Die Mittelpunkte der einzelnen Farbflächen berechnen
    3. Mit PixelGetColor die Farbe des jeweiligen Kästchens auslesen
    4. Farben vergleichen und das andersfarbige Kästchen finden
    5. Kästchen klicken

    Und Ingolf war wohl ein paar Sekunden schneller :D
     
    w33dt4k3r, krusty und Ingolf gefällt das.
  4. Cascraft

    Cascraft New Member

    Registriert seit:
    13. Juli 2017
    Beiträge:
    15
    Zustimmungen:
    0
    Punkte für Erfolge:
    1
    Okay, aber wie berechne ich nun die Mittelpunkte der einzelnen Farbflächen?
     
  5. SilverHazard

    SilverHazard Moderator Mitarbeiter Moderator

    Registriert seit:
    2. Juli 2017
    Beiträge:
    56
    Zustimmungen:
    44
    Punkte für Erfolge:
    18
    Geschlecht:
    männlich
    Durch Mathematik ;-)

    Die Mittelpunkte sind jeweils soweit von einander entfernt, wie eine Fläche (inklusive der Umrandung) lang ist.
    Die erste Fläche ist nur die Hälfte dieser Fläche vom Rand weg.

    Also gilt für den n-ten Mittelpunkt:
    Code (Text):
    x = LängeX * (n - 1) + LängeX / 2
    y = LängeY * (n - 1) + LängeY / 2
    Dann das Ganze noch in Relation zu einem der Ecken setzen und du hast deine Koordinaten :)

    Code (AutoIt):

    ; #FUNCTION# ====================================================================================================================
    ; Name ..........: _GetCenters
    ; Description ...: Calculates the centers of equally distributed squares in a rectangle.
    ; Syntax ........: _GetCenters($x1, $y1, $x2, $y2, $iNumX, $iNumY)
    ; Parameters ....: $x1                  - The x coordinate of the top left corner
    ;                  $y1                  - The y coordinate of the top left corner
    ;                  $x2                  - The x coordinate of the bottom right corner
    ;                  $y2                  - The y coordinate of the bottom right corner
    ;                  $iNumX               - The number of squares in the x dimension
    ;                  $iNumY               - The number of squares in the y dimension
    ; Return values .: A 3-dim array containing the x and y coordinates for every square
    ; Author ........: Lukas Schlüter
    ; Modified ......:
    ; Remarks .......:
    ; Related .......:
    ; Link ..........:
    ; Example .......: _GetCenters(100, 100, 500, 500, 5, 5)
    ; ===============================================================================================================================
    Func _GetCenters($x1, $y1, $x2, $y2, $iNumX, $iNumY)
       $dX = $x2 - $x1
       $dY = $y2 - $y1
       $stepX = $dX / $iNumX
       $stepY = $dY / $iNumY

       Local $centers[$iNumX][$iNumY][2]

       For $i = 0 To $iNumX - 1
           $x = $i * $stepX + $stepX / 2 + $x1
           For $j = 0 To $iNumY - 1
               $y = $j * $stepY + $stepY / 2 + $y1
               $centers[$i][$j][0] = $x
               $centers[$i][$j][1] = $y
           Next
       Next
       Return $centers
    EndFunc   ;==>_GetCenters


    ; Example usage
    $centers = _GetCenters(100, 100, 500, 500, 5, 5)

    For $i = 0 To UBound($centers) - 1
       For $j = 0 To UBound($centers) - 1
           ConsoleWrite("$centers[" & $i & "][" & $j & "] = [" & $centers[$i][$j][0] & ", " & $centers[$i][$j][1] & "]" & @CRLF)
           MouseMove($centers[$i][$j][0], $centers[$i][$j][1])
       Next
    Next
     
     
    CptVince gefällt das.
  6. 3HMonkey

    3HMonkey Administrator Mitarbeiter Administrator

    Registriert seit:
    28. Juni 2017
    Beiträge:
    79
    Zustimmungen:
    41
    Punkte für Erfolge:
    18
    Geschlecht:
    männlich
    Um den Aufwand zu vermeiden, kannst du auch einfach nur die Mittelpunkte in ein Array speichern. DAs Array kannst du dann durchlaufen und nach den Farben durchlaufen. Die einzige andere Farbe im Array kannst du dann klicken. Um ein Array mit mehreren Dimensionen zu vermeiden (Array[x][y][Farbe]) kannst du auch eine Hashmap nutzen.
     

Diese Seite empfehlen

Die Seite wird geladen...