Projekt:2020/Processing: Unterschied zwischen den Versionen

Aus Informatik-Box
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Zeile 85: Zeile 85:


== Billard ==
== Billard ==
[[Datei:20210413082703_Billard.png|center|400px]]


=== Niveau 1 ===
=== Niveau 1 ===

Version vom 13. April 2021, 08:27 Uhr

Seite zum Projekt "Processing" der Informatik EF im Schuljahr 2020/21.

Pair Programming ist eine verbreitete Praxis bei der Softwareentwicklung. Dabei arbeiten (in der Regel zwei) Programmierer zusammen. Während einer den Code schreibt, denken die anderen über die Problemstellung nachdenkt, Lösungsansätze sucht, Befehle nachschlägt und auf die Qualität des Codes achtet. Die Rollen sollen dabei immer wieder getauscht werden.

Die Programmiererin, die die Tastatur bedient nennt man Driver, die anderen Navigator.

Bearbeitet die Aufgaben mit der Pair Programming Methode. Der Driver teilt dazu seinen Bildschirm mit Processing. Die Navigatoren können derweil nach Hilfen suchen, Tipps und Lösungsvorschläge geben und auf Fehler hinweisen.

Sinnvolle Anlaufpunkte sind zum Beispiel:

- Die Befehlsreferenz von Processing - Der Objektorientierte Programmierung mit Processing und das Projekt der letzten Stunde.

Für die Aufgaben gibt es Versionen mit verschiedenen Schwierigkeitsniveaus. Sucht euch als Gruppe jeweils ein Niveau aus und versucht es zu lösen. Ist das Niveau zu schwer oder zu leicht, könnt ihr auch auf ein anderes Niveau wechseln. Ihr könnt die Aufgaben auch kreativ erweitern, wenn ihr gute Ideen habt.

Schachbrett

20210413082443 Schachbrett.png

Niveau 1

Icon Heft.png
Arbeitsauftrag

Stellt die Größe des Processing-Fensters auf 800x600 Pixel ein. Erstellt dann eine Klasse Schachbrettmuster, die das gesamte Fenster wie ein Schachbrett im Wechsel mit schwarzen und weißen Quadraten füllt.

Die Quadrate haben die Größe 40.


