Skip to content

4.1 Siedlung am Wald

Die Aufgabe, mehrere Häuser und Bäume zu erstellen, kann auf unterschiedliche Arten gelöst werden. Zwei Möglichkeiten werden unten dargestellt, wobei in den folgenden Quelltexten nur die Häuser erstellt werden.

siedlung

Möglichkeit 1

Diese Variante entspricht der Vorgehensweise, die wir bisher gewählt haben: Es gibt eine Klasse, in der alle Objekte deklariert und erstellt werden.

siedlung_klassenuebersicht_1
    public class Entwurf1
{
    private SGLeinwand meineLeinwand;
    private SGRechteck erdgeschoss1, schornstein1, 
	                   fenster1, tuer1;
    private SGRechteck erdgeschoss2, schornstein2, 
	                   fenster2, tuer2;
    private SGRechteck erdgeschoss3, schornstein3, 
	                   fenster3, tuer3;
    private SGRechteck erdgeschoss4, schornstein4, 
	                   fenster4, tuer4;
    private SGDreieck dach1, dach2, 
	                  dach3, dach4;
    private SGRechteck boden;

    public Entwurf1()
    {
        meineLeinwand = new SGLeinwand(800,500);
        meineLeinwand.setzeHintergrundfarbe(0, 0.8, 1.0);

        boden = new SGRechteck(0,400,800,200);
        boden.setzeFuellung(true);
        boden.setzeFarbe(0.4,1,0.4);
        boden.setzeEbene(0);
        
        erdgeschoss1 = new SGRechteck(20,380,60,60);
        erdgeschoss1.setzeFuellung(true);
        erdgeschoss1.setzeFarbe(1,0,0);
        dach1 = new SGDreieck(15,380,85,380,50,340);
        dach1.setzeFuellung(true);
        dach1.setzeFarbe(0,0,0);
        schornstein1 = new SGRechteck(30,345,10,20);
        schornstein1.setzeFuellung(true);
        schornstein1.setzeFarbe(1,0,0);     
        fenster1 = new SGRechteck(30,390,20,20);
        fenster1.setzeFuellung(true);
        fenster1.setzeFarbe(0.6,0.6,1);
        fenster1.setzeEbene(2);     
        tuer1 = new SGRechteck(53,395,20,45);
        tuer1.setzeFuellung(true);     
        tuer1.setzeFarbe(0.8,0.6,0.5);
        tuer1.setzeEbene(2);   

        erdgeschoss2 = new SGRechteck(90,390,60,60);
        erdgeschoss2.setzeFuellung(true);
        erdgeschoss2.setzeFarbe(1,0,0);
        dach2 = new SGDreieck(85,390,155,390,120,350);
        dach2.setzeFuellung(true);
        dach2.setzeFarbe(0,0,0);
        schornstein2 = new SGRechteck(100,355,10,20);
        schornstein2.setzeFuellung(true);
        schornstein2.setzeFarbe(1,0,0);     
        fenster2 = new SGRechteck(100,400,20,20);
        fenster2.setzeFuellung(true);
        fenster2.setzeFarbe(0.6,0.6,1);
        fenster2.setzeEbene(2);     
        tuer2 = new SGRechteck(123,405,20,45);
        tuer2.setzeFuellung(true);     
        tuer2.setzeFarbe(0.8,0.6,0.5);
        tuer2.setzeEbene(2);   

        erdgeschoss3 = new SGRechteck(150,380,60,60);
        erdgeschoss3.setzeFuellung(true);
        erdgeschoss3.setzeFarbe(1,0,0);
        dach3 = new SGDreieck(145,380,215,380,180,340);
        dach3.setzeFuellung(true);
        dach3.setzeFarbe(0,0,0);
        schornstein3 = new SGRechteck(160,345,10,20);
        schornstein3.setzeFuellung(true);
        schornstein3.setzeFarbe(1,0,0);     
        fenster3 = new SGRechteck(160,390,20,20);
        fenster3.setzeFuellung(true);
        fenster3.setzeFarbe(0.6,0.6,1);
        fenster3.setzeEbene(2);     
        tuer3 = new SGRechteck(183,395,20,45);
        tuer3.setzeFuellung(true);     
        tuer3.setzeFarbe(0.8,0.6,0.5);
        tuer3.setzeEbene(2);   

        erdgeschoss4 = new SGRechteck(230,390,60,60);
        erdgeschoss4.setzeFuellung(true);
        erdgeschoss4.setzeFarbe(1,0,0);
        dach4 = new SGDreieck(225,390,295,390,260,350);
        dach4.setzeFuellung(true);
        dach4.setzeFarbe(0,0,0);
        schornstein4 = new SGRechteck(240,355,10,20);
        schornstein4.setzeFuellung(true);
        schornstein4.setzeFarbe(1,0,0);     
        fenster4 = new SGRechteck(240,400,20,20);
        fenster4.setzeFuellung(true);
        fenster4.setzeFarbe(0.6,0.6,1);
        fenster4.setzeEbene(2);     
        tuer4 = new SGRechteck(263,405,20,45);
        tuer4.setzeFuellung(true);     
        tuer4.setzeFarbe(0.8,0.6,0.5);
        tuer4.setzeEbene(2);   

    }
}
   
            
                    
        

