mirror of
https://github.com/jneug/zeichenmaschine.git
synced 2026-04-14 14:43:33 +02:00
Beispielprojekt Bildergallerie
Die Bildergallerie zeigt die Verwendung des DrawingLayer, um statische Bilder zu zeichnen.
This commit is contained in:
259
examples/zm_gallery/Gallery.java
Normal file
259
examples/zm_gallery/Gallery.java
Normal 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();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
22
examples/zm_gallery/README.TXT
Normal file
22
examples/zm_gallery/README.TXT
Normal 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.
|
||||||
32
examples/zm_gallery/package.bluej
Normal file
32
examples/zm_gallery/package.bluej
Normal 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
|
||||||
Reference in New Issue
Block a user