Tipps
  • Quadrate könnt ihr mit square zeichnen.
  • Mit Zählschleifen (for-Schleifen) könnt ihr die Zeilen und Spalten des Musters durchlaufen. (Ihr müsst zwei Schleifen ineinander verschachteln.
  • Eine einfache Prüfung, ob ein Feld schwarz oder weiß sein muss, kann durch if( (i+j)%2 == 0 ) vorgenommen werden. Dabei ist i die Zeilennummer und j die Spalte. % ist der "Modulo"-Operator.


Niveau 2

Icon Heft.png
Arbeitsauftrag

Erstellt eine Klasse Schachbrettmuster, die das gesamte Fenster wie ein Schachbrett im Wechsel mit schwarzen und weißen Rechtecken füllt. Dabei soll das Fenster exakt ausgefüllt werden und genau 15 Zeilen und 20 Spalten enthalten. Egal, auf welche Größe man das Processing-Fenster einstellt.


Tipps
  • Rechtecke könnt ihr mit rect zeichnen.
  • Mit Zählschleifen (for-Schleifen) könnt ihr die Zeilen und Spalten des Musters durchlaufen. (Ihr müsst zwei Schleifen ineinander verschachteln.
  • Eine einfache Prüfung, ob ein Feld schwarz oder weiß sein muss, kann durch if( (i+j)%2 == 0 ) vorgenommen werden. Dabei ist i die Zeilennummer und j die Spalte. % ist der "Modulo"-Operator.
  • Die Variable width enthält die Breite des Processing-Fensters. Die Variable height die Höhe.


Niveau 3

Icon Heft.png
Arbeitsauftrag

Stellt die Größe des Processing-Fensters auf 800x600 Pixel ein. Erstellt dann eine Klasse Schachbrettmuster, die in einer draw()-Methode das gesamte Fenster wie ein Schachbrett im Wechsel mit schwarzen und weißen Quadraten füllt. Dabei soll die Größe der Quadrate, sowie die Farbe für "schwarze" und "weiße" Felder als Parameter der Methode frei gewählt werden können.


Tipps
  • Mit Zählschleifen (for-Schleifen) könnt ihr die Zeilen und Spalten des Musters durchlaufen. (Ihr müsst zwei Schleifen ineinander verschachteln.
  • Eine einfache Prüfung, ob ein Feld schwarz oder weiß sein muss, kann durch if( (i+j)%2 == 0 ) vorgenommen werden. Dabei ist i die Zeilennummer und j die Spalte. % ist der "Modulo"-Operator.
  • lest bei der fill-Methode über Farben nach.


Niveau 4

Icon Heft.png
Arbeitsauftrag

Erstellt eine Klasse Schachbrettmuster, die in einer draw()-Methode das gesamte Fenster wie ein Schachbrett im Wechsel mit schwarzen und weißen Rechtecken füllt. Dabei soll die Farbe für "schwarze" und "weiße" Felder als Parameter der Methode frei gewählt werden können.

Die Rechtecke sollen das Fenster exakt ausfüllen und zunächst in genau 15 Zeilen und 20 Spalten aufgeteilt sein. Egal, auf welche Größe man das Processing-Fenster einstellt.

Animiert dann das Muster, indem ihr die Anzahl an Zeilen und Spalten jeweils um 1 erhöht, bis sie insgesamt um 10 erhöht wurden, dann verringert sie wieder bis sie 10 unter dem Startwert liegen (also bei 5 Zeilen, 10 Spalten). Dann wieder erhöhen, und so weiter.


Tipps
  • Mit Zählschleifen (for-Schleifen) könnt ihr die Zeilen und Spalten des Musters durchlaufen. (Ihr müsst zwei Schleifen ineinander verschachteln.
  • Eine einfache Prüfung, ob ein Feld schwarz oder weiß sein muss, kann durch if( (i+j)%2 == 0 ) vorgenommen werden. Dabei ist i die Zeilennummer und j die Spalte. % ist der "Modulo"-Operator.
  • Lest bei der fill-Methode über Farben nach.
  • Erstellt eine Objektvariable, die zu den Startwerten (15 und 20) hinzugerechnet wird und in einer update-Methode hoch bzw. runter gezählt wird.


Billard

20210413082703 Billard.png

Niveau 1

Icon Heft.png
Arbeitsauftrag

Erstellt eine Klasse Billardkugel, die eine Billardkugel an eine zufällige Position am oberen Rand des Fensters zeichnet und sie dann langsam in Richtung unteren Rand bewegt, bis sie aus dem Bild verschwunden ist (ggf. auch in einer zufälligen Richtung).


Tipps
  • Kreise könnt ihr mit circle zeichnen.
  • Mit Vektoren kann die Bewegung von Objekten leichter berechnet werden.
    • Erstellt einen Vektor z.B. mit PVektor v1 = new PVektor(4.0, 3.0);.
    • Addiert einen anderen Vektor auf den ersten mit v1.add(v2);.
    • Greift auf die Koordinaten des Vektors mit v1.x / v1.y zu.


Niveau 2

Icon Heft.png
Arbeitsauftrag

Erstellt eine Klasse Billardkugel, die eine Billardkugel an eine zufällige Position am oberen Rand des Fensters zeichnet und sie dann langsam in Richtung unteren Rand bewegt (ggf. auch in einer zufälligen Richtung).

Sobald die Kugel einen Rand berührt, soll sie in die entgegengesetzte Richtung abprallen und weiterlaufen.


Tipps
  • Kreise könnt ihr mit circle zeichnen.
  • Mit Vektoren kann die Bewegung von Objekten leichter berechnet werden.
    • Erstellt einen Vektor z.B. mit PVektor v1 = new PVektor(4.0, 3.0);.
    • Addiert einen anderen Vektor auf den ersten mit v1.add(v2);.
    • Greift auf die Koordinaten des Vektors mit v1.x / v1.y zu.
    • Ändert die Richtung des Vektors mit v1.mult(-1);.
  • Die Variable width enthält die Breite des Processing-Fensters. Die Variable height die Höhe.


Niveau 3

Icon Heft.png
Arbeitsauftrag

Erstellt eine Klasse Billardkugel, die eine Billardkugel an eine zufällige Position am oberen Rand des Fensters zeichnet und sie dann langsam in Richtung unteren Rand bewegt (ggf. auch in einer zufälligen Richtung).

Sobald die Kugel einen Rand berührt, soll sie in einem möglichst realistischen Winkel vom Rand abprallen.


Tipps
  • Mit Vektoren kann die Bewegung von Objekten leichter berechnet werden.
    • Erstellt einen Vektor z.B. mit PVektor v1 = new PVektor(4.0, 3.0);.
    • Addiert einen anderen Vektor auf den ersten mit v1.add(v2);.
    • Greift auf die Koordinaten des Vektors mit v1.x / v1.y zu.
    • Ändert die Richtung des Vektors mit v1.mult(-1);.
    • Dreht einen Vektor um einen Winkel mit v1.rotate(HALF_PI);. (Der Winkel wird als Vielfaches von Pi angegeben. Nutzt dazu die Variablen PI, HALF_PI und QUARTER_PI.)
  • Die Variable width enthält die Breite des Processing-Fensters. Die Variable height die Höhe.
  • Es gilt die Formel Ausfallswinkel = Einfallswinkel.


Niveau 4

Icon Heft.png
Arbeitsauftrag

Erstellt eine Klasse Billardtisch, die einen Billardtisch in das Fenster zeichnet.

Erstellt dann eine Klasse Billardkugel, die eine Billardkugel an eine zufällige Position auf den Tisch zeichnet und sie dann langsam in eine zufällige Richtung in Bewegung setzt.

Sobald die Kugel einen Rand de Tisches berührt, soll sie in einem möglichst realistischen Winkel von ihm abprallen.


Tipps
  • Mit Vektoren kann die Bewegung von Objekten leichter berechnet werden.
    • Erstellt einen Vektor z.B. mit PVektor v1 = new PVektor(4.0, 3.0);.
    • Addiert einen anderen Vektor auf den ersten mit v1.add(v2);.
    • Greift auf die Koordinaten des Vektors mit v1.x / v1.y zu.
    • Ändert die Richtung des Vektors mit v1.mult(-1);.
    • Dreht einen Vektor um einen Winkel mit v1.rotate(HALF_PI);. (Der Winkel wird als Vielfaches von Pi angegeben. Nutzt dazu die Variablen PI, HALF_PI und QUARTER_PI.)
  • Es gilt die Formel Ausfallswinkel = Einfallswinkel.