==Übungsaufgabe für Test am 22.02.==: Unterschied zwischen den Versionen

Aus ComeniusWiki
Wechseln zu: Navigation, Suche
(Übung 'Graphische Aufgabe')
(Übung 'Graphische Aufgabe')
Zeile 52: Zeile 52:
 
<popup name="Lösungsvorschlag">
 
<popup name="Lösungsvorschlag">
 
<syntaxhighlight lang="java">
 
<syntaxhighlight lang="java">
 
+
//Erzeugung des Arrays der Größe 100
 +
regen=new Drop[100];
 +
//Erzeugung der einzelnen Tropfen; die Werte von x und y stellen sicher, dass die Tropfen zufällig und nicht außerhalb der Scheibe erzeugt werden (Rand des Fensters beträgt 40px)
 +
  for(int i=0;i<regen.length;i++){
 +
    regen[i]=new Drop(40+random(width-80), 40+random(height-80));}
 
</syntaxhighlight>
 
</syntaxhighlight>
 
</popup>
 
</popup>
Zeile 63: Zeile 67:
 
<popup name="Lösungsvorschlag">
 
<popup name="Lösungsvorschlag">
 
<syntaxhighlight lang="java">
 
<syntaxhighlight lang="java">
 
+
for(int i=0;i<regen.length;i++){
 +
  regen[i].displayD();};
 +
 
</syntaxhighlight>
 
</syntaxhighlight>
 
</popup>
 
</popup>
Zeile 73: Zeile 79:
 
<popup name="Lösungsvorschlag">
 
<popup name="Lösungsvorschlag">
 
<syntaxhighlight lang="java">
 
<syntaxhighlight lang="java">
 +
Fenster f;
 +
Wiper w;
 +
Drop []regen;
 +
 +
void setup(){
 +
  size(800, 800);
 +
  background(255);
 +
  f=new Fenster();
 +
  w=new Wiper();
 +
  regen=new Drop[100];
 +
  for(int i=0;i<regen.length;i++){
 +
    regen[i]=new Drop(40+random(width-80), 40+random(height-80));}
 +
}
 +
 +
void draw(){
 +
f.displayF();
 +
for(int i=0;i<regen.length;i++){
 +
  regen[i].displayD();};
 +
 +
w.displayW();
 +
w.move(1);
 +
 +
for(int i=0;i<regen.length;i++){
 +
  if((regen[i].x-w.x)<(width-80)/2 && (regen[i].y-w.y)<50){regen[i].r=0;};
 +
}
 +
}
 +
 +
 +
class Drop{
 +
  float x;
 +
  float y;
 +
  float r;
 +
 
 +
  //Konstruktor
 +
  Drop(float x, float y){
 +
    this.x = x;
 +
    this.y = y;
 +
    //Legt die Größe der Tropfen auf eine Größe zwischen 2 und 6px fest
 +
    r=random(5,7);
 +
  }
 +
 
 +
  void displayD(){
 +
    //entfernt schwarzen Rand
 +
    noStroke();
 +
   
 +
    fill(0,0,255);
 +
    ellipse(x,y,r,r);
 +
  }
 +
}
 +
 +
 +
class Fenster{
 +
int x;
 +
int y;
 +
int l;
 +
int h;
 +
 +
Fenster(){
 +
  x=40;
 +
  y=40;
 +
  l=width-80;
 +
  h=height-80;
 +
}
 +
 +
void displayF(){
 +
  fill(230);
 +
  rect(x,y,l,h);
 +
}
 +
}
 +
  
 +
class Wiper{
 +
 
 +
  float x;
 +
  float y;
 +
  int b;
 +
  int h;
 +
 
 +
  Wiper(){
 +
    x=40;
 +
    y=40;
 +
    h=50;
 +
    b=(width-80)/2;
 +
  }
 +
 
 +
  void displayW(){
 +
    fill(0);
 +
    rect(x,y,b,h);
 +
  }
 +
 
 +
  void move(float v){
 +
    y=y+v;
 +
    if(y>height-90){y=40;x=40+(width-80)/2;};
 +
    if(y>height-91 && x>40+(width-81)/2){x=40; y=40;};
 +
  }
 +
}
 +
 
 
</syntaxhighlight>
 
</syntaxhighlight>
 
</popup>
 
</popup>

Version vom 16. Februar 2018, 09:30 Uhr

Stoff

Es werden zum einen Grundkenntnisse zum Thema Arrays erwartet (Deklaration, Intitialisierung, Anwendung von Schleifen), die in einer einfachen Aufgabe umgesetzt werden (z.B. 'Ausgabe aller geraden Zahlen bis 50' oder 'Summe aller Zahlen bis 100' (siehe Beispiele)), zum anderen soll in einer Aufgabe die Modellierung einer graphischen Aufgabe (Stichwort: Klassendiagramm) und die Implementierung einzelner Aspekte gezeigt werden.

Übung 'Graphische Aufgabe'

Ein Programm soll das Wischen einer Fensterscheibe simulieren. Dazu sind vier Klassen notwendig: Die Klasse 'Fenster' setzt das zu wischende Fenster auf der Zeichenfläche um. Der Konstruktor arbeitet nur mit festen Werten für die Position und Größe des Fensters. Als Methode ist nur eine Methode displayF() zur Darstellung erforderlich. Die zweite Klasse 'Drop' soll Tropfen erzeugen können, die an beliebiger Stelle auf der Fensterscheibe erscheinen können, eine beliebige Größe zwischen 2 und 6px haben und blau gefärbt sind. Als Methode reicht wiederum eine Methode displayD(). Die dritte Klasse ist der 'Wiper'. Der Wiper hat eine feste Position und eine feste Größe. Neben der displayF()-Methode enthält die Klasse noch eine Methode move(), die unterschiedliche Wischgeschwindigkeiten erlaubt.
Zusammengeführt wird alles in der Klasse 'Fensterwäsche' (entspricht in der Implementierung dem Sketch). Dort wird das Fenster, ein Wischer und ein Array von 100 Tropfen benötigt. Als Methoden verwenden wir nur die zwei üblichen. Das Ergebnis ist im Video zu sehen.

Aufgabe 1

Erstelle das zugehörige Klassendiagramm.

Aufgabe 2

Implementiere die Klasse 'Drop'.


Aufgabe 3

Implementiere die Erzeugung des Arrays für 100 Tropfen und erzeuge anschließend die 100 Tropfen mittels einer Schleife.


Aufgabe 4

Implementiere die Darstellung der Tropfen auf der Fensterscheibe mittels einer Schleife.


Für die Ambitionierten hier die Gesamtlösung der Aufgabe.