Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding > Coding Tutorials
You last visited: Today at 23:37

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[JAVA] Die Robot Class

Discussion on [JAVA] Die Robot Class within the Coding Tutorials forum part of the General Coding category.

Reply
 
Old   #1

 
Obilee's Avatar
 
elite*gold: 11
Join Date: May 2007
Posts: 62,356
Received Thanks: 29,499
Post [JAVA] Die Robot Class

Ihr möchtet einen Bot in Java Programmieren aber wisst nicht womit ihr Anfangen sollt ? Dann seid ihr hier genau richtig !
Hier will ich euch die Robot Class von Java näher bringen, denn mit ihr kann man eniges Anfangen was man auch für Bots nutzen kann wie die Attacken durch Tastendrücken ausführen, Pixel auslesen um z.b den HP Status dadurch zu erkennen usw.

1. Was ist die Robot Class und was kann sie ?
2. Aller Anfang ist leicht
2.1 Die Robot Class einbinden
2.2 Ein Robot Objekt erstellen
3. Pixel Auswertung und Bearbeitung
4. Übernimmt die Kontrolle !

4.1 Die Maus
4.2 Die Tastatur
4.3 Delay

5. Anmerkung

1. Was ist die Robot Class und was kann sie ?

Die Robot Class stammt von der AWT Class von Java ab, ihre eigenschaft ist es das sie die Kontrolle über die Maus und Tastatur übernehmen kann und man somit einiges Anstellen kann. Außerdem kann sie auch dazu dienen den Bildschirm nach Pixel abzusuchen und zu bestimmen.

Die Robot Class besitzt dazu enige Methoden welche man gut in dieser Grafik sehen kann:

Was die Methoden genau machen werd ich gleich erklären.

2. Aller Anfang ist leicht
2.1 Die Robot Class einbinden

Um die Robot Class überhaupt nutzen zu können muss man die KLasse ersteinmal in unser Programm einbinden, dies geschiet unter Java mit dem "import" Befehl.
Da die Robot Class zu "AWT" gehört schreiben wir:

Code:
 import java.awt.Robot;
Somit ist unser Robot importiert und wir können zum nächsten Schritt weiter gehen.

2.2 EIn Robot Objekt erstellen

Um die Methoden der Robot Klasse nutzen zu können muss man vorher ein Objekt erstellen, dieses Objekt ist die Schnittstelle für unsere Werte die wir übergeben wollen und den Methoden der Klasse.

Dafür schreiben wir:

Code:
 Robot Robo = new Robot();
Das erste Robot sagt aus welcher Klasse unser neues Objekt gehören soll, das Robo ist unser Objekt Name, ihr könnt euer Objekt nennen wie ihr wollt ! Das new Robot(); ruft den Konstruktor der Klasse Robot auf und übergibt die Standart Parameter unserem Objekt Robo. Und schon haben wir es geschafft, unser erstes Robot Objekt wurde erstellt.

3. Pixel Auswertung und Bearbeitung
Da Bots öfters mal die Pixel aus dem Bildschirm Auslesen müssen sind unsere Robot Methoden perfekt dafür geeignet.
Dafür verwenden wir folgende Methode:

Code:
 Robo.getPixelColor(x, y);
Das Robo steht für unser Objekt, durch den Punkt können wir danach die Methoden auswählen und nutzen die die Klasse uns zur verfügung stellt, nach dem Punkt kommt immer der Name der Methode. Nach dem Namen gibt es immer ein ( ), um Werte an die Methode zu übergeben. In unserem Fall müssen wir Koordinaten von unserem Bildschirm der Methode übergeben. Diese gibt danach die Pixel Farben von der Koordinate wieder.

Doch um diese Farben speichern zu können brauchen wir noch eine Variable welche auch unsere Daten speichern kann. Dies geht nur durch ein Objekt der Klasse Color. Wie bei Robot müssen wir zuerst die Klasse importieren:

Code:
 import java.awt.Color;
Danach erstellen wir wieder ein Objekt dafür:

Code:
 Color Pixel = new Color(0,0,0);
