/* built with Studio Sketchpad: * https://sketchpad.cc * * observe the evolution of this sketch: * https://studio.sketchpad.cc/sp/pad/view/ro.PKnDDqu1vYo/rev.12 * * authors: * GoToLoop * license (unless otherwise specified): * creative commons attribution-share alike 3.0 license. * https://creativecommons.org/licenses/by-sa/3.0/ */ /** * Clickable Balls (v1.0.2) * Jcov (2017-May-20) * Mod GoToLoop * * Forum.Processing.org/two/discussion/22678/ * problem-regarding-arraylist#Item_9 * * Studio.ProcessingTogether.com/sp/pad/export/ro.9NGjx94YMTtlu */ import java.util.List; static final int BALLS = 10; final List<Ball> balls = new ArrayList<Ball>(); void setup() { size(500, 500); smooth(3); noLoop(); colorMode(RGB); ellipseMode(CENTER); strokeWeight(1.5); stroke(#00FFFF); fill(#0000FF); } void draw() { background(#FF00A0); if (balls.isEmpty()) makeBalls(); for (final Ball b : balls) b.display(); } void mousePressed() { for (int len = balls.size(), i = len; i-- != 0; ) if (balls.get(i).isMouseWithinCircle()) { balls.set(i, balls.get(--len)); balls.remove(len); redraw(); return; } } void makeBalls() { balls.clear(); for (int i = 0; i++ < BALLS; balls.add(new Ball())); } static final int sq(final int n) { return n*n; } class Ball { static final int DIAM = 20; static final int RAD = DIAM >> 1; static final int RAD_SQ = RAD * RAD; final short x = (short) round(random(RAD, width - RAD)); final short y = (short) round(random(RAD, height - RAD)); void display() { ellipse(x, y, DIAM, DIAM); } boolean isMouseWithinCircle() { return sq(mouseX - x) + sq(mouseY - y) < RAD_SQ; } }