8.581
Bearbeitungen
Jneug (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Jneug (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
(6 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 29: | Zeile 29: | ||
{{Aufgabe:Start|Icon=Processing_icon.png}} | {{Aufgabe:Start|Icon=Processing_icon.png}} | ||
Erstelle zwei Ballons und einige Spitzen und teste dein Programm. | Erstelle zwei Ballons und einige Spitzen und teste dein Programm. (Rufe die <code>draw()</code> und <code>update()</code> Methoden der Objekte innerhalb der <code>draw()</code> Methode des Hauptprogramms auf.) | ||
{{Aufgabe:End}} | {{Aufgabe:End}} | ||
Zeile 72: | Zeile 72: | ||
Spitze[] spitzen = new Spitze[60]; | Spitze[] spitzen = new Spitze[60]; | ||
spitzen[0] = new Spitze(); | spitzen[0] = new Spitze(0); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Nun kannst du mit den Indizes <code>0</code> bis <code>59</code> den einzelnen Elementen des Arrays neue <code>Spitzen</code> zuweisen. | Nun kannst du mit den Indizes <code>0</code> bis <code>59</code> den einzelnen Elementen des Arrays neue <code>Spitzen</code> zuweisen. | ||
=== Arrays durchlaufen === | |||
Arrays ersparen uns schonmal eine Menge Schreibarbeit, weil wir nichtmehr 60 Variablen anlegen müssen. Aber wir müssen immer noch 60 <code>Spitze</code>-Objekte mit <code>new Spitze()</code> erstellen. Aber auch dafür gibt es eine Lösung: Wie können auf bekannte Kontrollstrukturen zurückgreifen und eine ''Zählschleife'' benutzen: | |||
<syntaxhighlight lang="Java"> | |||
// Deklaration eines Spitzen-Arrays mit 60 Elementen | |||
Spitze[] spitzen = new Spitze[60]; | |||
for( int i = 0; i < spitzen.length; i++ ) { | |||
spitzen[i] = new Spitze(i*10); | |||
} | |||
</syntaxhighlight> | |||
Und schon haben wir 60 Spitzen am oberen Bildrand erstellt. | |||
{{Aufgabe:Start}} | |||
Studiere die Beispiele oben und vor allem die Zählschleife zum Durchlaufen eines Arrays. Diesen Aufbau wirst du beim programmieren häufiger verwenden. | |||
Baue die Spitzen in dein Projekt ein und ergänze eine weitere Zählschleife in der <code>draw()</code> Methode des Hauptprogramms, die wiederum die <code>draw()</code> Methode jeder Spitze im Array aufruft. | |||
{{Aufgabe:End}} | |||
{{Aufgabe:Start}} | |||
Ergänze ein Ballon-Array, das zehn <code>Ballon</code>-Objekte speichert. Erstelle die Ballon-Objekte und zeichne die Ballons in der <code>draw()</code> Methode. Ergänze auch einen Aufruf der <code>update()</code> Methode, damit die Ballons nach oben fliegen. | |||
{{Aufgabe:End}} | |||
== Ballons gegen Spitzen == | |||
Sobald die Ballons am oberen Bildschirmrand ankommen (und die Spitzen berühren), müssen sie natürlich platzen. Sobald ein Ballon geplatzt ist, kann ein neuer Ballon am unteren Bildrand erscheinen. | |||
{{Aufgabe:Start}} | |||
Prüfe nach jedem <code>update()</code>, ob der Ballon am oberen Rand angekommen ist. Falls ja, erstelle einen neuen <code>Ballon</code> im entsprechenden Array-Index. | |||
(Du kannst auch das Platzen mit einem entsprechenden Effekt versehen, wenn du möchtest.) | |||
{{Aufgabe:End}} | |||
== Eine Zwischenlösung == | |||
Der aktuelle Stand des Projekt könnte so aussehen. Dank aber daran, dass es viele verschiedene funktionierende | |||
Lösungen gibt. Du kannst die Vorlagen als Orientierung nutzen. | |||
{{Lösung:Start|Klasse Ballon}} | |||
<syntaxhighlight lang="Java" line="1"> | |||
class Ballon { | |||
private float x, y, speed, size; | |||
private color clr; | |||
public Ballon() { | |||
x = random(10, width-10); | |||
y = height-10; | |||
speed = random(20, 40)/10; | |||
size = random(20, 30); | |||
clr = color((int) random(50, 210), (int) random(50, 210), (int) random(50, 210)); | |||
} | |||
public void draw() { | |||
noStroke(); | |||
fill(clr); | |||
ellipse(x, y, size*.7, size); | |||
} | |||
public void update() { | |||
y -= speed; | |||
} | |||
public float getY() { | |||
return y; | |||
} | |||
} | |||
</syntaxhighlight> | |||
{{Lösung:End}} | |||
{{Lösung:Start|Klasse Spitze}} | |||
<syntaxhighlight lang="Java" line="1"> | |||
class Spitze { | |||
private float x, size; | |||
public Spitze(int pX) { | |||
x = pX; | |||
size = random(10, 50); | |||
} | |||
public void draw() { | |||
noStroke(); | |||
fill(33,33,33); | |||
triangle(x, 0, x+10, 0, x+5, size); | |||
} | |||
} | |||
</syntaxhighlight> | |||
{{Lösung:End}} | |||
{{Lösung:Start|Hauptprogramm}} | |||
<syntaxhighlight lang="Java" line="1"> | |||
class Ballon { | |||
private float x, y, speed, size; | |||
public Ballon() { | |||
x = random(10, width-10); | |||
y = height-10; | |||
speed = random(20, 40)/10; | |||
size = random(20, 30); | |||
} | |||
public void draw() { | |||
noStroke(); | |||
fill(color(23, 235, 98)); | |||
ellipse(x, y, size*.7, size); | |||
} | |||
public void update() { | |||
y -= speed; | |||
} | |||
public float getY() { | |||
return y; | |||
} | |||
} | |||
</syntaxhighlight> | |||
{{Lösung:End}} | |||
== Kreativ-Ecke == | |||
{{Aufgabe:Start}} | |||
Ergänze das Projekt um eigene Ideen. Die Farbe der Ballons könnte zufällig sein. Du kannst die Bewegungen der Ballons um eine Verschiebung entlang der x-Achse ergänzen, damit die Ballons "aufsteigen". (Einen besonders realistischen Effekt kannst du erziehlen, wenn du die [https://processing.org/reference/sin_.html Sinusfunktion] benutzt.) | |||
Du hast bestimmt eigene gute Ideen. | |||
{{Aufgabe:End}} |
Bearbeitungen