Somit haben wir ein Objekt mit dem Namen Pixel welche Farbwerte speichern kann, die (0,0,0) sind Werte die man dem Kontstruktor am Anfang übergibt. Wenn man das Objekt jetzt Ausgeben würde, würde man java.awt.Color[r=0,g=0,b=0] sehen. Wobei die Nullen für Rot, Blau, Grün stehen.

So jetzt wieder zum Eigentlichen Thema dem Pixel auslesen.

Damit unsere getPixelColor Methode weiß von wo sie Überhaupt die Pixel auslesen soll müssen wir ihr Koordinaten übergeben, dies machen wir durch den x und y wert. Wir können entwerder Direkt Werte in die Klammern setzen, oder wir werden Variablen dafür.

Hier zwei Beispiele:
Code:
 Pixel = Robo.getPixelColor(100, 100);
Hier übergibt er unserem Pixel Objekt die drei Farbwerte von der Position (100,100)
Code:
 int x = 150, y = 200;
 Pixel = Robo.getPixelColor(x, y);
In dem zweiten Beispiel deklarieren wir die zwei Variablen x und y mit zwei Startwerten. Somit werden die Pixel Werte von der Position 150,200 ausgelesen und unserem Pixel Objekt übergeben.

Doch was kann man damit jetzt Anstellen ?
Man kann damit auf bestimmte Sachen reagieren wie zum Beispiel wir Wissen das falls an einer Stelle die Farbe Rot auftaucht er das Programm beenden soll.

Code:
 Color Rot = new Color(100,0,0);
 Color Pixel = new Pixel(0,0,0);

 Pixel = Robo.getPixelColor(100, 100);
 if(Rot.equals(Pixel))
     System.exit();
Eine kurze Erklärung: Wir erstellten diesmal 2 Objekte von der Klasse Color, die erste dient dazu um zu Wissen was für Werte unsere Farbe "Rot" haben soll, und das zweite dient dazu um unsere Werte die wir Testen iwo Speichern zu können. Danach Speichern wir die Pixel Werte von der Position 100,100 und gucken durch die IF-Verzweigung ob unser Rot die gleichen Werte hat wie unsere Pixel. Falls ja beendet er das Programm mit System.exit();

4. Übernimmt die Kontrolle !
4.1 Die Maus

Wie schon gesagt können wir auch die Kontrolle der Maus übernehmen um z.b bestimmte Knöpfe drücken zu lassen. Dafür nutzen wir die Methoden:
Code:
 Robo.mouseMove(x, y);
 Robo.mousePress(buttons);
 Robo.mouseRelease(buttons);
Wie in den Methoden zuvor nutzen wir wieder unser Robo Objekt welches für uns die Methoden aufruft, in der ersten Methode wird die Maus zur einer Bestimmten Position bewegt indem man in den Klammern wie bei der Pixel-Methode die Koordinaten übergibt. Die Zweite Methode drückt eine Maustaste die wir in der Klammer angeben, und die letzte Methode dient dazu die Taste auch loszulassen ! Denn wer will schon dass das Programm eine Taste für immer gedrückt hält ?

Um wieder was anschauliches zu haben ein kleines Beispiel:

Code:
 Robo.mouseMove(100,300);
Hier bewegt sich unsere Maus zur Position 100,300 und bleibt auch dort bis man die Maus wieder selber bewegt.
Code:
 int x = 200, y = 600;
 Robo.mouseMove(x,y);
Und wieder ein Beispiel wie mein Pixel auslesen, die Maus bewegt sich durch die Varaiblen zur Position 200,600.

