/ Published in: Java
Expand |
Embed | Plain Text
public class Haus extends ShapeBase { private boolean lichtAn = false; /** * Konstruktor * * @param x X-Koordinate des Hauses * @param y Y-Koordinate des Hauses * @param breite Breite des Hauses * @param hoehe Höhe des Hauses * @param mauerfarbe Mauerfarbe */ { super(x, y, breite, hoehe); this.mauerfarbe = mauerfarbe; } /** * Simuliert einen Mausklick mit den Koordinaten x, y * und schaltet damit das Licht des Hauses ein oder aus * * @param x X-Koordinate des Klicks * @param y Y-Koordinate des Klicks */ public void lichtAendern(int x, int y) { if (x >= this.getX() && y >= this.getY() && x <= this.getX() + this.getBreite() - 1 && y <= this.getY() + this.getHoehe() - 1) { this.lichtAn = !this.lichtAn; } } /** * Zeichnet das Haus auf der Grafikausgabe mit den erhaltenen * Werten von paintRoof, paintWalls und paintWindows. * * @param g Grafik-Objekt */ { this.paintWindows(g, walls, door); } /** * Zeichnet das Dach ausgehend von der Breite des Hauses * * @param g Grafik-Objekt * @return Übergibt das Polygon-Objekt des Daches an die paint-Methode */ { // Dach: 50% der Breite int roofHeight = (int)(this.getBreite() * 0.5); // First dach.addPoint(this.getAbsoluteX(this.getBreite() / 2), this.getAbsoluteY(0)); // Ecken dach.addPoint(this.getAbsoluteX(0), this.getAbsoluteY(roofHeight)); dach.addPoint(this.getAbsoluteX(this.getBreite()), this.getAbsoluteY(roofHeight)); g.fillPolygon(dach); return dach; } /** * Zeichnet die Wände ausgehend von den Parametern des Hauses und des Dachs * * @param g Grafik-Objekt * @param dach Polygon-Objekt des Daches zur Bestimmung der Position * @return Übergibt das Polygon-Objekt der Wände an die paint-Methode */ { // Breite - 20% int wallWidth = (int)(this.getBreite() - this.getBreite() * 0.2); int wallIndent = (int)((this.getBreite() - wallWidth) / 2); // Ecken wall.addPoint(this.getAbsoluteX(wallIndent), roofBox.y + roofBox.height); wall.addPoint(this.getAbsoluteX(this.getBreite() - wallIndent), roofBox.y + roofBox.height); wall.addPoint(this.getAbsoluteX(this.getBreite() - wallIndent), this.getAbsoluteY(this.getHoehe())); wall.addPoint(this.getAbsoluteX(wallIndent), this.getAbsoluteY(this.getHoehe())); g.setColor(this.mauerfarbe); g.fillPolygon(wall); return wall; } /** * Zeichnet die Tür relativ zur Position des Hauses innherhalb der wallBox * * @param g Grafik-Objekt * @param wall Polygon-Objekt der Wände zur Bestimmung der Position * @return Übergibt das Polygon-Objekt der Tür an die paint-Methode */ { // Breite = 30 int doorWidth = 30; int doorHeight = (int)(doorWidth * 2); // Ecken door.addPoint((int)wallBox.getX() + (int)(0.5 * doorWidth), (int)(wallBox.getY() + wallBox.getHeight()) - doorHeight); door.addPoint((int)wallBox.getX() + (int)(1.5 * doorWidth), (int)(wallBox.getY() + wallBox.getHeight()) - doorHeight); door.addPoint((int)wallBox.getX() + (int)(1.5 * doorWidth), (int)(wallBox.getY() + wallBox.getHeight())); door.addPoint((int)wallBox.getX() + (int)(0.5 * doorWidth), (int)(wallBox.getY() + wallBox.getHeight())); g.fillPolygon(door); return door; } /** * Zeichnet die Fenster abhängig von der Breite und der Höhe des Hauses. * * paintWindows durchläuft mehrfach zwei Schleifen, um die benötigte Anzahl * der Fenster und Stockwerke anhand der Höhe und Breite des Hauses zu zeichen. * * Ändert bei Anforderung von lichtAendern die Fensterfarbe. * * @param g Grafik-Objekt * @param wall Polygon-Objekt der Wände * @param door Polygon-Objekt der Tür */ { int windowWidth = (int)(20); int windowHeight = (int)(25); /* Beide Schleifen zeichen zuerst die Fenster oberhalb der Tür * Die Breite und Höhe der wallBox bestimmt die Anzahl der Fenster, * bzw die Anzahl Iterationen. */ for (int i = 0; i <= (wallBox.getHeight() - 95); i += (windowHeight + 10)){ for (int j = 5; j < (wallBox.getWidth()- 10); j += (windowWidth + 10)){ g.fillRect((int)wallBox.getX() + j, (int)(doorBox.getY() - (windowHeight + 10) - i), windowWidth , windowHeight); } } /* Anschliessend werden die Fenster rechts der Tür gezeichnet * j arbeitet hier bei als Abstandhalter mit der der 1.5fachen * Breite der Tür, zuzüglich 20 um sich an den anderen Fenstern * zu orientieren. * Die Breite der wallBox bestimmt die Anzahl der Fenster, bzw * Iterationen. */ for (int j = (int)(doorBox.getWidth() * 1.5 + 20); j < (wallBox.getWidth()- 20); j += (windowWidth + 10)){ g.fillRect((int)wallBox.getX() + j, (int)doorBox.getY(), windowWidth , windowHeight); } } }
You need to login to post a comment.
