int bi; boolean touch = false; boolean go = true; float m = 1.0; square [] ba = new square[1]; void setup(){ String bs[] = loadStrings("../count.txt"); String bj = join(bs,""); bi = Integer.parseInt(bj)-1; size(400,400); ba[0] = new square(0,0,20); } void loop(){ if (go){ for (int i = 0; i < bi-1;i++){ spawn(); } go = false; } background(229,232,182); translate(200,200); for (int i = 0; i < ba.length; i++){ ba[i].d(); } if (touch){ shove(); } if (keyPressed && key == '+'){ m += 0.1; } if (keyPressed && key == '-'){ m -= 0.1; } } void spawn(){ touch = true; int w = int(random(ba.length)); newLength(ba[ba.length-1]); int x = ba[w].x + int(cos(random(TWO_PI))*2); int y = ba[w].y + int(sin(random(TWO_PI))*2); ba[ba.length-1] = new square (x,y,int(random(20))+10); } void shove(){ for(int i1 = 0; i1 < ba.length; i1++){ for(int i2 = 0; i2 < ba.length; i2++){ if (i1 != i2){ if (ba[i1].intersects(ba[i2])){ touch = true; float theta = 0.0; if (ba[i1].nx != ba[i2].nx && ba[i1].ny != ba[i2].ny){ theta = atan2(ba[i2].ny-ba[i1].ny,ba[i2].nx-ba[i1].nx); //theta = atan2(ba[i1].ny-ba[i2].ny,ba[i1].nx-ba[i2].nx); } else { theta = atan2(ba[i2].y-ba[i1].y,ba[i2].x-ba[i1].x); //theta = atan2(ba[i1].y-ba[i2].y,ba[i1].x-ba[i2].x); } int sx = int(cos(theta)*2); int sy = int(sin(theta)*2); ba[i1].nx -= sx; ba[i1].x -= sx; ba[i1].ny -= sy; ba[i1].y -= sy; ba[i2].nx += sx; ba[i2].x += sx; ba[i2].ny += sy; ba[i2].y += sy; } } } } } class square extends Rectangle { int nx,ny; square (int x, int y, int s){ this.x = x; this.y = y; this.width = s; this.height = s; this.nx = x+(width/4)+int(random(width/2)); this.ny = y+(height/4)+int(random(height/2)); } void d(){ stroke(50,160,70); fill(127,219,144); rect(x*m,y*m,width*m,height*m); stroke(151,88,75); fill(209,69,41); rect(nx*m,ny*m,3*m,3*m); } } void newLength(square newx) { square[] tempx = new square[ba.length + 1]; System.arraycopy(ba, 0, tempx, 0, ba.length); tempx[ba.length] = newx; ba = tempx; }