Beispielprojekt Bildergallerie

Die Bildergallerie zeigt die Verwendung des DrawingLayer, um statische Bilder zu zeichnen.
This commit is contained in:
ngb
2022-01-05 17:20:54 +01:00
parent 3a53d922cc
commit a987cf9d36
3 changed files with 313 additions and 0 deletions

View File

@@ -0,0 +1,259 @@
import schule.ngb.zm.Color;
import schule.ngb.zm.Zeichenmaschine;
/**
* Eine Bildergallerie von Bildern eines Informatikkurses des 10. Jahrgangs.
*/
public class Gallery extends Zeichenmaschine {
public static void main( String[] args ) {
new Gallery();
}
public void setup() {
setSize(600, 600);
setTitle("ZM: Gallery");
}
/**
* Wählt ein zufälliges Bild aus und zeigt es an.
*/
public void draw() {
drawRandom();
}
/**
* Zeigt ein zufälliges Bild an.
*/
public void drawRandom() {
switch( random(0, 4) ) {
case 0:
rainbow();
break;
case 1:
snowman();
break;
case 2:
deathstar();
break;
case 3:
prideflag();
break;
}
}
/**
* Bei Mausklick ein Zufallsbild anzeigen
*/
public void mouseClicked() {
drawRandom();
}
/**
* Startet eine fortlaufende Präsentation aller Bilder.
*
* @param pWartezeit Die Wartezeit zum nächsten Bildwechsel in Millisekunden.
*/
public void slideshow( int pWartezeit ) {
int i = 0;
while( true ) {
switch( i ) {
case 0:
rainbow();
break;
case 1:
snowman();
break;
case 2:
deathstar();
break;
case 3:
prideflag();
break;
}
i = (i + 1) % 4;
delay(pWartezeit);
}
}
/**
* Regenbogen
* <p>
* von
*/
public void rainbow() {
// Blauer Hintergrund
drawing.clear(60, 155, 217);
// Einige Werte berechnen, um Bild an Bildgröße anzupassen
double size = (width+height)*0.03333;
double r = width / 2.0;
// Kleiner werdende Kreise in den Farben des Bogens zeichnen
drawing.noStroke();
drawing.setFillColor(207, 71, 67);
drawing.circle(width / 2.0, height, r - 1 * size);
drawing.setFillColor(235, 134, 42);
drawing.circle(width / 2.0, height, r - 2 * size);
drawing.setFillColor(234, 181, 58);
drawing.circle(width / 2.0, height, r - 3 * size);
// Mitte mit "himmelfarbe" übermalen, um Ringe zu erzeugen
drawing.setFillColor(60, 155, 217);
drawing.circle(width / 2.0, height, r - 4 * size);
// Sonne zeichnen
drawing.setFillColor(232, 200, 52);
drawing.circle(width*0.8333, size*2.6666, size*2);
// Bild auf Leinwand übertragen
redraw();
}
/**
* LGBTQ-Flagge
* <p>
* von
*/
public void prideflag() {
// Schwarzer Hintergrund
drawing.clear(0);
drawing.setStrokeColor(0);
// Farben der Streifen festlegen
Color[] colors = new Color[]{
RED, ORANGE, YELLOW, GREEN, BLUE, PURPLE
};
// Breite der Streifen an Bildgröße anpassen
double size = height*0.06666;
double borderX = width/6.0, borderY = height/6.0;
// Flaggenstab zeichnen
drawing.setFillColor(BROWN);
drawing.rect(borderX, borderY, size, height - 2*borderY, NORTHWEST);
// Streifen zeichnen
for( int i = 0; i < colors.length; i++ ) {
drawing.setFillColor(colors[i]);
drawing.rect(borderX, borderY + i * size, width - 2*borderX, size, NORTHWEST);
}
// Bild auf Leinwand übertragen
redraw();
}
/**
* Todesstern
* <p>
* von Niklas, Henry und Ben
*/
public void deathstar() {
// Sternenhimmel zeichnen
drawing.clear(0);
drawing.noStroke();
drawing.setFillColor(WHITE);
// Zufällig erzeugte Sterne
for( int i = 0; i < (width+height)/4; i++ ) {
drawing.circle(random(0.0, width), random(0.0, height), random(1, 3));
}
// Einige Werte berechnen, die später verwendet werden, um
// die Zeichnung an die Bildschirmgröße anzupassen.
double radius = limit(width*0.6666, height*0.6666) / 2.0;
double w2 = width / 2.0, h2 = height / 2.0;
double r2 = radius / 2.0,
r3 = radius / 3.0, r4 = radius / 4.0,
r5 = radius / 5.0, r10 = radius / 10.0;
// Korpus zeichnen
drawing.setFillColor(128);
drawing.circle(width / 2.0, height / 2.0, radius);
// Graben am Äquator zeichnen
drawing.setStrokeColor(0);
drawing.setStrokeWeight(1.4);
drawing.arc(width / 2.0, height / 2.0, radius + radius, r2, 180, 360);
// Schüssel zeichnen
drawing.setFillColor(96);
drawing.circle(w2 + r2, h2 - r3, r4);
drawing.setFillColor(84);
drawing.circle(w2 + r2 + 2, h2 - r3 - 2, r10);
// Strahlen des Lasers zeichnen
int beams = 8; // Anzahl Strahlen
for( int i = 0; i < beams; i++ ) {
drawing.setStrokeColor(GREEN);
drawing.setStrokeType(SOLID);
drawing.setStrokeWeight(1.6);
drawing.line(
w2 + r2 - r4 * cos(radians(360 / beams * i)),
h2 - r3 + r4 * sin(radians(360 / beams * i)),
w2 + r2 + 2 + r5,
h2 - r3 - 2 - r5
);
drawing.setStrokeType(DASHED);
drawing.setStrokeWeight(3.0);
drawing.line(
w2 + r2 - r4 * cos(radians(360 / beams * i)),
h2 - r3 + r4 * sin(radians(360 / beams * i)),
w2 + r2 + 2 + r5,
h2 - r3 - 2 - r5
);
drawing.setStrokeColor(WHITE);
drawing.setStrokeType(SOLID);
drawing.setStrokeWeight(1.0);
drawing.line(
w2 + r2 - r4 * cos(radians(360 / beams * i)),
h2 - r3 + r4 * sin(radians(360 / beams * i)),
w2 + r2 + 2 + r5,
h2 - r3 - 2 - r5
);
}
// Hauptstrahl
drawing.setStrokeColor(GREEN);
drawing.setStrokeType(SOLID);
drawing.setStrokeWeight(4);
drawing.line(w2 + r2 + 2 + r5, h2 - r3 - 2 - r5, width, h2 - w2 + radius / 6.0);
drawing.setStrokeWeight(1);
drawing.setStrokeColor(255);
drawing.line(w2 + r2 + 2 + r5, h2 - r3 - 2 - r5, width, h2 - w2 + radius / 6.0);
// Bild auf Leinwand übertragen
redraw();
}
/**
* Schneemann
* <p>
* von
*/
public void snowman() {
// Hellblauer Hintergrund
drawing.clear(219, 253, 255);
drawing.noStroke();
drawing.setFillColor(255);
// Drei Schneekugeln
drawing.circle(width / 2.0, height - 100, 100);
drawing.circle(width / 2.0, height - 180 - 60, 60);
drawing.circle(width / 2.0, height - 180 - 110 - 40, 40);
// Zwei Augen
drawing.setFillColor(0);
drawing.circle(width / 2.0 - 15, height - 345, 4);
drawing.circle(width / 2.0 + 15, height - 345, 4);
// Nase
drawing.setFillColor(255, 147, 0);
drawing.triangle(width / 2.0, height - 335, width / 2.0 - 5, height - 330, width / 2.0 + 5, height - 330);
// Bild auf Leinwand übertragen
redraw();
}
}