Möglichkeit 2

Bei dieser Variante besteht das Projekt aus zwei Klassen. Neben der Klasse Entwuf2 wird zusätzlich die Klasse Haus programmiert. Diese kann dann in der Klasse Entwurf2 benutzt werden. Dies deutet auch der Pfeil in der Klassenübersicht an.

siedlung_klassenuebersicht
Klasse Entwurf2
    public class Entwurf2
{
  private SGLeinwand meineLeinwand;
  private SGRechteck boden;      
  private Haus meinHaus, deinHaus, 
	           einHaus, nochEinHaus;

  public Entwurf2()
  {     
    meineLeinwand = new SGLeinwand(800,500);
    meineLeinwand.setzeHintergrundfarbe(0, 0.8, 1.0);
    boden = new SGRechteck(0,400,800,200);
    boden.setzeFuellung(true);
    boden.setzeFarbe(0.4,1,0.4);
    boden.setzeEbene(0);
    meinHaus = new Haus(20,340);
    deinHaus = new Haus(90,350);
    einHaus = new Haus(150,340);
    nochEinHaus = new Haus(230,350);
  }
}   
            
                    
        
Klasse Haus
    public class Haus
{
    private SGRechteck haus, schornstein, 
	                   fenster, tuer;
    private SGDreieck dach;

    public Haus(int pX, int pY)
    {
        haus = new SGRechteck(pX,pY+40,60,60);
        haus.setzeFuellung(true);
        haus.setzeFarbe(1,0,0);
        dach = new SGDreieck(pX-5,pY+40,pX+65,
							 pY+40,pX+30,pY);
        dach.setzeFuellung(true);
        dach.setzeFarbe(0,0,0);
        schornstein = 
			new SGRechteck(pX+10,pY+5,10,20);
        schornstein.setzeFuellung(true);
        schornstein.setzeFarbe(1,0,0);
        fenster = new SGRechteck(pX+10,pY+50,20,20);
        fenster.setzeFuellung(true);
        fenster.setzeFarbe(0.6,0.6,1);
        fenster.setzeEbene(2);
        tuer = new SGRechteck(pX+33,pY+55,20,45);
        tuer.setzeFuellung(true);     
        tuer.setzeFarbe(0.8,0.6,0.5);
        tuer.setzeEbene(2);          
    }
}
   
            
                    
        

Aufgaben

  1. Im Quelltext der Klasse Haus sind die Zeilen 7, 9, 12/13, 17, 20 und 24 markiert. Erläutere die Bedeutung der Variablen pX und pY, die in diesen Anweisungen verwendet werden.
  2. Im Quelltext der Klasse Entwurf2 sind die Zeilen 5/6 und 16-19 hervorgehoben.
    1. Kommentiere die Anweisungen in diesen Zeilen.
    2. Erläutere die Bedeutung der Werte, die in den Klammern in den Zeilen 16-19 angegeben werden.
    3. Gib die Koordinaten des erdgeschosses und der tuer für das Objekt meinHaus an.
  3. Vergleiche die beiden Möglichkeiten zum Erstellen mehrerer Häuser. Nenne dazu Vor- und Nachteile der beiden Möglichkeiten.
  4. Implementiere eine zusätzliche Klasse Baum und erstelle in der Klasse Entwurf2 vier Bäume.
  5. Im nebenstehenden Bild wurde die Klasse Baum so modifiziert, dass die Bäume eine zufällig generierte Farbe erhalten. Verändere die Klasse Baum entsprechend.
  6. Ergänze eine Klasse Wolke wie im nebenstehenden Bild.
  7. Verändere den Baum so, dass man beim Aufruf des Konstruktors neben der Position des Baums ebenfalls angeben kann, wie viele Äpfel sich an dem Baum befinden.
siedlung_mit_wolken
siedlung_wolke_aepfel