Und jetzt Kombinieren wir das ganze mit unseren Maustasten gedrücke =) Vorher müsst ihr aber wieder mal was importieren um die Maustasten nutzen zu können:
Code:
import java.awt.event.InputEvent;
import java.awt.event.MouseEvent;
Jetzt zum eingemachten;
Code:
Robo.mouseMove(100,300);
Robo.mousePress( InputEvent.BUTTON3_MASK ); 
Robo.mouseRelease(InputEvent.BUTTON3_MASK );
In der ersten Zeile Bewegen wir unsere Maus zur Position 100,300, danach wird in der zweiten Zeile unsere mousePress Methode ausgerufen und ihr unser InputEvent übergeben, also welche Taste gedrückt werden soll. In unserem Fall nehmen wir den BUTTON3, dies ist bei mir die Rechte Maustaste. Dies kann vll. bei euch anders sein kommt auf die Hardware drauf an. Zum schluss wird in der dritten Zeile unsere rechte Maustaste wieder losgelassen.

4.2 Die Tastatur

Das gleiche wie mit der Maus können wir auch mit der Tastatur anstellen, nur das wir hier auch mehrere Tasten gleichzeitig drücken lassen können um zum Beispiel ein Alt + F4 drücken zu lassen.
Für die Tastatur verwenden wir folgende Methoden:
Code:
 Robo.keyPress(keycode);
 Robo.keyRelease(keycode);
Die keyPress Methode ( wie der Name schon sagt ) drückt unsere Taste, dafür müssen wir in den Klammern den keycode der Taste der Methode übergeben, die zweite Methode dient wie schon bei der Maus dazu das die Taste eines Tages auch losgelassen wird.

Ein einfaches Beispiel:
Code:
Robo.keyPress(KeyEvent.VK_V);

Robo.keyRelease(KeyEvent.VK_V);
Es wird die Taste "V" ( nicht zu verwechseln mit v ) gedrückt und danach wieder losgelassen.
Dies kann man unendlich oft wiederholen lassen mit einer while schleife, oder einfach in dem man die Events hintereinander wiederholt:

Code:
 Robo.keyPress(KeyEvent.VK_H);
 Robo.keyRelease(KeyEvent.VK_H);
 Robo.keyPress(KeyEvent.VK_a);
 Robo.keyRelease(KeyEvent.VK_a);
 Robo.keyPress(KeyEvent.VK_l);
 Robo.keyRelease(KeyEvent.VK_l);
 Robo.keyPress(KeyEvent.VK_l);
 Robo.keyRelease(KeyEvent.VK_l);
 Robo.keyPress(KeyEvent.VK_o);
 Robo.keyRelease(KeyEvent.VK_o);
Somit lassen wir das Wort "Hallo" schreiben. Doch um Tastenkombinationen auszuführen müssen wir ein kleines wenig anders vorgehen:
Code:
 Robo.keyPress(KeyEvent.VK_ALT);
 Robo.keyPress(KeyEvent.VK_F4);


 Robo.keyRelease(KeyEvent.VK_ALT);
 Robo.keyRelease(KeyEvent.VK_F4);
Auf den ersten Blick kaum ein unterschied zu sehen, doch wenn man genauer schaut sieht man das zuerst die zwei Tasten gedrückt werden, und danach erst die Tasten losgelassen, und nicht wie vorher "Drücken -> Loslassen". Somit wird zurerst die ALT Taste gedrückt und danach die F4 Taste und erst danach werden beide Losgelassen, und somit haben wir unsere Tastenkombination ausgeführt. Somit ist es auch möglich Sachen aus dem zwichenspeicher einzufügen usw.

4.3 Delay

Da wir bis jetzt die Tasten, die Maus und die Pixelabfragen immer gleich beendet haben, haben wir meistens nicht viel davon.
Das beste Beispiel dafür ist falls wir wollen das sich unsere Spielfigur bewegen soll, falls wir
Code:
Robo.keyPress(KeyEvent.VK_w);

Robo.keyRelease(KeyEvent.VK_w);
benutzen wird sich die Figur nicht ein cm Bewegen weil der Tastendruck so kurz ist dass das Spiel es gar nicht merkt. Was soll man aber dagegen tun ? Eine Lösung ist es einfach die Taste gedrückt zu halten anstatt sie gleich wieder Loszulassen.

Dafür gibt es die Delay Methode:

