AWT Robot Klasse Screenshot nach Pixelmustern in bestimmten Radius um Bildschirmmittelpunkt absuchen

FawKes100

Aktives Mitglied
Moin!
Habe in letzter Zeit ein wenig wieder in Java gearbeitet und wollte um es ein wenig weiter auszubauen gerne einen "kleinen Bot" schreiben. Will ich nicht zum cheaten oder so schreiben, sondern zum Üben vom Programmieren! :) Der Bot soll sich auf einer Seite einloggen (funktioniert) dann auf "Spielen" klicken (funktioniert) und aus dem Hafen fahren (es handelt sich um das Spiel Piratestorm) und das aus dem Hafen fahren funktioniert ebenfalls schon. Doch nun fangen die Probleme an... Um die Karte nach Npcs abzusuchen muss der Bildschirminhalt irgendwie analysiert werden. Dazu mache ich erstmal einen Screenshot, doch ich habe nicht so wirklich eine Idee, wie ich auf diesem Screenshot so wirklich nach einem bestimmten Pixelmuster suchen soll. Ich könnte mir vorstellen, dass das mit einem Array funktioniert, doch eine wirkliche Idee, wie man es umsetzen könnte habe ich noch nicht. Hier übrigens den Code, den ich schon geschrieben habe:
Java:
//package robot;
/*
* RobotDemo.java
*/
import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
import java.io.*;

import javax.imageio.ImageIO;
import javax.swing.*;
public class RobotDemo{
    public static void main(String[] args) throws IOException, AWTException{
        final Robot robot = new Robot();
       
       
        robot.mouseMove(450, 1080);
        robot.mousePress(InputEvent.BUTTON1_MASK);
        robot.mouseRelease(InputEvent.BUTTON1_MASK);
        robot.delay(10000);
        robot.mouseMove(550, 80);
        robot.mousePress(InputEvent.BUTTON1_MASK);
        robot.mouseRelease(InputEvent.BUTTON1_MASK);
        robot.delay(10000);
        robot.mouseMove(850, 550);
        robot.mousePress(InputEvent.BUTTON1_MASK);
        robot.mouseRelease(InputEvent.BUTTON1_MASK);
        robot.delay(30000);
        robot.mouseMove(650, 650);
        robot.mousePress(InputEvent.BUTTON1_MASK);
        robot.mouseRelease(InputEvent.BUTTON1_MASK);
        robot.delay(100);
        robot.mouseMove(1480, 807);
        robot.mousePress(InputEvent.BUTTON1_MASK);
        robot.mouseRelease(InputEvent.BUTTON1_MASK);
        robot.delay(100);
        for (int i=1; i<=2; i++)
        {
             BufferedImage image = robot.createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
             Color pixelColor = new Robot().getPixelColor( i*100, i*50 );
             new Thread(new Runnable(){
                 public void run() {

                 }
Hoffe ihr könnt mir mit dem wahrscheinlich simplen Problem helfen...
             }).start();
             JOptionPane.showMessageDialog(null, "Roboter ist fertig");
        }

       
        new Thread(new Runnable(){
            public void run() {

            }
        }).start();
        JOptionPane.showMessageDialog(null,"Robot Demo ist fertig.");
    }
}
 

FawKes100

Aktives Mitglied
Hi, danke für die schnelle Antwort erstmal. Zu dem Link, den du geschickt hast der führt zu einem Fehler, das gesuchte Thema konnte nicht gefunden werden. Meine Frage bezieht sich darauf, wie ich ein BufferedImage nach Pixelmustern, die ich vorher als "Beispielbilder" einlese durchsuchen kann.
 

Viktim

Bekanntes Mitglied
Hey,
mit der methode:
Java:
image.getRGB(x, y);
kannst du dir den rgb Wert von einem bestimmten Pixel an der Stelle (x,y) auslesen.
Ich kenn das Spiel nicht und weiß daher nicht was du suchst, aber damit könntest du dir die Farben holen...
Wie wärs wenn du mal den Screenshot hochlädst :)
 

