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 *
* 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 *
* 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 *
* 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 *
* 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(); } }