1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Yjuq

Beiträge von Yjuq

  • Text in HTML Seite auslesen

    • Yjuq
    • 1. März 2015 um 00:29
    [autoit]

    #include <Array.au3>

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

    $sText = '<option selected="selected" value="">Alle Karten anzeigen</option>' & @CRLF & _
    '<option value="Kategorie 1">Kategorie 1 frei: 64</option>' & @CRLF & _
    '<option value="Kategorie 2">Kategorie 2 frei: 126</option>' & @CRLF & _
    '<option value="Kategorie 3">Kategorie 3 frei: 106</option>' & @CRLF & _
    '<option value="Kategorie 4">Kategorie 4 frei: 36</option>' & @CRLF & _
    '</select>'

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

    $aRegExp = StringRegExp($sText, ' (\d*)</', 3)
    _ArrayDisplay($aRegExp)

    [/autoit]
  • Text in HTML Seite auslesen

    • Yjuq
    • 28. Februar 2015 um 23:59
    [autoit]

    $aRegExp = StringRegExp(Quelltext, '(\d*)</', 3)
    _ArrayDisplay($aRegExp)

    [/autoit]
  • Text in HTML Seite auslesen

    • Yjuq
    • 28. Februar 2015 um 23:32

    Naja, folgendes Pattern erledigt den Job: (\d*)</

  • ISN AutoIt Studio

    • Yjuq
    • 28. Februar 2015 um 14:31

    Im Anhang findest du meine Konfigurationsdatei mit allen Source Code Pro Fonts die ich installiert habe.
    Vielleicht ist ja so das Problem reproduzierbar. Nutzen tue ich Windows 7 64 Bit...

    €dit: Komisch, ich habe mir gerade mal die von dir verlinkten Dinger runter geladen...
    Die Schrift sieht komplett anders aus als die ich seit gut 1 1/2 Monate nutze.
    Dabei habe ich sie aber bei denen von GitHub runter geladen, naja...
    Stimmt, damit gibt's keine Probleme... Muss wohl an der Font liegen die ich da genutzt habe.

  • ISN AutoIt Studio

    • Yjuq
    • 27. Februar 2015 um 18:06

    Sorry, ich vergaß zu sagen dass ich die Schriftgröße 16 benutze, bei 14 oder so gibt's keine Probleme.

  • ISN AutoIt Studio

    • Yjuq
    • 27. Februar 2015 um 03:19

    Servus, bei der Font "Source Code Pro" wird die gesamte Zeile etwas nach unten verschoben. Einige Teile der Buchstaben verschwinden im Editor und der Unterstich ( _ ) ist überhaupt nicht zu sehen...

    Noch eine andere Frage: Kann ich benutzerdefinierte Syntax Highlights nutzen?

  • Wie kann ich meine Menüleiste eine Farbe geben

    • Yjuq
    • 23. Februar 2015 um 18:58

    Servus :)
    Ja klar geht das! Wunderbar funktioniert das mit Aquarellstiften. Ich würde dir die von Faber-Castell empfehlen. Hier kannst du dir die Dinger bei Amazon kaufen: http://www.amazon.de/Faber-Castell-117524-Aquarellstifte-ABLRECHT-Metalletui/dp/B000KJPE3Y/ref=sr_1_3?ie=UTF8&qid=1424713344&sr=8-3&keywords=aquarellstifte

    Die malen auf einen Display echt gut, so koloriere ich meine Controls auch immer individuell ein. Und mit ganz viel Talent und Übung passen ganze Kunstwerke in 400*20px Menüleisten! Ich kann dir die Stifte echt nur empfehlen. ^^


    Alternativ könntest du aber auch das WM_PAINT Event der Menüleiste hooken und via GDI/GDI+ einfach selber den Hintergrund selber zeichnen. Jedoch weiß ich nicht wie viel Aufwand das sein dürfte. Eine andere Möglichkeit kommt mir gerade nicht in den Sinn. Schau mal im Example Ordner nach: „AutoIt3\Examples\Helpfile\GUIRegisterMsg.au3“

  • Variable aus anderem Skript nutzen

    • Yjuq
    • 21. Februar 2015 um 17:13

    Das wäre durchaus zu empfehlen. Alternativ kannst du auch eine *.au3 File nutzen und dort die Variablen definieren. Diese brauchst du dann später nur in jedem Skript inkludieren.

  • Variable aus anderem Skript nutzen

    • Yjuq
    • 21. Februar 2015 um 16:38

    Jein, ist ein wenig umständlich. ^^
    Was für ein Ziel verfolgst du damit? Vielleicht gibt's da eine bessere Alternative für dich.

  • Zuverlässig eigene IP auslesen?

    • Yjuq
    • 19. Februar 2015 um 13:36

    Mithilfe von PHP kannst du die letztendlich sichtbare IP Adresse ausgeben lassen. Dafür gibt's schon Seiten. Googel einfach mal nach "Wie ist meine IP" oder so. Du brauchst dann lediglich von dem AutoIt Skript die Seite aufrufen und die IP Adresse im Quelltext der Seite auslesen. Ich hoffe ich habe dich nicht missverstanden. LG :)

  • [close] AI Fight #1 - Snake

    • Yjuq
    • 19. Februar 2015 um 13:23

    chip:
    Okey, ich habe mir gerade erst die Log Datei mal angesehen. Du meinst bestimmt dass das Futterstück direkt nach dem Start irgendwo zufällig hin springt, sich dann aber auf Position (2 | 5) begibt. Das liegt daran dass ich (aufgrund von Faulheit ^^) alles in Objekten gepackt habe und das Objekt bei jedem Neustart resettet wird. Ich könnte dies zwar noch umschreiben, hat aber letztendlich keinerlei Bedeutung da die Log Datei ansonsten originalgetreu wiedergegeben wird. Ist ja soweit auch nicht schlimm. Wenn ich die Zeit finde mache ich das noch, aber hat jetzt keine hohe Priorität da ansonsten ja alles dargestellt wird.

    draien:
    Kein Problem, da ich ja den Wettbewerb gestartet habe, muss ich mich auch darum kümmern. Darunter fallen auch Verständnisprobleme der Teilnehmer bzw. Interessierten... ^^

  • [close] AI Fight #1 - Snake

    • Yjuq
    • 19. Februar 2015 um 13:00

    Soa :)

    chip:
    Danke für dein Bug Report. Die meisten Bugs die noch enthalten waren habe ich auf der Heimfahrt von Berlin gestern gemacht. Meine Woche war sowieso bisschen anstrengend und bin doch froh dass ich zumindest den Wettbewerb noch gestern starten konnte (so wie ich's in der Shotbox angekündigt habe). Den Bug fixe ich auch schnellstmöglich.

    Zitat

    Von welcher Ecke gehen den die Map-Koordinaten aus? Links oben?


    Ja, es wird von der linken oberen Ecke ausgegangen. Falls du _ArrayDisplay() benutzen solltest, setz davor noch ein _ArrayTranspose() damit dieses richtig dargestellt wird.

    draien:
    Entschuldige bitte meine unklare Formulierungen. War sowieso gestern schon müde als ich den Text verfasst habe. Ich versuch's einmal zu erklären, dafür benutze ich aber mal die etwas eindeutigeren Begriffe „Wettbewerbsrunde“, „Spielrunde“ und „Runde“.

    Nehmen wir mal an 10 Teilnehmer würden mitspielen. Der Einfachheitshalber tragen die Spieler die Namen von A bis J. Zuerst lose ich auch welche Spieler (also deren AI logischerweise) gegeneinander spielen:

    Code
    Win
                          |
                 +----------------+
                 |                |
          +-----------+       +-------+
          |           |       |       |
      +-------+     +---+   +---+   +---+
      |       |     |   |   |   |   |   |
    +---+   +---+   D   I   E   C   F   J
    |   |   |   |
    B   A   G   H
    Alles anzeigen

    Nun spielen Spieler B und A eine vordefinierte Anzahl an Runden. Sagen wir mal 50 Runden. Diese 50 Runden zusammengepackt sind die Spielrunden. Wer von den beiden nach den 50 Runden die meisten Punkte erzielen konnte, gewinnt diese Spielrunde. Gleiches wird nun für Spieler G und H wiederholt. Damit wäre auch schon eine Wettbewerbsrunde abgeschlossen. Die Spieler D, I, E, C, G und J haben eben Glück gehabt, dass sie (aufgrund der Teilnehmerzahl) eine Wettbewerbsrunde weniger haben. Die Gewinner der vorherigen Wettbewerbsrunde treten gegeneinander an und eine neue Spielrunde wird gestartet. Dies wird solange fortgeführt (dh. Auch punkte basierendes KO System) bis ein Gesamtsieger feststeht.

    Den Thread mit den allgemeinen Regeln werde ich sowieso nochmals überarbeiten. Zwar wird sich sinngemäß nicht viel verändern, aber es soll anschaulicher werden. Zudem werden auch diese kleinen Sachen geändert wie der plötzliche Wechsel der $sUser und $hFunc Parameter. Da ich für dieses (ich sag mal so:) vorläufige Regelwerk alles planen musste, wusste ich noch nicht ganz in wie fern sich das umsetzen ließe. Außerdem musste ich ja auch selber ein wenig herum experimentieren. Ich versuche mich bei jedem Wettbewerb zu bessern. Außerdem habt ihr nach jedem Wettbewerb 2 Wochen Zeit über Umsetzung und Handhabung zu diskutieren bevor der nächste Wettbewerb startet. Da versuche ich dann Vorschläge etc. für den übernächsten (ich fange ja jetzt schon an den nächsten Wettbewerb zu planen ^^) umzusetzen.

    Es ist schwierig alles vorab festzulegen, aber ich denke dass ich es soweit ziemlich gut hinbekommen habe mich an meine eigenen Richtlinien zu halten. Natürlich gibt es hier und da mal eine Abweichung, aber das liegt eben daran dass dies mein erster Wettbewerb dieser Art ist. Ich hoffe dass die Beteiligung so groß ist, dass ich im Laufe der Zeit alles verbessern kann. :)

  • [close] AI Fight #1 - Snake

    • Yjuq
    • 18. Februar 2015 um 22:13

    Soa ihr Lieben! :)
    Nachdem ich euch nun solange warten gelassen habe, kann ich nun (endlich) verkünden dass der erste AI Fight starten kann. Vorab: Das Allgemeine Regelwerk findet ihr in diesem Thread. Das erste Spiel ist ein Klassiker und eine etwas einfachere Aufgabe. Ihr sollt für ein Multiplayer Snake Game eine AI schreiben welche eure Schlange solange wie Möglich wachsen lässt. Für alle die Snake nicht kennen, hier eine kurze Erklärung:

    Snake ist ein Singleplayer Spiel. Ihr steuert eine Schlange die immer weiter wächst. Jedes mal wenn Ihr ein Futterstück auf der Karte einsammelt, wächst eure Schlange um ein Feld und ihr erhaltet Punkte. Ziel ist es seine Schlange so lang wie möglich zu füttern. Das Spiel endet sobald sich die Schlange selber beißt. Je nach Variation könnt ihr am Spielfeldrand hinaus und kommt auf der gegenüberliegenden Seite wieder hinein.

    In der hier angebotenen Multiplayer Variante spielen 2 AI's gegeneinander. Das Ziel bleibt das Gleiche, eure Schlange soll so lang werden wie nur möglich. Jedoch endet das Spiel sobald ihr gegen die Wand am Spielfeldrand steuert oder ihr in den eigenen oder fremden Schlangenkörper beißt. Beide Schlangen bewegen sich zeitgleich, dadurch ist es möglich dass auch beide Schlangen verlieren. Dies wird als unentschieden gewertet.

    Die AI's treten in einen Punkte basierenden KO System an. Das bedeutet, 2 AI's spielen mehrere Runden gegeneinander und sammeln Punkte, jene AI welche die meisten Punkte sammeln konnte, rückt in die nächste Runde vor. Dies wird solange wiederholt bis wir einen endgültigen Sieger haben. Die Punkte werden je nach Spielfeldgröße vergeben. Dabei erhaltet ihr 1% multipliziert mit der Anzahl der Felder an Punkten für jedes gefressene Futterstück. Und 25% an Punkten für jede gewonnene (kein unentschieden) Runde. Ein Beispiel: Bei einer Spielfeldgröße von 20x20 (also 400 Felder) erhaltet ihr für jedes Futterstück 4 Punkte und für jeden Sieg 100 Punkte.

    Die Interaktion zur AI habe ich euch so angenehm wie möglich gestaltet. Ihr registriert eure AI einfach mit der Funktion _AIFight_Register ( $sUser, $hFunction [, $sDatabase = Null ]). In dem ersten Parameter übergebt ihr einfach euren AutoIt Benutzernamen. In dem zweiten Parameter wird der Funktionshandle zu eurer AI entgegen genommen. Im dritten Parameter (falls benötigt) könnt ihr den Dateinamen zu eurer Datenbank angeben. Achtung! Bitte keine Pfadangaben, diese wird selbständig in der Ordnerstruktur gesucht. Tatsächlich nur den Namen mit der entsprechenden Dateiendung. Im angehängten ZIP Archiv findet ihr die gesamten Wettbewerbsdateien. Darunter auch einen Ordner namens User. Dort habt ihr eine Beispiel AI wie ihr eure AI registriert. Ihr könnt die Dateien einfach umbenennen und dies als Vorlage nutzen.

    Eure AI nimmt 4 Parameter entgegen: User_AI ( $aMap, $aSnakeMe, $aSnakeRival, $hTime ). Im ersten Parameter erhaltet ihr ein 2 dimensionales Array mit der kompletten Map. Damit ihr wisst was was ist, habe ich euch schon Konstanten vordefiniert, dazu komme ich aber gleich erst. Im zweiten Parameter erhaltet ihr ein 2 Dimensionales Array zu eurer eigenen Schlange. Das Array ist folgendermaßen aufgebaut:

    Code
    $aSnakeMe[0][0] = Anzahl der Elemente
    $aSnakeMe[0][1] = Blickrichtung der Schlange
    $aSnakeMe[1][0] = Schlangenkopf x-Koordinate
    $aSnakeMe[1][1] = Schlangenkopf y-Koordinate
    $aSnakeMe[i][0] = Körperteil x-Koordinate
    $aSnakeMe[i][1] = Körperteil y-Koordinate

    Über den dritten Parameter erhaltet ihr die Position das Array der gegnerischen Schlange. Dieses Array ist genauso aufgebaut wie der euren Schlange. Im vierten und letzten Parameter erhaltet ihr ein Timerhandle. Mithilfe der Built-in Funktion TimerDiff ( handle ) könnt ihr immer nachmessen wie viel Zeit seit dem Funktionsaufruf vergangen ist. Zum testen eurer AI registriert eure Funktion bitte 2 mal da ich keine eigene AI als Testgegner integriert habe.

    In der AIFight.au3 findet ihr das eigentliche Spiel. Dieses erstellt lediglich eine Log Datei. Dies hat spielt später für die Auswertung und das Debuggen eurer AI eine Rolle. Einmal soll das die Auswertung fix gehen und zum anderen könnt ihr so jede Aktion nachlesen. Auch später nach der Auswertung erhaltet ihr alle Log Dateien damit ihr sehen könnt, wie die anderen AI's (sowie eure eigene) agiert haben. In Zeile 12 braucht ihr nur eure eigene au3 Datei inkludieren, damit ihr eure eigene AI testen könnt. In der AIFight_GUI.au3 könnt ihr euch die Bewegungen ansehen. Einfach mal ausprobieren.

    Soa, nun steht euch aber auch noch eine andere Funktionen zur Verfügung. Mithilfe der Funktion _AIFight_LogFile ( $sData ) könnt ihr in der Log Datei eigene Einträge verfassen. Wichtig ist nur, dass ihr nicht das Zeichen größer als („>“) nutzen dürft. Ansonsten steht euch frei was ihr da rein schreibt. Um nicht ständig zwischen eurer au3 und der AIFight.au3 wechseln zu müssen, könnt ihr in eure AI die Funktion _AIFight_Run( $sWorkingDir ) benutzen. Ihr müsst lediglich einen relativen Pfad zu der AIFight.au3 angeben. Danach wird diese bei jedem ausführen selbständig gestartet. So könnt ihr euch ganz auf eure AI konzentrieren.

    Zu guter Letzt kommen wir noch zu den Konstanten. Ihr habt einmal allgemeine Informationen zu den Spielbedingungen.

    [autoit]

    Global Const $AIFight_DBSize = 0x00100000
    Global Const $AIFight_Time = 3000
    Global Const $AIFight_MapX = 10
    Global Const $AIFight_MapY = 10
    Global Const $AIFight_Rounds = 1

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

    Global Const $AIFight_PointsFeed = Ceiling($AIFight_MapX * $AIFight_MapY * 0.01)
    Global Const $AIFight_PointsWin = Ceiling($AIFight_MapX * $AIFight_MapY * 0.25)

    [/autoit]

    Die erste Konstante gibt an welche Dateigröße (in diesem Fall 1MB) eure Datenbank (falls vorhanden) in Byte nicht überschreiten darf. Die zweite Variable steht für die Anzahl der Millisekunden die ihr für einen Funktionsaufruf zur Verfügung habt. Später wird der Durchschnitt berechnet, im Grunde könnt ihr auch einmal 5 Sekunden und einmal 1 Sekunde nutzen, bleibt ja bei 3 Sekunden im Durchschnitt. Die nächsten Beiden geben die Spielfeldgröße an, und die letzte die Anzahl der Runden die 2 AI's gegeneinander spielen.

    Die nächsten 4 Konstanten $AIFight_Top, $AIFight_Right, $AIFight_Bottom und $AIFight_Left geben die Blickrichtung der Schlange an. Einer dieser Werte ist in dem Array des 2ten bzw. 3ten Parameters gespeichert ($aSnake[0][1]).

    Nun kommen wir zum Rückgabewert eurer AI, ihr müsst einen der 3 Konstanten zurückgeben:

    [autoit]

    Global Const $AIFight_MoveStraight = 0
    Global Const $AIFight_MoveRight = 1
    Global Const $AIFight_MoveLeft = 3

    [/autoit]

    Ihr gebt also an in welche Richtung (ausgehend von der Blickrichtung) sich eure Schlange bewegen soll. Entweder gerade aus, nach rechts oder nach links.

    Die nächsten 4 Konstanten sind die allgemeinen Werte. Mithilfe einer BitAND Abfrage könnt ihr im Array (welches ihr im 1. Parameter übergeben bekommt) ermitteln ob ein Feld besetzt ist oder nicht.

    [autoit]

    Global Const $AIFight_MapFree = 0
    Global Const $AIFight_MapFeed = 1
    Global Const $AIFight_MapSolid = 2
    Global Const $AIFight_MapWall = 6 ; 4 or MapSolid

    [/autoit]

    MapFree und MapFeed kommen lediglich alleine vor. Ist ein Feld frei, so ist es mit MapFree (0) gekennzeichnet, liegt auf dem Feld ein Futterstück, so ist es mit MapFeed (1) belegt. Mit MapSolid (2) sind alle Felder gekennzeichnet die durch eine Schlange oder durch eine Mauer verdeckt sind. Dafür benötigt ihr die BitAND Funktion. Im Grunde relativ einfach zu benutzen: If BitAND($aMap[x][y], $AIFight_MapSolid) Then .... Die MapWall (6) kennzeichnen die Wände. Diese sollten nach Möglichkeit vermieden werden. ^^

    Ansonsten stehen euch noch die Körperteil spezifischen Konstanten zur Verfügung. Ich denke dass weitere Erklärungen nicht notwendig sind. Alles was also in der AIFightConst.au3 enthalten ist, dürft ihr nach Herzenslust einsetzen. Falls Fragen auftauchen, immer nachfragen.

    Die Spielfeldgröße sowie Anzahl der Runden lege ich nach dem Abgabetermin fest. Lediglich die erlaubte Datenbankgröße sowie die 3 Sekunden Ausführungszeit stehen schon fest. Abgabetermin ist der 18. März 2015 um 23:59 Uhr. Wer mir später seine Einsendung schickt nimmt nicht am Wettbewerb teil. Ich wünsche viel Spaß und gutes gelingen! :)

    PS: Dies ist mein erster Wettbewerb in dieser Form. Daher brauchte ich diese lange Vorbereitungszeit um erst mal alles zu planen. Die kommenden Wettbewerbe werden auch in dieser Form ablaufen. Jedoch werde ich immer versuchen euch alles so angenehmer wie möglich zu machen. Falls Bugs auftreten bitte sofort melden damit ich's schnellstmöglich fixen kann. Und denkt daran eure reservierten Präfixe zu nutzen bzw. noch einen zu registrieren! ^^

  • Schleifen in Switch/Case?

    • Yjuq
    • 17. Februar 2015 um 07:50

    Ja, mit einem Workaround. Nutz einfach den Ruckgabewert einer User Funktion. Bin am Handy, sonst wuerde ich dir ein Beispiel scvreiben ^^

  • Pid speicherung wirft einen Fehler aus

    • Yjuq
    • 14. Februar 2015 um 18:46

    Und nicht nur der Schreibfehler, sondern auch die vergessenen eckigen Klammern:Global $pids[1] = [Run("script_1.exe")]

  • Brauche unbedingt Hilfe

    • Yjuq
    • 12. Februar 2015 um 20:56

    Sehr schön dass ich dir helfen konnte. Falls noch konkrete Fragen auftauchen kannst du diese natürlich auch stellen. Alternativ stehe ich dir auch noch per PN zur Verfügung. ^^

    LG. Make :)

  • Script/Funktion gesucht und Hilfe Benötigt

    • Yjuq
    • 12. Februar 2015 um 13:55

    Er hatte da einen Text vorher stehen den er allerdings mal eben so schnell wieder weg editiert hat. :D
    Bei deinem Code werden auch Eingaben entgegen genommen die eben nicht die Bezeichnung "Ethernet" im Namen tragen.
    Und das wollte er nicht. Naja, die Beispieldaten waren wohl nicht so umfangreich. ^^

    Jedenfalls: Dein Code hatte nicht ganz das gewünschte Ergebnis geliefert. :)

  • Script/Funktion gesucht und Hilfe Benötigt

    • Yjuq
    • 12. Februar 2015 um 13:37

    Naja, bei meinen Code passiert das nicht, nimm den! ;D

    €dit: Gern geschehen. ^^

  • Script/Funktion gesucht und Hilfe Benötigt

    • Yjuq
    • 12. Februar 2015 um 13:27

    Mithilfe von RegExp lässt sich das realisieren. Im Grunde so:

    [autoit]

    #include <Array.au3>

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

    $sString = _
    ' Interface IHQ IQD OHQ OQD RXBS RXPS TXBS TXPS TRTL' & @CRLF & _
    '------------------------------------------------------------------------' & @CRLF & _
    ' Ethernet0/0 0 0 0 0 0 0 0 0 0' & @CRLF & _
    '* Ethernet0/1 0 0 0 0 2000 2 0 0 0' & @CRLF & _
    'NOTE:No separate counters are maintained for subinterfaces'

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

    $aArr = StringRegExp($sString, '[^ ]*Ethernet\d/\d', 3)
    _ArrayDisplay($aArr)

    [/autoit]


    €dit: Mist, zu langsam ^^

  • Brauche unbedingt Hilfe

    • Yjuq
    • 12. Februar 2015 um 13:11

    Alles klar, jetzt ist mir auch der Sinn der Aufgabe klar. Zwar ist die Aufgabenstellung vielleicht nicht die beste Wahl, aber führt jedoch zum eigentlichen Sinn der Aufgabe. Kenne ich von meine Lehrer auch, die stellen auch schon mal fragwürdige Aufgaben. Aber letztendlich lernt man doch schon das, was sie damit vermitteln wollen. Bei dir ist das in diesem Fall die Einführung in die Programmierung. Da hast du Glück gehabt dass du nicht C++ erwischt hast, AutoIt ist da wesentlich einfacher zu erlernen. Vielleicht macht dir ja das Programmieren später ja tatsächlich Spaß und du wirst es weiter fortführen, wer weiß. :)

    Soa, jetzt zu deinem eigentlichen Problem. Da es wenig Sinn macht dir eine Lösung dahin zu klatschen, gebe ich dir einfach einen Crashkurs in AutoIt. Ich versuche dir alles möglichst so beizubringen, dass du die Aufgabe auch selber lösen kannst. Da ihr dieses Thema ja quasi jetzt angefangen habt und du nicht so scheinst als ob du schon Programmiererfahrung hast, wird dir nichts anderes übrig bleiben als dir die Grundlagen anzueignen.

    Da ich nicht weiß wie viel du bis jetzt schon selber erarbeitet hast, werde ich einfach von Anfang an ansetzen. Dabei werde ich nur auf das eingehen, was du zur Lösung dieser Aufgabenstellung brauchst. Also, fangen wir an:

    Variablen
    Ich kenne kaum ein Skript, was nicht ohne Variablen auskommt. In Variablen kannst du Werte hinterlegen, abfragen und auch ändern. Variablen werden in AutoIt mithilfe eines $ Zeichens eingeleitet und enthalten danach einen Bezeichner. Der Bezeichner darf dabei nur aus den Zeichen A-Z, a-z, 0-9 und dem Unterstrich _ bestehen. In Variablen kannst du jede mögliche Art von Daten ablegen:

    [autoit]

    $var = 123 ; Ganzzahlen
    $var = 333.33 ; Gleitkommazahlen
    $var = 'Text' ; Strings

    [/autoit]

    If-Abfragen
    If-Abfragen enthalten eine Bedingung, nur wenn diese Zutrifft wird auch der enthaltende Code ausgeführt. Ansonsten nicht. Dadurch ist es Möglich dem Programm Logik zu geben. Schauen wir uns einmal folgendes Skript an:

    [autoit]

    If True Then MsgBox(0, '', 'Die Bedingung ist wahr!')
    If False Then MsgBox(0, '', 'Die Bedingung ist falsch!')

    [/autoit]

    True steht dabei für wahr, False für falsch. Wie bereits gesagt wird eine Bedingung nur ausgeführt wenn diese Wahr ist. Um flexibel zu arbeiten können zum Vergleich auch Variablen und Vergleichsoperatoren herangezogen werden:

    [autoit]

    $var = 1

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

    If $var = 1 Then
    ; Wenn $var gleich 1 ist dann...
    ElseIf $var = 2 Then
    ; Wenn $var gleich 2 ist dann...
    ElseIf $var > 2 Then
    ; Wenn $var über 2 ist dann...
    Else ; Wenn nichts zutrifft...
    ; ... dann diesen Code ausführen...
    EndIf

    [/autoit]

    Dabei stehen folgende Vergleichsoperatoren zur Verfügung:

    Code
    a = b		a ist gleich b
    a == b		a ist gleich b (auch von der Groß- und Kleinschreibung bei Strings)
    a < b		a ist kleiner als b
    a <= b		a ist kleiner oder gleich wie b
    a > b		a ist größer als b
    a >= b		a ist größer oder gleich wie b
    a <> b		a ist ungleich b

    Darüber hinaus gibt es noch die logischen Operatoren die ebenfalls eingesetzt werden können:

    Code
    x = False		x ist False, 0 oder ein Leerstring
    x = True		x ist nicht False, also alle anderen Werte
    Not x			Negiert den Ausdruck, aus True wird False und andersherum

    Ansonsten stehen dir noch die Switch und Select Verzweige zur Verfügung. Da bitte selber nach googeln.

    Schleifen
    Es gibt die While-, die For- und die Do-Schleife. Alle 3 haben einen unterschiedlichen Zweck. Die While Schleife wird solange ausgeführt wie die Bedingung im Schleifenkopf wahr ist:

    [autoit]

    $i = 1

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

    While $i < 10 ; Solange $i unter 10 ist...
    ; ... Code ausführen...
    ConsoleWrite($i & @CRLF)
    $i += 1
    Wend

    [/autoit]

    Die For-Schleife wird dagegen angegeben wie oft die Schleife ausgeführt werden soll:

    [autoit]

    For $i = 5 To 7 ; 3 mal ausführen.
    ConsoleWrite($i & @CRLF)
    Next

    [/autoit]

    Zum Schluss noch die Do-Schleife. Diese wird mindestens einmal ausgeführt, danach solange wie die Bedingung am Schleifenende(!) falsch ist:

    [autoit]

    $i = 1

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

    Do
    ConsoleWrite($i & @CRLF)
    $i += 1
    Until $i = 10

    [/autoit]

    Built-in Funktionen
    AutoIt liefert einen riesigen Funktionsumfang mit. Letztendlich gibt es zu vielen Aufgabenstellungen unterschiedliche Funktionen. In deinem Fall eben die PixelSearch() Funktion. Diese nimmt spezielle Parameter entgegen die in der Dokumentation nachgelesen werden können. Aber ich denke den Sinn von Funktionen hast du schon verstanden.

    Mithilfe dieses Wissens solltest du halbwegs in der Lage sein selber ein Skript zu schreiben. Zumindest einen Ansatz zu liefern. Versuch es erst einmal selber, danach kannst du gerne nochmal nachfragen. Ich wünsche viel Erfolg! :)

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™