I’m not one to advocate Java generally, but Processing is totally hawt. Here’s something I screwed around with today: Ball[] myBalls; void setup() { size(500,500); frameRate(25); myBalls = new Ball[300]; for (int i = 0; i < 300; i++) { myBalls[i] = new Ball(); myBalls[i].x = random(0, 500); myBalls[i].y = random(0, 500); myBalls[i].r = random(0, 10); myBalls[i].xv = random(-5, 5); myBalls[i].yv = random(-5, 5); myBalls[i].mycolor = int(random(0, 100)); myBalls[i].myseed = int(random(25,100)); } } void draw() { background(0); for (int i [...]