View File

@@ -0,0 +1,22 @@
# Zeichenmaschine: Gallery
Die Bildergallerie ist eine Sammlung statischer Bilder, die mit der
Zeichenmaschine programmiert wurden.
Die Bilder selbst wurden von einem Informatikkurs des Jahrgangs 10 in
Processing (https://processing.org) erstellt und für dieses Beispielprojekt
auf die Zeichenmaschine angespasst.
Die Autoren der Bilder sind:
- Schneemann:
- Todesstern
- Regenbogen:
- LGBTQ-Flagge:
## Verwendung
Beim Start wird eines der vorhandenen Bilder ausgewählt und angezeigt.
Mit der Methode "slideshow()" wird eine fortlaufende Präsentation der Bilder
gestartet. Die Wartezeit bis zum nächsten Bildwechsel kann als Parameter in
Millisekunden angegeben werden.

View File

@@ -0,0 +1,32 @@
#BlueJ package file
editor.fx.0.height=0
editor.fx.0.width=0
editor.fx.0.x=0
editor.fx.0.y=0
objectbench.height=94
objectbench.width=776
package.divider.horizontal=0.6
package.divider.vertical=0.8305369127516778
package.editor.height=488
package.editor.width=661
package.editor.x=46
package.editor.y=149
package.frame.height=660
package.frame.width=800
package.numDependencies=0
package.numTargets=1
package.showExtends=true
package.showUses=true
project.charset=UTF-8
readme.height=60
readme.name=@README
readme.width=48
readme.x=10
readme.y=10
target1.height=70
target1.name=Gallery
target1.showInterface=false
target1.type=ClassTarget
target1.width=120
target1.x=70
target1.y=10