Code:
Robo.delay(ms);
Durch diese Methode wartet das Programm eine Bestimmte Zeit ab bevor es in die nächste Programmier Zeile geht um diese Auszuführen. Wie man schon sieht gibt man diese Zeitangebe in MS ein. 1000 MS = 1 Sekunde !
Code:
Robo.keyPress(KeyEvent.VK_w);
Robo.delay(2000);

Robo.keyRelease(KeyEvent.VK_w);
In der ersten Zeile wird die Taste w gedrückt, und da wir ein delay eingebaut haben wird diese Taste auch zwei Sekunden gehalten da er Befehl zum Tastenloslassen erst nach dem delay ausgeführt wird.

Dies kann man an sich für alles Verwenden.

5. Anmerkung

Ich habe hier nicht alle Methoden gezeigt weil man diese für den Anfang gar nicht braucht, doch die wichtigsten Sachen sind dabei um anzufangen mit der Klasse rumzuspielen, doch dies sind nur die Grundlagen um damit ein Bot schreiben zu können muss man noch viele andere Dinge einsetzen wie Keyevents usw.

Ihr solltet beim Ausprobieren darauf Aufpassen was ihr Codet! Falls ihr auf die Idee kommt sowas wie zu schreiben:
Code:
do
{
Robo.keyPress(KeyEvent.VK_w);
Robo.keyRelease(KeyEvent.VK_w);
}
while(true);
könnt ihr euren PC schonmal neu Starten da ihr danach gar nichts mehr auf dem Rechner machen könnt da die KOntrolle über die Tastatur ganze Zeit eurem Programm dann gehört :P



Viel spaß !

mfg

obi
Obilee is offline  
Thanks
45 Users
Old 10/24/2009, 15:49   #2



 
elite*gold: 0
Join Date: Nov 2008
Posts: 20,558
Received Thanks: 9,134
Heftig viel Mühe.

#thanked.
Obi for next Global and Admin
Rikkami is offline  
Old 10/24/2009, 16:32   #3

 
elite*gold: 150
Join Date: Apr 2007
Posts: 2,352
Received Thanks: 6,587
Nützliche Klasse und soweit ich gelesen hab alles gut erklärt.

PS:
Hast einmal ein / vergessen, solltest du
eventuell noch editieren aber ansonsten
top Tutorial und wird bestimmt einigen helfen

Quote:
[code]
import java.awt.event.InputEvent;
import java.awt.event.MouseEvent;
[CODE]
wurstbrot123 is online now  
Old 10/24/2009, 16:40   #4

 
Obilee's Avatar
 
elite*gold: 11
Join Date: May 2007
Posts: 62,356
Received Thanks: 29,499
Quote:
Originally Posted by wurstbrot123 View Post
Nützliche Klasse und soweit ich gelesen hab alles gut erklärt.

PS:
Hast einmal ein / vergessen, solltest du
eventuell noch editieren aber ansonsten
top Tutorial und wird bestimmt einigen helfen
Danke =)
Obilee is offline  
Old 10/26/2009, 16:04   #5
 
Gianotti's Avatar
 
elite*gold: 20
Join Date: Mar 2008
Posts: 1,455
Received Thanks: 140
nice tutorial obi
Gianotti is offline  
Old 11/09/2009, 18:56   #6
 
elite*gold: 1
Join Date: Jun 2009
Posts: 570
Received Thanks: 68
gut so... jetzt nur nochmal in c++
Dimension0x00 is offline  
Old 11/09/2009, 20:05   #7

 
Adroxxx's Avatar
 
elite*gold: 15
Join Date: Nov 2005
Posts: 13,034
Received Thanks: 5,321
Quote:
Originally Posted by Primehawk View Post
gut so... jetzt nur nochmal in c++
Adroxxx is offline  
Thanks
1 User
Old 11/12/2009, 12:56   #8
 
elite*gold: 0
Join Date: Aug 2008
Posts: 1
Received Thanks: 0
Nice

Danke aber kannste vllt mal den komplett code reinstellen und net nur teile davon da ich zwar grundkentnisse hab aber noch relative neu auf dem gebiet bin.
Bellavista is offline  
Old 11/13/2009, 11:06   #9

 
Obilee's Avatar
 
