128 lines
3.4 KiB
Java
128 lines
3.4 KiB
Java
import java.awt.Shape;
|
|
import java.awt.geom.GeneralPath;
|
|
import java.awt.geom.Rectangle2D;
|
|
import java.awt.geom.AffineTransform;
|
|
public class Stuhl
|
|
{
|
|
private int xPosition;
|
|
private int yPosition;
|
|
private int orientierung;
|
|
private String farbe;
|
|
private boolean istSichtbar;
|
|
private int breite;
|
|
private int tiefe;
|
|
|
|
|
|
public Stuhl() {
|
|
xPosition = 160;
|
|
yPosition = 80;
|
|
farbe = "blau";
|
|
orientierung = 0;
|
|
istSichtbar = false;
|
|
breite = 40;
|
|
tiefe = 40;
|
|
}
|
|
|
|
|
|
private Shape gibAktuelleFigur() {
|
|
// einen GeneralPath definieren
|
|
GeneralPath stuhl = new GeneralPath();
|
|
stuhl.moveTo(0 , 0);
|
|
stuhl.lineTo(breite, 0);
|
|
stuhl.lineTo(breite+(breite/20+1), tiefe);
|
|
stuhl.lineTo(-(breite/20+1), tiefe);
|
|
stuhl.lineTo(0 , 0);
|
|
// Das ist die Umrandung. Das Stuhl bekommt noch eine Lehne:
|
|
stuhl.moveTo(0 , (breite/10+1));
|
|
stuhl.lineTo(breite, (breite/10+1));
|
|
// transformieren:
|
|
AffineTransform t = new AffineTransform();
|
|
t.translate(xPosition, yPosition);
|
|
Rectangle2D umriss = stuhl.getBounds2D();
|
|
t.rotate(Math.toRadians(orientierung),umriss.getX()+umriss.getWidth()/2,umriss.getY()+umriss.getHeight()/2);
|
|
return t.createTransformedShape(stuhl);
|
|
}
|
|
|
|
/**
|
|
* Mache dieses Objekt sichtbar. Wenn es bereits sichtbar ist, tue nichts.
|
|
*/
|
|
public void zeige() {
|
|
if (!istSichtbar) {
|
|
istSichtbar = true;
|
|
zeichne();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Mache dieses Objekt unsichtbar. Wenn es bereits unsichtbar ist, tue nichts.
|
|
*/
|
|
public void verberge() {
|
|
loesche(); // "tue nichts" wird in loesche() abgefangen.
|
|
istSichtbar = false;
|
|
}
|
|
|
|
/**
|
|
* Drehe auf den angegebenen Winkel
|
|
*/
|
|
public void dreheAuf(int neuerWinkel) {
|
|
loesche();
|
|
orientierung = neuerWinkel;
|
|
zeichne();
|
|
}
|
|
|
|
/**
|
|
* Bewege dieses Objekt horizontal um 'entfernung' Bildschirmpunkte.
|
|
*/
|
|
public void bewegeHorizontal(int entfernung) {
|
|
loesche();
|
|
xPosition += entfernung;
|
|
zeichne();
|
|
}
|
|
|
|
/**
|
|
* Bewege dieses objekt vertikal um 'entfernung' Bildschirmpunkte.
|
|
*/
|
|
public void bewegeVertikal(int entfernung) {
|
|
loesche();
|
|
yPosition += entfernung;
|
|
zeichne();
|
|
}
|
|
|
|
|
|
/**
|
|
* Aendere die Farbe dieses Objektes in 'neueFarbe'.
|
|
* Gueltige Angaben sind "rot", "gelb", "blau", "gruen",
|
|
* "lila" und "schwarz".
|
|
*/
|
|
public void aendereFarbe(String neueFarbe) {
|
|
loesche();
|
|
farbe = neueFarbe;
|
|
zeichne();
|
|
}
|
|
|
|
/**
|
|
* Zeichne dieses Objekt mit seinen aktuellen Werten auf den Bildschirm.
|
|
*/
|
|
private void zeichne() {
|
|
if (istSichtbar) {
|
|
Shape figur = gibAktuelleFigur();
|
|
Leinwand leinwand = Leinwand.gibLeinwand();
|
|
leinwand.zeichne (
|
|
this, // leinwand kennt das Objekt
|
|
farbe, // definiert seine Zeichenfarbe
|
|
figur); // definiert seinen grafischen Aspekt
|
|
leinwand.warte(10);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Loesche dieses Objekt vom Bildschirm.
|
|
*/
|
|
private void loesche() {
|
|
if (istSichtbar){
|
|
Leinwand leinwand = Leinwand.gibLeinwand();
|
|
leinwand.entferne(this);
|
|
}
|
|
}
|
|
}
|