MezData-Logo

Spinnen wandern in der Box

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 
  }
}

Implementieren Sie die Erweiterungen. Lösungen: [spider-v1-3_bluej.zip] [spider-v1-3_intellij.zip]

Die Viecher sollen auf den blauen Punkt zulaufen, modifizieren Sie den Code.

Erstellen Sie ein Sequenzdiagramm.