Projekt:2020/Processing Arrays: Unterschied zwischen den Versionen

Zur Navigation springen Zur Suche springen
keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
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}}
8.581

Bearbeitungen

Navigationsmenü