import java.awt.geom.Ellipse2D; /** * Ein Kreis, der manipuliert werden kann und sich selbst auf einer * Leinwand zeichnet. * * @author Michael Kölling und David J. Barnes * @version 1.0 (7. Februar 2003) */ public class Kreis { private int durchmesser; private int xPosition; private int yPosition; private String farbe; private boolean istSichtbar; /** * Erzeuge einen neuen Kreis an einer Standardposition mit * einer Standardfarbe. */ public Kreis() { durchmesser = 30; xPosition = 20; yPosition = 60; farbe = "rot"; istSichtbar = true; } /** * Kreis durch Eingabe des x und y Wertes positionieren */ public void positionieren(int xWert,int yWert) { loeschen(); xPosition = xWert; yPosition = yWert; zeichnen(); } /** * Mache diesen Kreis sichtbar. Wenn es bereits sichtbar ist, tue * nichts. */ public void sichtbarMachen() { istSichtbar = true; zeichnen(); } /** * Mache diesen Kreis unsichtbar. Wenn es bereits unsichtbar ist, tue * nichts. */ public void unsichtbarMachen() { loeschen(); istSichtbar = true; } /** * Bewege diesen Kreis einige Bildschirmpunkte nach rechts. */ public void nachRechtsBewegen() { horizontalBewegen(20); } /** * Bewege diesen Kreis einige Bildschirmpunkte nach links. */ public void nachLinksBewegen() { horizontalBewegen(-20); } /** * Bewege diesen Kreis einige Bildschirmpunkte nach oben. */ public void nachObenBewegen() { vertikalBewegen(-20); } /** * Bewege diesen Kreis einige Bildschirmpunkte nach unten. */ public void nachUntenBewegen() { vertikalBewegen(20); } /** * Bewege diesen Kreis horizontal um 'entfernung' Bildschirmpunkte. */ public void horizontalBewegen(int entfernung) { loeschen(); xPosition += entfernung; zeichnen(); } /** * Bewege diesen Kreis vertikal um 'entfernung' Bildschirmpunkte. */ public void vertikalBewegen(int entfernung) { loeschen(); yPosition += entfernung; zeichnen(); } /** * Bewege diesen Kreis langsam horizontal um 'entfernung' * Bildschirmpunkte. */ public void langsamHorizontalBewegen(int entfernung) { int delta; if (entfernung < 0) { delta = -1; entfernung = -entfernung; } else { delta = 1; } for (int i = 0; i < entfernung; i++) { xPosition += delta; zeichnen(); } } /** * Bewege diesen Kreis langsam vertikal um 'entfernung' * Bildschirmpunkte. */ public void langsamVertikalBewegen(int entfernung) { int delta; if (entfernung < 0) { delta = -1; entfernung = -entfernung; } else { delta = 1; } for (int i = 0; i < entfernung; i++) { yPosition += delta; zeichnen(); } } /** * Ändere den Durchmesser dieses Kreises in 'neuerDurchmesser' * (Angabe in Bildschirmpunkten). * 'neuerDurchmesser' muss größer gleich Null sein. */ public void groesseAendern(int neuerDurchmesser) { loeschen(); durchmesser = neuerDurchmesser; zeichnen(); } /** * Ändere die Farbe dieses Kreises in 'neueFarbe'. * Gültige Angaben sind "rot", "gelb", "blau", "gruen", * "lila" und "schwarz". */ public void farbeLampeAendern(String neueFarbe) { farbe = neueFarbe; zeichnen(); } /* * Zeichne diesen Kreis mit seinen aktuellen Werten auf den Bildschirm. */ private void zeichnen() { if (istSichtbar) { Leinwand leinwand = Leinwand.gibLeinwand(); leinwand.zeichne( this, farbe, new Ellipse2D.Double(xPosition, yPosition, durchmesser, durchmesser)); leinwand.warte(10); } } /* * Lösche diesen Kreis vom Bildschirm. */ private void loeschen() { if (istSichtbar) { Leinwand leinwand = Leinwand.gibLeinwand(); leinwand.entferne(this); } } } /** * Write a description of class Lampe here. * * @author (feni) * @version (11/12/08) */ public class Lampe { private Quadrat halterung; private Kreis licht; private boolean lampeAn; /** * Constructor for objects of class Lampe */ public Lampe(String farbeLampe) { halterung = new Quadrat(); halterung.groesseAendern(60); halterung.positionieren(60,90); halterung.farbeAendern("schwarz"); halterung.sichtbarMachen(); licht = new Kreis(); licht.groesseAendern(50); licht.positionieren(65,95); licht.farbeLampeAendern(farbeLampe); licht.sichtbarMachen(); lampeAn = true; //Zustand der Lampe } /** * Lampe durch Eingabe der x und y Werte positionieren */ public void lampePositionieren(int xPosi,int yPosi) { halterung.positionieren(xPosi,yPosi); licht.positionieren(xPosi+5,yPosi+5); } /** * Lampe einschalten, falls eingeschaltet tue nichts */ public void einschalten() { licht.sichtbarMachen(); lampeAn = true; } /** * Lampe ausschalten, falls ausgeschaltet tue nichts */ public void ausschalten() { licht.unsichtbarMachen(); lampeAn = false; } public String gibLampeAn() //Ausgabe des Lampenstatus { return lampeAn; //!!?! } } /** * Write a description of class Ampel here. * * @author (feni) * @version (12/12/08) */ public class Ampel { private Lampe licht1; private Lampe licht2; private Lampe licht3; /** * Constructor for objects of class Ampel */ public Ampel() { licht1 = new Lampe("rot"); licht1.lampePositionieren(90,60); licht2 = new Lampe("gelb"); licht2.lampePositionieren(90,120); licht3 = new Lampe("gruen"); licht3.lampePositionieren(90,180); } /** * Ampel rot leuchten lassen, falls sie schon rot leuchtet, tue nichts */ public int Fall; // "Fall" zur Fallentscheidung beim Umschalten public void rot() { licht1.einschalten(); licht2.ausschalten(); licht3.ausschalten(); Fall = 100; } /** * Ampel rotgelb leuchten lassen, falls sie schon rotgelb leuchtet, tue nichts */ public void rotgelb() { licht1.einschalten(); licht2.einschalten(); licht3.ausschalten(); Fall = 101; } /** * Ampel gelb leuchten lassen, falls sie schon gelb leuchtet, tue nichts */ public void gelb() { licht1.ausschalten(); licht2.einschalten(); licht3.ausschalten(); Fall = 102; } /** * Ampel gruen leuchten lassen, falls sie schon gruen leuchtet, tue nichts */ public void gruen() { licht1.ausschalten(); licht2.ausschalten(); licht3.einschalten(); Fall = 103; } /** * Die gesammte Ampel durch Eingabe von x und y Wert positionieren */ public void ampelPositionieren(int xWert,int yWert) { licht1.lampePositionieren(xWert,yWert); licht2.lampePositionieren(xWert,yWert+60); licht3.lampePositionieren(xWert,yWert+120); } /** * in den nächsten zustand umschalten * rot-->rotgelb-->gruen-->gelb-->rot... */ public void umschalten() { switch (Fall){ case 100 : licht1.einschalten(); licht2.einschalten(); licht3.ausschalten(); Fall = 101; break; case 101 : licht1.ausschalten(); licht2.ausschalten(); licht3.einschalten(); Fall = 103; break; case 103 : licht1.ausschalten(); licht2.einschalten(); licht3.ausschalten(); Fall = 102; break; case 102 : licht1.einschalten(); licht2.ausschalten(); licht3.ausschalten(); Fall = 100; } } }