MezData-Logo Creative Commons License 190 Lösungen Button :JAVA: Spinnen wandern in der Box

Die Spinnen sollen nun in der Box umher laufen: spider-v1.3.jar

Eine Richtung geben

Die Spinnen brauchen eine Richtung statt einem Ziel:

private double laufRichtung; // Laufrichtung im Bogenmass 360 Grad = 2*Pi

Und sollten sich in der Laufrichtung fortbewegen:

public void leben(){
  ortX += (int)(Math.sin(laufRichtung)*groesse/4);
  ortY -= (int)(Math.cos(laufRichtung)*groesse/4);
} 

Nicht über den Rand gehen

Woher bekommen wir den Rand? Der Rand wird uns mit der Zeichenfläche geliefert: Graphics g, und die Zeichenfläche gibts beim Zeichnen:

public void malen(Graphics g){  // die Spinne malen
  checkBorder(g.getClipBounds()); // dabei erst mal checken, ob es im Rahmen bleibt  
  g.setColor(farbe);
  g.fillOval(ortX-groesse/2, ortY-groesse/2, groesse, groesse);
  g.setColor(Color.black);
  g.drawString("Viech",ortX-5,ortY-groesse/2+10);
}

Nun kann in einer kleinen Methode checkBorder(g.getClipBounds()) die Randberührung geprüft werden und Gegenmaßnahmen eingeleitet werden:

void checkBorder(Rectangle r){  // Überprüfen ob ein Rand verletzt wird
	  boolean b = false;           // Wir gehen nicht davon aus
	  if (ortX < groesse){
	      ortX = groesse;          // Abstand halten
	      b = true;                // Die Richtung ist nicht mehr gut.
	  }
	  else if (ortX > r.width-groesse){
	      ortX = r.width-groesse;
	      b = true;
	  }
	  if (ortY < groesse){
	      ortY = groesse;
	      b = true;
	  }
	  else if (ortY > r.height-groesse){
	      ortY = r.height-groesse;
	      b = true;
	  }
	  if (b){
	    laufRichtung += 2*Math.PI*(Math.random()-0.4);  // Wir kehren um
     if (laufRichtung > 2*Math.PI) laufRichtung -= 2*Math.PI;  // nicht überdrehen 
	  }
	}

RechneraufgabeImplementieren Sie die Erweiterungen.

PapieraufgabeErstellen Sie ein Sequenzdiagramm.

Lösung-Projekt: spider-v1.3.zip

© Oliver Mezger 11.02.2006 MezData.de Den Kontakt herstellen...