FawKes100

Aktives Mitglied
Das habe ich ja auch schon mit robot.getRGB(x,y) gemacht nur es müssen ja mehrere Pixel sich vom Hintergrund beispielsweise abheben... Aber hier mal der Screenshot: Farming.png
Es müssen diese Schiffe darauf gesucht und bestmöglichst erkannt werden. Anschließend muss das Schiff in der Mitte durch einen Mausklick dahin fahren und dann muss die leertaste gedrückt werden, damit das Ziel angegriffen wird. Die Frage ist also nicht nur, wie das Bufferedimage durchsucht werden kann (möglichst effizient um nicht Pixel für pixel durchzugehen, sondern größere Pixelgruppen gleichzeitig, sondern auch wie man dann die Koordinaten an die Maus weitergibt, damit die zu dem Schiff fährt...
 

FawKes100

Aktives Mitglied
Oh... es könnte sein, dass ich das ausversehen zweimal erstellt habe weil der letzte Satz sich irgendwie in die Mitte von dem Codetext verschoben hat und ich es dann nochmal bearbeitet hatte... naja egal...
 

Viktim

Bekanntes Mitglied
Du solltest du einen groben Farabschnitt der Schiffe, Monster, (oder was auch immer du Brauchst) also z.B. rgb wert von 0 zu 20 für ein Schiff oder so :D und dann immer jeden 10ten Pixel oder so abfragen, ob er in eins der Farb-Muster passt. Wenn ja soltest du noch sicherheishalber einen kleinen Bereich um ihn absuchen und wenn die auch stimmen, dann kannst hast du dein Objekt :D

Dann merkst du dir einfach den ersten Pixel und bewegst die Maus wie gewohnt mit dem Robot dahin.
Wenn das noch nicht ganz stimmt, kannst du zu den x und y Werten ja solange was draufrechnen / abziehen bis das richtig kalibriert ist :D (Also ausprobieren)
 

FawKes100

Aktives Mitglied
Ich habe nochmal kurz eine Frage zu dem Abfagen: Gibt es nicht die Möglichkeit dass man bei der bedingung sagt, wenn die Farbwerte nicht denen des ozeans und auch nicht denen der Insel entsprechen, dass dann der Angriff ausgeführt wird? Achso und ne kleine Frage noch zu der Bedingung der farben: Wie frage ich die ab? Ich kann ja Pixel für Pixel durchgehen, dass ist mir klar, doch wie kann ich dann nachfragen ob die so sind, also wie kann ich die werte dann im Programm abgleichen? Ich weiß wie ich sie abfrage, weiß aber nicht wie das Programm dann entscheidet, ob es der richtige Farbwert ist oder der falsche...
 

Viktim

Bekanntes Mitglied
Tja, da musst du dir die werte selber aus den screenshots holen (vilt mit Paint, gimp, etc.):D Ich würd die bereiche dann in ein Enum packen und eben entsprechend dem was sie darstellen sollen benennen :D

Die Pixel kannst du ja durchgehen, wie ichs dir gesagt hab, also erstmal immer alle 5 oder so :D die objekte werden ja warscheinlich größer sein als 5 Pixel :D

Und wie du die Pixel dann aus dem Bild abfragst, hab ich dir oben gezeigt ;)
 

FawKes100

