Also für den Anfang sind Flashgames am einfachsten (davon findet ihr reichlich bei google oder auf albinoblacksheep...
Ich nehme als Beispiel Curveball, denn das Spiel versteht glaub ich jeder, es hat kaum/keine Ladezeit und es ist einfach für den Anfang...
Schritt 1: Get Ready for Action
Also ihr startet das Spiel <Link>
Nun erstellt ihr ein neues AutoIt-Dokument...
Das könnt ihr alles löschen...
Als nächstes geht ihr in euren Autoitordner (z.B.: C:\Programme\AutoIt3) und öffnet Au3Info.exe
Dieses Tool zeigt uns alle Daten an die wird von einem Spiel brauchen (Namen, Farbautoits, Position...)
Jetzt können wir loslegen...
Schritt 2: Sammeln der Informationen
Um einen Bot zu machen müssen wir uns erstmal klar machen, was der Bot machen soll...
In unserem Fall ist es nicht schwer: Er soll die Maus automatisch dahinbewegen wo auch der Ball ist...
Der einfachste Befehl einen Bot zu programmieren ist der "PixelSearch" befehl...
Wie der Name schon sagt sucht der Befehl Pixel einer bestimmten Farbe. Euer Bildschirm ist in kleine Pixel aufgeteilt (Die Auflösung euers Bildschirms z.B.: 800x600 sagt euch wieviel Pixel ihr habt bei 800x600 wärn das 480000 Pixel), jeder dieser Pixel zeigt euch eine Farbe aus diesen vielen Farben ergbit sich nachher dann das gesamt wie z.B. diesre Smilie wir sehn für ihn wurden hauptsächlich rote, weiße und ein paar schwarze Pixel für die Umrandung verwendet... Nun zurück zu Pixelsearch... Der Befehl ist wiefolgt aufgebaut:
Pixelsearch sucht also aus einem eingegrenzten 4-eck einen bestimmten Pixel mit der Farbe... Die Begrenzung könnt ihr mit dem Tool "Au3Info.exe" herausbekommen...
Ihr habt beim Tool ein kleines Bild mit deinem Fadenkreuz. Das ist das Findertool.. Ihr geht mit der maus auf das Fadenkreuz und haltet die linke Maustate gedrückt... nun bewegt ihr das Fadenkreuz in die linke obere Ecke des Spielfensters und lasst los... Das Tool zeigt euch jetzt unter Position sowas wie 366, 245 an... das ist einmal die entfernung zum linken rand und einmal die entfernung zum oberen rand... dsa gleiche macht ihr noch mit der rechten unteren ecke (ihr solltet versuchen die Anzeigen nicht mit rein zu nehemn) Bei mir kommt 909, 626 raus... Wir runden alle Werte also kommt insgesamt 365, 245 und 910, 625 raus...
Nun können wir schon 4 der 6 Felder von Pixelsearch ausfüllen:
Dazu geht ihr wieder mit der Maus auf das Fadenkreuz, drückt und haltet die linke Maustaste und zieht das Fadenkreuz auf den Ball (Falls ihr noch keinen Ball habt Startet das Spiel ) Nun sind im Fenster wieder neue Werte... wir brauchen aba nur den Colorautoit.. macht ein doppelklick auf ihn und dann könnt ihr ihn mit Strg+V oder per Rechtsklick einfügen...
Jetzt haben wir alles bis auf die Farbautoitabweichung... die stell ich standartgemäß immer auf 15... ist halt damit er nicht nur genau diese eine Farbe sondern auch ähnliche Farben auswählt...
Unser autoit sieht nun so aus:
Somit haben wir alle Informationen die wir braucehn...
Schritt 3: Das Programmieren
Nun geht es daran das der Bot auch wirklich was macht... Pixelsearch liefert uns jetzt also 2 Werte: Die X-Koorinate und die Y-Koordinate des Pixels...
Die müssen wir in eine Variabel Speichern... das sieht dann so aus:
Anstatt Ballposition kann man natürlich auch jeden andern Namen nehmen... man muss aba bei einen Namen bleiben
Jetzt wollen wir das die Maus zu diesem Punkt geht... dafür ist der Befehl "Mousemove" natürlich unsere erste Wahl
Also auch Mousemove hat wieder 3 Sachen die man Angeben kann:
Wir wollen das sich die Maus zu dem gefunden Pixel bewegt, also setzen wir die Variabel ein... Es gibt nun eine Besonderheit: Normalerweise kann in eine Variabel nur ein Wert.. wir haben jetzt aba 2... Aba es gibt auch sogenannte Arrays... wo mehrere Werte reinkönnen... und AutoIt hat aus der Variabel $Ballposition automatisch ein Array gemacht.. nun können wir aba nicht schreiben MouseMove($Ballposition, $Ballposition) sonder müssen auch sagen welchen Wert von den Werten er nehmen soll... das machen wir mit den Zahlen 1, 2, 3 usw... bei Array ist es aba so das wir mit 0 anfangen müssen d.h. 0, 1, 2, 3, 4... unsere Variabel sieht jetzt also für den ersten Wert (X-Koordinate) so aus: $Ballposition[0] und für den 2. Wert dann: $Ballposition[1]... Bei Geschwindigkeit haben wir die Wahl von einer Zahl zwischen 0 und 101 (also 1, 2...99, 100). 1 Ist hierbei das schnellste und 100 das langsamste... Wir wollen natürlich das sich die Maus schnell bewegt und nehmen deswegen 1...
Unser autoit sieht also nun so aus:
Nun kann es im moment aba bei diesem autoit zu Fehlern kommen, nämlich dann wenn er keinen Pixel mit der Farbe findet... dann soll die maus zu einer nicht gesetzen Koordinate sich bewegen und das macht AutoIt nicht mit... deswegen müssen wir das ganz so gestallten das sie das nur tut wenn die variabel gesetzt ist... Also benutzten wir eine IF-Funktion (zu deutsch:-Wenn-Funktion) mit der Bedingung IsArray($Ballposition) = True.. Also wird der Dann-Teil nur passieren wenn Ballposition ein Array ist, sprich mehrere Werte hat...
Der autoit sieht nun so aus:
Jetzt haben wirs fast geschaft... aba: er macht das ganze nur einmal... wir wollen aba das er das durchgehend macht... also brauchen wir eine Schleife... dafür benutzen wir die While funktion: sie ermöglicht uns etwas solange zu tun wie eine Bedingung wahr ist...
Wir nehmen also folgenden autoit:
ein true direkt hinterm while bedeutet er soll den while-teil immer machen... es gibt also keine bedingung.. (true kann auch durch 1 ersetzt werden)
unser gesamt autoit nun:
Hab halt nochn paar Sachen verändert. aber seit der letzten änderung geht er i-wie netmehr. Wollte reinbaun das man manuell immer den Pixelsearch-Berecih festlegen kann mti der maus aber i- wie bekomme ich denhier:
(29) : ==> Variable used without being declared.:
$Ballposition = PixelSearch($ObenL[0], $ObenL[1], $UntenR[0],$UntenR[1], 0xB6FFA4, 15)
$Ballposition = PixelSearch(^ ERROR
mhh also endweder es liegt daran das du nicht alle variabeln gesetz hast, oda es liegt daran das du sie vertauscht hast also einmal obenl[0] mir [1] oda so
ansonsten würde ich noch nach dem die maus zum gefunden pixel bewegt wurde ein click einbauen dann macht der bot alles automatisch siehe mein source code... und wegen dem Fenster geb ich dir nen tipp...: such dir irgendeine besondere Farbe im Spiel (das grüne gitter zum beispiel) und lass pixelsearch darüber laufen... er wird zuerst den punkt linksoben finden... dann guckste wie breit das spiel ist und schon hast du das spielfenster (Kopieren für den Wettbewerbstrengstens Verboten):
Also breite und höhe bekommst du so raus:
-Öffne das Spiel
-Mach einen Screenshot
-Füge ihn in Paint ein
-nun makiere den Teil den der Bot überprüfen soll und schneide ihn aus
-gehe bei paint unter bild -> attribute (Strg+E) und stell breite und höhe auf 1 drücke ok
-Füge nun den screenshot ein... peint wird das Bildformat automatisch an den Screenshot anpassen
-gehe bei paint wieder unter attribute und schon steht da jetzt unter höhe und breite die höhe und breite des spiels...
Nun nurnoch in meinen code passend einfügen und schon passt alles
1. wo speiche mozilla seine screenshots (finds um verrecken net) und
2. wie einfugen? kann mir schwer vorstellen dass da einfach +66 oder so stehen muss odeR?
also screenshot: du gehst auf die page und drückst den [Druck] Knopf
dannach öffnest du paint und gehtst auf bearbeiten und dann einfügen (oder auch Strg+V)
und das mit +66 ist schon richtig
Aber wieder:
(26) : ==> Variable used without being declared.:
$Ballposition = PixelSearch($leftuppercorner[0],$leftuppercorner[1],$rightborder,$bottomborder, 0xB6FFA4, 15)
$Ballposition = PixelSearch(^ ERROR
arrg wieso is da ein fehler?
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »AMrK« (20. September 2008, 17:32)
2 Sachen:
1. Das Spiel ist nie im Leben 1024x768 Groß xD (das sind max 500x500 oda so)
2. Vlt findet er die farbe nicht, setzt deswegen den Array net und dann kommt es zum fehler...
Benutzt den code für fensterfinden:
hm war des was paint angegeben hat aber ich schau nomal
uno momento
EDIT: Hattest recht Paint hat mnir vorhin falsche Maße geliefert, fenster wird gefunden (durch msgbox bestätigt aber trotzdem:
26) : ==> Variable used without being declared.:
If IsArray($leftuppercorner) Then
If IsArray(^ ERROR