elite*gold: 11
Join Date: May 2007
Posts: 62,356
Received Thanks: 29,499
Kann ich nacher mal machn
Obilee is offline  
Old 11/13/2009, 15:37   #10
 
elite*gold: 0
Join Date: Nov 2009
Posts: 2
Received Thanks: 0
ist natuerlich nur bedingt zu gebrauchen, da man mit
Code:
Robo.mouseMove(100,300);
mit einem einfach Resize der applikation untersch. ergebnisse erhaelt ;-)

die Roboter klasse fuer "intelligerente" Sachen zu verwenden ist dann schon mhm schwierig.

so kleine Sachen sind aber schon witzig (grad deine anderen sachen gesehen... gute idee... mal ueberlegen was noch so geht)
mmcfly is offline  
Old 11/22/2009, 01:11   #11
 
elite*gold: 0
Join Date: Mar 2006
Posts: 98
Received Thanks: 9
Wow, thanks for this! Makes botprogramming in java A LOT easier . Danke schon
Diabox is offline  
Old 12/12/2009, 00:05   #12
 
elite*gold: 0
Join Date: May 2009
Posts: 114
Received Thanks: 25
Richtig gut gemacht! Riesen Lob! Bestimmt viel Aufwand!

Thx auf jedenfall verdient!

Mfg Bobo-y
Bobo-y is offline  
Old 01/06/2010, 19:26   #13
 
elite*gold: 0
Join Date: May 2007
Posts: 6
Received Thanks: 0
Schön und gut. Angenohmen man möchte jetzt ein Programm entwickeln welche die Pixel an einer bestimmten Postion ausliest. Wie kann ich auslesen um welche Pixel es sich handeln?

//Ok man kann es mit Paint machen.
nikluetke is offline  
Old 01/07/2010, 01:08   #14
 
elite*gold: 100
Join Date: Nov 2009
Posts: 2,936
Received Thanks: 1,183
Wow , viel Arbeit , danke Obi.
-strYker is offline  
Old 01/07/2010, 08:27   #15
 
elite*gold: 360
Join Date: Jan 2008
Posts: 1,128
Received Thanks: 522
Thanks on such a nice tutorial, yet too bad its on deutsch only, and I am having troubles understanding it.
D00MR4ZR is offline  
Reply

Tags
bot, coden, java, robot


Similar Threads Similar Threads
what is the best class to grind metin2 yang(class selection guide for newbies)
07/07/2012 - Metin2 - 1 Replies
Again, I am using Enligsh. So if you cant read it well, just turn to google online translation. If i am supposed to say or answer what is the best class for grinding metin2 yang in Metin2, of course the most efficiently, i strongly recommand the Warrior, and promote to Sword Warrior at level 5. This class has both high defense and attack, as well as great area attack skill and control skill(I mean the stun skill). I recommend the BM sura as your second choice,because he has the sweetest...
WTB ANY CLASS LEVEL 100+ FOR LAST CHAOS ETERNIA!!!! ANY CLASS WTB WITH OR WITHOUT EQ
06/26/2010 - Last Chaos Trading - 0 Replies
What the title says, however the account for sale must not be past like £40, paypal will do and middleman the account must not been under any suspicon or anything!!
Class change to TBC Class (bloodelf & Danei)
11/03/2006 - World of Warcraft - 127 Replies
habe das hier vor kurzem mal im icq gesendet bekommen, hoffe das steht hier noch net ^^ es ist zwar buggy z.b. wenn ihr ein troll mit tatoos in der fratze habt usw aber man kann es durch aus usen. am besten neuen char machen und richtig einstellen :). Anleitung: ladet die datei runter in euer World of Warcraft\Data ordner und benennt sie in speech2.mpq um, dan einfach in wow einloggen wenn es ein stick wert ist bitte sticken :)



All times are GMT +1. The time now is 23:37.


Powered by vBulletin®
Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2022 elitepvpers All Rights Reserved.