int addCircles = 10; int totalCircles = 10000000; int circleCount = 0; float circleDrift = 5; Circle[] storeCircles = new Circle[totalCircles]; void setup() { size(500,500); background(255); smooth(); strokeWeight(1); fill(150, 50); newCircles(); } void draw() { background(255); for (int i = 0; i < circleCount; i++) { storeCircles[i].moveMe(); storeCircles[i].drawMe(); storeCircles[i].dontBeAnIdiotAndDriftOffScreenMeAlsoFollowingNamingConventionsForTheWin(); } } void mouseReleased() { newCircles(); } void newCircles() { for (int i = 0; i < addCircles; i++){ Circle c = new Circle(); if (circleCount < totalCircles) { storeCircles[circleCount] = c; circleCount += 1; } } } class Circle { float x, y, moveX, moveY; float radius; color linecol, fillcol; float alph; Circle () { x = random(width); y = random(height); radius = random(100) + 10; linecol = color(random(255), random(255), random(255)); fillcol = color(random(255), random(255), random(255)); alph = random(255); moveX = random(circleDrift) - circleDrift/2; moveY = random(circleDrift) - circleDrift/2; } void drawMe() { noStroke(); fill(fillcol, alph); ellipse(x, y, radius*2, radius*2); stroke(linecol, 150); noFill(); ellipse(x, y, 10, 10); } void moveMe() { x += moveX; y += moveY; } void dontBeAnIdiotAndDriftOffScreenMeAlsoFollowingNamingConventionsForTheWin() { if (x >= 500) { x -= 1; moveX = random(circleDrift) - circleDrift/2; } else if (x <= 0) { x += 1; moveX = random(circleDrift) - circleDrift/2; } if (y >= 500) { y -= 1; moveY = random(circleDrift) - circleDrift/2; } else if ((y <= 0)) { y += 1; moveY = random(circleDrift) - circleDrift/2; } } }