# Robot zu langsam



## MrTerry (1. Feb 2010)

Hallo 

kurze Frage:

Ich progg nen Bot für so ein Spiel, bei dem man mit der Maus nen Weg langlaufen muss.

mein Algorithmus funktioniert!

Das Problem ist, dass bei höherem Level das Spiel zu schnell scrollt und der Robot ein Tick
zu langsam ist.

Ich würde gerne irgendwo etwas Zeit einsparen wollen und hab aber leider keinen Plan mehr, was ich noch versuchen soll!

Kann mir da einer helfen? (evt. beim Screenshot oder pixelauswertung eine Idee, wie es schneller geht?)

x,y sind Koordinaten, wobei x so gut wie nie verändert werden soll;

frei, weg,ziel und weg2 etc sind integer und bekommen einen Farbwert in int-form 

also wie gesagt, ich will nur Zeit einsparen, denn der Algorithmus funktioniert (und ich bin mir bewusst, dass die Namen nicht optimal sind)


vielen Dank schonmal im vorraus!
Terry


```
public static void Lvl() {
		robot.mousePress(InputEvent.BUTTON1_MASK);
		robot.mouseRelease(InputEvent.BUTTON1_MASK);
		robot.mouseMove(100,560);
		
		int x =100;
		int y =560;
		boolean laufen = true;
		Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
		Rectangle screenRect = new Rectangle(dim);
                BufferedImage bimage = robot.createScreenCapture(screenRect);

		while (laufen) {
			dim = Toolkit.getDefaultToolkit().getScreenSize();
			screenRect = new Rectangle(dim);
			bimage = robot.createScreenCapture(screenRect);
			int weg2 = bimage.getRGB(x+29,y);
			int freiH = bimage.getRGB(x,y-30);
			int freiU = bimage.getRGB(x,y+30);
			
			if (weg2 != weg) {
			  System.out.println(weg2+ " "+frei);
			  if (freiU==frei) {
			
			  while (freiH != frei) {
			    y-=30;
			 
			    freiH = bimage.getRGB(x,y-30);
			
			  }
              }
			else
			if (freiH==frei) {
			    while (freiU!= frei) {
			      y+=30;
			      freiU = bimage.getRGB(x,y+30);
			      
			    }
			}
			robot.mouseMove(x,y);
			if (weg2==ziel) {
			  laufen=false;
			}
		
			}
		}
		robot.mouseMove(x+80,y);
	        robot.mousePress(InputEvent.BUTTON1_MASK);
	        robot.mouseRelease(InputEvent.BUTTON1_MASK);
			
		Lvl();
	  }
```


----------



## Steev (1. Feb 2010)

Guten Abend,

ich weis zwar nicht was der Sinn deines Spieles ist, aber wenn es "nur" darum geht mit der Maus eine bestimmte Strecke abzufahren, dann sind Konstrukte wie robot.mouseMove sowie eine Pixelweise Auswertung eigendlich fehl am platz.

Ich würde einfach errechnen, an welcher Position sich der Mauszeiger befindet, und was die alte Position war. Zwischen den beiden Positionen würde ich eine Linie ziehen und prüfen, ob dazwischen eine Position ungültig war. (Ich nehme an das geht mit farbigen Flächen auf deinem Bild die geprüft werden?)

Edit:
Das schlimmste ist eigendlich, dass du pro Schleifendurchlauf einen Screenshot erzeugst. Da muss die Performance ja in die Knie gehen...


----------



## MrTerry (1. Feb 2010)

mir ist schon klar, dass der screenshot das zeitaufwändigste ist

ich habe keinen Einfluss / bzw weiß ich nicht vorher wie der weg ist

und sobald ich den weg verlasse -> nochmal neu anfangen 

ausserdem habe ich nur einen screenshot.... es ist quasi ein web spiel (auf javascript basis) und ich versuche da durchzukommen

daher ist die Linie ziehen im prinzip unmöglich ! (wenn ich dich richtig verstanden habe)

trotzdem danke 

lg Terry


----------



## madboy (1. Feb 2010)

Ich würde mal versuchen nicht immer einen Screenshot vom ganzen Bilschirm zu machen. Wenn ich dich richtig verstehe, müsste ein Bereich von 30x30 Pixeln ausreichen.
Ansonsten ist es überflüssig, in Zeile 14 jedes Mal die Bildschirmgröße abzufragen. Ein Mal sollte reichen


----------



## MrTerry (1. Feb 2010)

vielen Dank 

ich war schon echt betriebsblind !

jetzt hat es glücklicherweise funktioniert 

-- threat closed -- (auch wenn ich das nicht machen kann xD )


----------

