/* built with Studio Sketchpad: * https://sketchpad.cc * * observe the evolution of this sketch: * https://studio.sketchpad.cc/sp/pad/view/ro.Od-E6Gb$TNL/rev.19 * * authors: * GoToLoop * license (unless otherwise specified): * creative commons attribution-share alike 3.0 license. * https://creativecommons.org/licenses/by-sa/3.0/ */ /** * PopBubbles (v3.1) * by Andreas2436 & Chrisir (2013/Apr) * mod GoToLoop * * http://forum.processing.org/topic/project-help-needed * http://studio.processingtogether.com/sp/pad/export/ro.9ZKbYJpM0CfPR/latest */ final static byte BUBBLE_X = 0, BUBBLE_Y = 1, BUBBLE_SPD = 2; final static byte BUBBLE_SIZE = 3, BUBBLE_COLOR = 4; final static byte MIN_SPD = 3, MAX_SPD = 5; final static short MIN_SIZE = 0150, MAX_SIZE = 0250; final static float FPS = 40, BOLD = 2; final static byte MAX_NUM = 010, FREQ = 020; final static int[][] bubbles = new int[MAX_NUM][BUBBLE_COLOR + 1]; final static boolean[] bubblesState = new boolean[MAX_NUM]; final static String GFX = JAVA2D; // Use JAVA2D or P2D static int bubblesCounter, score; void setup() { size(600, 800, GFX); frameRate(FPS); smooth(); strokeWeight(BOLD); ellipseMode(CENTER); } void draw() { background(-1); if (frameCount % FREQ == 0) createBubbles(); updateBubbles(); drawBubbles(); } void mousePressed() { for (int i=0; i!=MAX_NUM; i++) if (bubblesState[i]) if ( isMouseIntersect(i, mouseX, mouseY) ) { bubblesState[i] = false; return; } } static final boolean isMouseIntersect(int i, int mx, int my) { final int[] b = bubbles[i]; return sq(b[BUBBLE_X] - mx) + sq(b[BUBBLE_Y] - my) < sq(b[BUBBLE_SIZE]>>1); //return dist(mx, my, b[BUBBLE_X], b[BUBBLE_Y]) < b[BUBBLE_SIZE]>>1; } static final void updateBubbles() { for (int i=0; i!=MAX_NUM; i++) if (bubblesState[i]) { final int[] b = bubbles[i]; b[BUBBLE_Y] -= b[BUBBLE_SPD]; if (b[BUBBLE_Y] < -b[BUBBLE_SIZE]) { bubblesState[i] = false; --bubblesCounter; } } } void drawBubbles() { for (int i=0; i!=MAX_NUM; i++) if (bubblesState[i]) { final int[] b = bubbles[i]; fill(b[BUBBLE_COLOR]); ellipse(b[BUBBLE_X], b[BUBBLE_Y], b[BUBBLE_SIZE], b[BUBBLE_SIZE]); } } void createBubbles() { for (int i=0; i!=MAX_NUM; i++) if (!bubblesState[i]) { final int[] b = bubbles[i]; b[BUBBLE_X] = (int) random(width); b[BUBBLE_Y] = height + 0200; b[BUBBLE_SPD] = (int) random(MIN_SPD, MAX_SPD + 1); b[BUBBLE_SIZE] = (int) random(MIN_SIZE, MAX_SIZE + 1); b[BUBBLE_COLOR] = (color) random(#000000); bubblesState[i] = true; ++bubblesCounter; return; } }