Aktives Mitglied
Hi, hab mal wieder ein paar Fragen:
Was ist ein Enum?
Und zu dem was ich schon im letzten post wissen wollte: Ich weiß wie der Befehl aussieht um die Farbe abzufragen, dass ist nicht das problem :D
Mein Problem ist, dass ich nicht weiß, wie ich abfrage, ob der Farbcodex an pixel x y die vorgegebenen werte hat.
Code:
if (image.getRGB(x,y) {}
Ich muss da ja noch die farbwerte mit angeben, die da sein sollen. Hoffe es ist jetzt verständlicher :D
 

FawKes100

Aktives Mitglied
Hey, danke sehr für den Link :)
Also so wie ich das jetzt verstanden habe: Ich lade die daten von Screenshots in das Programm, und frage dann die Farbwerte von den einzelnen "Zielen" ab. Das würde ich hinkriegen. Doch nun zu dem Enum: Wie kann ich die daten übermitteln, oder kann ich einfach die Befehle, um an die Farbwerte zukommen in das Enum schreiben? Oder falls ich die daten nicht automatisch übergeben lassen kann, sondern die Farbwerte manuel eingeben muss, wie schreibe ich dass dann in das Enum?
Noch ne weitere Frage: Sollte ich zum abfragen der Farbwerte vom Bildschirm mit einzelnen pixeln oder mit einem Array von Pixeln machen?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Aruetiise Schnellere Alternative zu awt.robot AWT, Swing, JavaFX & SWT 3
G AWT Wie bekomme ich einen zeitgesteuerten robot hin? AWT, Swing, JavaFX & SWT 6
W JavaFX JavaFX Robot funktionsfähig? AWT, Swing, JavaFX & SWT 6
D Robot Programm mit Escape abbrechen (aus Eclipse heraus) AWT, Swing, JavaFX & SWT 2
N Speed Click Robot? AWT, Swing, JavaFX & SWT 7
F Hilfe beim ausschalten von Robot AWT, Swing, JavaFX & SWT 7
H Java Robot mouse funktioniert nur auf Notebook nicht. AWT, Swing, JavaFX & SWT 4
B Externes Programm mit Robot Steuern AWT, Swing, JavaFX & SWT 3
F Robot Makro fehlerhaft AWT, Swing, JavaFX & SWT 7
1 Java.awt.Robot Problem beim Shift-Druck AWT, Swing, JavaFX & SWT 5
P AWT.Robot & pressedKey AWT, Swing, JavaFX & SWT 13
W problem mit robot AWT, Swing, JavaFX & SWT 3
ARadauer Robot in vmware AWT, Swing, JavaFX & SWT 2
I robot - Satzzeichen AWT, Swing, JavaFX & SWT 3
L Wie benutze ich einen robot richtig für screencapture AWT, Swing, JavaFX & SWT 5
D Robot: Screenshot vom Desktop Hintergrund möglich ? AWT, Swing, JavaFX & SWT 3
B Robot wird langsamer AWT, Swing, JavaFX & SWT 4
G Robot AWT, Swing, JavaFX & SWT 5
M Eigene Java Klasse für allgemeine Grafikelemente AWT, Swing, JavaFX & SWT 8
Jose05 Aus einer normalen Java Klasse eine FXML-Klasse laden AWT, Swing, JavaFX & SWT 12
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14
_user_q Versionscode aus build.gradle in Java-Klasse ausgeben lassen AWT, Swing, JavaFX & SWT 14
H MouseAdapter Klasse nutzen wenn eigene Klasse bereits von anderer erbt AWT, Swing, JavaFX & SWT 13
Jose05 JavaFx Fxml: GUI aus einer anderen Klasse starten AWT, Swing, JavaFX & SWT 1
T JavaFX TableColumn in separate Klasse auslagern AWT, Swing, JavaFX & SWT 7
Monokuma KeyEvent in der Canvas Klasse AWT, Swing, JavaFX & SWT 0
B Was würden Profis an meiner Klasse verbessern? AWT, Swing, JavaFX & SWT 1
B JavaFX Verständnisfrage EventHandler<ActionEvent> Implementierung in meiner Klasse AWT, Swing, JavaFX & SWT 2
B JavaFX Farbe eines Quadrates in einer separaten Klasse ändern AWT, Swing, JavaFX & SWT 4
S Stream API, Anonyme Klasse AWT, Swing, JavaFX & SWT 8
B JavaFX Von welcher Klasse und zu welchem Zeitpunkt werden Event-Objekte erstellt? AWT, Swing, JavaFX & SWT 3
N Aufruf einer anderen Klasse durch Button ActionListener AWT, Swing, JavaFX & SWT 2
F jTree und das Model aus einer eigenen Klasse AWT, Swing, JavaFX & SWT 1
F Jtree aus Klasse mit Arraylisten AWT, Swing, JavaFX & SWT 1
L Javafx Controller Klasse in Maven AWT, Swing, JavaFX & SWT 7
karlmasutra JavaFX Zugriff auf eine erzeugte Scene aus einer anderen Klasse AWT, Swing, JavaFX & SWT 1
J Bild von anderer Klasse will nicht laden AWT, Swing, JavaFX & SWT 1
L CardLayout in einer Klasse? AWT, Swing, JavaFX & SWT 2
L Java- UI zweites Fenster aus einer anderen Klasse öffnen durch ButtonClick AWT, Swing, JavaFX & SWT 4
ralfb1105 Swing Ausführung einer SwingWorker Klasse stoppen AWT, Swing, JavaFX & SWT 4
xYurisha JLabel Text einer geöffneten Gui über eine andere Klasse ändern! AWT, Swing, JavaFX & SWT 3
J 2D-Grafik Background einer Jpanel Klasse ändern AWT, Swing, JavaFX & SWT 1
J JFram Location aus Konstruktor einer anderen Klasse auslesen AWT, Swing, JavaFX & SWT 10
J 2D-Grafik Background Image Klasse AWT, Swing, JavaFX & SWT 14
K Frame aus anderer Klasse schließen AWT, Swing, JavaFX & SWT 3
M Eigene Klasse mit Grafikobjekten schreiben AWT, Swing, JavaFX & SWT 4
0 Swing JTable aus anderer Klasse updaten AWT, Swing, JavaFX & SWT 5
it_is_all Event Handling ActionListener in anderer Klasse klappt nicht AWT, Swing, JavaFX & SWT 4
L JavaFX button über andere Klasse ändern AWT, Swing, JavaFX & SWT 7
K über Button andere Java Klasse aufrufen AWT, Swing, JavaFX & SWT 15
C Nach Aufruf von anderer Klasse streikt Grafik AWT, Swing, JavaFX & SWT 1
S per Button Variableninhalt aus anderer Klasse holen AWT, Swing, JavaFX & SWT 3
K JButton auf anderer Klasse AWT, Swing, JavaFX & SWT 6
R Update eines Labels bei Methodenaufruf einer anderen Klasse AWT, Swing, JavaFX & SWT 9
Java_RY AWT Frame in eine eigene klasse auslagern und aufrufen AWT, Swing, JavaFX & SWT 6
L JavaFX Verbindung zwischen Beschreibung und Listener (Codebehind Klasse) AWT, Swing, JavaFX & SWT 4
J JTextfield automatisch aus zweiter Klasse aktualisieren AWT, Swing, JavaFX & SWT 5
J JavaFX Tableview Daten hinzufügen aus anderer Klasse AWT, Swing, JavaFX & SWT 7
Ghostman1711 GUI Java von Klasse mit Application Windows anderes Application Window aufrufen AWT, Swing, JavaFX & SWT 6
K JTable in extra Klasse, Zugriff in einer anderen klasse nicht möglich AWT, Swing, JavaFX & SWT 26
D JavaFX Probleme bei Service-Klasse beim ändern der GUI AWT, Swing, JavaFX & SWT 8
T Klasse über JButton schließen AWT, Swing, JavaFX & SWT 4
N JavaFX Erweitern der Line(Shape)-Klasse AWT, Swing, JavaFX & SWT 1
T Durch klicken eines Buttons Klasse wechseln AWT, Swing, JavaFX & SWT 2
7 JavaFX Verwendung einer ResizableCanvas-Klasse in fxml-Datei AWT, Swing, JavaFX & SWT 3
A JavaFX Von Klasse auf Controller Inhalt zugreifen AWT, Swing, JavaFX & SWT 9
L Swing Teile eines JPanel in eigene Klasse auslagern AWT, Swing, JavaFX & SWT 3
J Eigene Klasse auf Basis Textfield in SceneBuilder anzeigen AWT, Swing, JavaFX & SWT 4
B Swing Auf JList-Elemente aus einer anderen Klasse zugreifen AWT, Swing, JavaFX & SWT 1
J JavaFX Mehrfache Benutzung von Methoden einer Klasse AWT, Swing, JavaFX & SWT 17
B Jlabel Text von anderen Klasse aus ändern AWT, Swing, JavaFX & SWT 9
stylegangsta Eigene Klasse für JButton aus dem JFrame abrufen AWT, Swing, JavaFX & SWT 29
N JavaFX GUI Elemente einer anderen (FXML)Klasse ansprechen AWT, Swing, JavaFX & SWT 16
O JTabeddpane aber jedes JPanel als eigene Klasse anlegen AWT, Swing, JavaFX & SWT 7
B Swing GUI in einer anderen Klasse aufrufen AWT, Swing, JavaFX & SWT 4
B Klasse mit ArrayList AWT, Swing, JavaFX & SWT 1
G Event Handling Event Handling in eigene Klasse AWT, Swing, JavaFX & SWT 4
W Paint-Methode in anderer Klasse funktioniert nicht AWT, Swing, JavaFX & SWT 7
L JavaFX Verständnisfrage zu JavaFX FXML und Controller-Klasse AWT, Swing, JavaFX & SWT 1
T Generische Klasse in JList über DefaultListModel AWT, Swing, JavaFX & SWT 1
D Event Handling Aus einer anderen Klasse heraus einen Text des JLabels ändern. AWT, Swing, JavaFX & SWT 12
F Instanzierung einer inneren Klasse in Klasse eines anderen Packets AWT, Swing, JavaFX & SWT 3
C JavaFX Zugriff auf TextField aus einer anderen Klasse AWT, Swing, JavaFX & SWT 4
A JavaFX Scene Builder eigene Klasse hinzufügen AWT, Swing, JavaFX & SWT 2
S 2 Paint-Methoden in einer Klasse ? AWT, Swing, JavaFX & SWT 2
D JavaFX Controller Klasse splitten? AWT, Swing, JavaFX & SWT 16
S JComboBox aus anderer Klasse füllen (Java-Swing) AWT, Swing, JavaFX & SWT 0
S ActionListener Klasse aufrufen AWT, Swing, JavaFX & SWT 4
M Swing JTextField getText Mehtode übergeben in eine Klasse zu einer Rechnung AWT, Swing, JavaFX & SWT 1
M Panel in geerbter JFrame Klasse adden AWT, Swing, JavaFX & SWT 4
F JavaFX Zugriff auf Controller Methode von einer normalen Klasse aus AWT, Swing, JavaFX & SWT 4
D AWT Das ganze GUI in eine Klasse? AWT, Swing, JavaFX & SWT 1
C JavaFX Klasse wird nicht als public erkannt AWT, Swing, JavaFX & SWT 6
J zwei Paint methoden in einer Klasse AWT, Swing, JavaFX & SWT 3
V kann ich in einer Klasse stage und scene deklarieren, aber in anderen Klassen Inhalte hinzufügen ? AWT, Swing, JavaFX & SWT 5
V JavaFX, Pane construktor von einer Klasse in der Main verwenden. AWT, Swing, JavaFX & SWT 4
S 2 paint-Methoden in einer Klasse ? AWT, Swing, JavaFX & SWT 2
W JavaFX Label in Controller-Klasse in einer anderen Controller-Klasse ändern AWT, Swing, JavaFX & SWT 9
X buttons aus externe klasse lesen? AWT, Swing, JavaFX & SWT 3
D Swing JTable- Meine Tabelle der Klasse JTable wird nur bedingt angezeigt AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben