import java.awt.Shape; import java.awt.geom.GeneralPath; import java.awt.geom.Rectangle2D; import java.awt.geom.AffineTransform; public class Schrank { private int xPosition; private int yPosition; private int orientierung; private String farbe; private boolean istSichtbar; private int breite; private int tiefe; public Schrank() { xPosition = 160; yPosition = 80; farbe = "blau"; orientierung = 0; istSichtbar = false; breite = 110; tiefe = 60; } private Shape gibAktuelleFigur() { // einen GeneralPath definieren GeneralPath schrank = new GeneralPath(); schrank.moveTo(0 , 0); schrank.lineTo(breite, 0); schrank.lineTo(breite, tiefe); schrank.lineTo(breite, tiefe); schrank.lineTo(0 , 0); // Das ist die Umrandung. Das schrank bekommt noch eine Lehne: schrank.moveTo(0 , (breite/10+1)); schrank.lineTo(breite, tiefe); // transformieren: AffineTransform t = new AffineTransform(); t.translate(xPosition, yPosition); Rectangle2D umriss = schrank.getBounds2D(); t.rotate(Math.toRadians(orientierung),umriss.getX()+umriss.getWidth()/2,umriss.getY()+umriss.getHeight()/2); return t.createTransformedShape(schrank); } /** * 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); } } }