All pastes #1282574 Raw Edit

Kreis_lampe_Ampel_11_12_08

public text v1 · immutable
#1282574 ·published 2008-12-11 11:39 UTC
rendered paste body
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;
                    }
                }
            }