/* built with Studio Sketchpad: * https://sketchpad.cc * * observe the evolution of this sketch: * https://studio.sketchpad.cc/sp/pad/view/ro.YRCtYAyfOjI/rev.49 * * authors: * GoToLoop * * license (unless otherwise specified): * creative commons attribution-share alike 3.0 license. * https://creativecommons.org/licenses/by-sa/3.0/ */ /* * Rain Game (v1.51) * by SoundMan4 (2012/Dec) * * http://forum.processing.org/topic/works-in-java-but-not-javascript */ final static byte numRainDrop = 50; final static RainDrop[] rain = new RainDrop[numRainDrop]; Bucket buck; boolean isGameOver, right, left; int dropsMissed, dropsCaught; void setup() { size(400, 400); frameRate(60); smooth(); noStroke(); textAlign(CENTER); buck = new Bucket(); for ( byte i=0; i!=numRainDrop; rain[i++]=new RainDrop() ); } void draw() { background(0); if (isGameOver) { text("You caught " +dropsCaught+ " raindrops!", width>>1, 100); text( dropsCaught >= dropsMissed ? "YOU WIN!" : "YOU LOSE!", width>>1, height>>1); noLoop(); return; } for (RainDrop rd: rain) { if ( (int) (millis()/1000) == rd.timeToDisplay ) rd.makeRain(); if (rd.isFalling) { rd.display(); rd.fall(); } if (abs(rd.locationY - buck.locationY + Bucket.buckW) <=5 && abs(rd.locationX - buck.locationX) <= Bucket.buckW) { rd.caught(); dropsCaught++; } else if (rd.locationY > height) { rd.miss(); dropsMissed++; } } if (right) buck.moveRight(); else if (left) buck.moveLeft(); buck.display(); fill(255); text("Raindrops caught: " + dropsCaught, width>>1, 15); if (dropsMissed + dropsCaught == numRainDrop) isGameOver = true; } void keyPressed() { if (keyCode==RIGHT | keyCode=='D') right = true; else if (keyCode==LEFT | keyCode=='A') left = true; } void keyReleased() { if (keyCode==RIGHT | keyCode=='D') right = false; else if (keyCode==LEFT | keyCode=='A') left = false; } class Bucket { static final color buckCol = #50A050; static final byte speedChange = 3; static final byte buckW = 35; static final byte buckH = 10; int locationX = width>>1; int locationY = height - buckH*2; void moveRight() { if ( (locationX += speedChange) > width-buckW ) locationX = width-buckW; } void moveLeft() { if ( (locationX -= speedChange) < buckW ) locationX = buckW; } void display() { fill(buckCol); quad(locationX - buckW, locationY - buckW, locationX - buckW + 5, locationY + buckH, locationX + buckW - 5, locationY + buckH, locationX + buckW, locationY - buckW); } } class RainDrop { static final color dropCol = #54A2E0; static final byte dropSize = 10, dropSz = dropSize>>1; static final byte duration = 60; final int timeToDisplay = (int) random(2, duration); final int fallingSpeed = (int) random(2, 5); boolean isFalling; int locationX = (int) random(dropSz, width-dropSz); short locationY = dropSz; void display() { fill(dropCol); ellipse(locationX, locationY, dropSize, dropSize); triangle(locationX - dropSz, locationY, locationX, locationY - dropSize, locationX + dropSz, locationY); } void fall() { if (isFalling) locationY += fallingSpeed; } void makeRain() { isFalling = true; } void caught() { isFalling = false; locationX = 9999; } void miss() { isFalling = false; locationY = -100; } }