//The collision function here is not pure, and does some weird things when //balls do not collide "nicely" Ball[] balls = new Ball[100]; void setup() { size(300,300); smooth(); noStroke(); for(int i=0; i< balls.length; i=i+1) { balls[i] = new Ball(random(0,width),random(0,height),random(-.5,.5),random(-.5,.5), 100); } } void draw() { background(0); for(int i=0; i< balls.length; i=i+1) { balls[i].render(); balls[i].update(); collision(); } } void collision() { float distx, disty; for(int i=0; i< balls.length; i=i+1) { for(int j=i; j< balls.length; j=j+1) { if(j != i) { distx=balls[i].getX() - balls[j].getX(); disty=balls[i].getY() - balls[j].getY(); if( (abs(distx)<10) && (abs(disty)<10) ) { balls[i].setVX( -1*balls[i].getVX() ); balls[i].setVY( -1*balls[i].getVY() ); balls[j].setVX( -1*balls[j].getVX() ); balls[j].setVY( -1*balls[j].getVY() ); balls[j].setC(255); balls[i].setC(255); } } } } } class Ball { float x,y,vx,vy; float s; color c; Ball(float x_, float y_, float vx_, float vy_, color c_) { x=x_; y=y_; vx=vx_; vy=vy_; c=c_; s=10; } void setC(color c_) {c=c_;} float getX() {return x;} float getY() {return y;} void setX(float x_) {x = x_;} void setY(float y_) {y = y_;} void setXY(float x_, float y_) {x = x_;y = y_;} float getVX() {return vx;} float getVY() {return vy;} void setVX(float vx_) {vx = vx_;} void setVY(float vy_) {vy = vy_;} void setVXY(float vx_, float vy_) {vx = vx_;vy = vy_;} void update() { if (x+vx > width ) {x=width; vx=-1*vx;} else if (x+vx <0) {x=0; vx=-1*vx;} else {x=x+vx;} if (y+vy > height ) {y=height; vy=-1*vy;} else if (y+vy <0) {y=0; vy=-1*vy;} else {y=y+vy;} } void render() { fill(c); ellipse(x,y,s,s); //reset c c=100; } }