/* (c) Patrik Bóna - head at hysteria dot sk start: 7th November 2005 bug fixed: 9th November 2005 share it, use it */ int n = 160; // we will not make it easier ;) // will use simple array muhehe Rectangle[] r = new Rectangle[n]; int minW = 12; int maxW = 30; int rows = 10; int distance = 20; int offset = 10; int step = 2; void setup() { size(320, 200); background(255); noStroke(); framerate(20); int tmpX, tmpY; for(int i = 0; i < n; i++) { // i am ... ;) i did not make it easier before, som i spent smthk // abou 20 minutes on expression below ;) r[i] = new Rectangle( i/rows * distance + offset, i % rows * distance + offset, minW); } for(int i = 0; i < n; i++) { r[i].show(); } } void draw() { for(int i = 0; i < n; i++) { if(r[i].mouseOver() && r[i].getW() < maxW) { r[i].wPlusStep(); } } for(int i = 0; i < n; i++) { int maxNeighbourW = 0; // WTF is this ? OMG :) if(r[i].mouseOver()) continue; if(i + 1 < n && (i + 1) % rows != 0 && r[i+1].getW() > maxNeighbourW) maxNeighbourW = r[i+1].getW(); if(i - 1 >= 0 && i % rows != 0 && r[i-1].getW() > maxNeighbourW) maxNeighbourW = r[i-1].getW(); if(i + rows < n && r[i+rows].getW() > maxNeighbourW) maxNeighbourW = r[i+rows].getW(); if(i - rows >= 0 && r[i-rows].getW() > maxNeighbourW) maxNeighbourW = r[i-rows].getW(); if(maxNeighbourW > r[i].getW() + step) { r[i].wPlusStep(); } else if(r[i].getW() + step != maxNeighbourW && r[i].getW() > minW) { r[i].wMinusStep(); } } background(255); for(int i = 0; i < n; i++) { r[i].show(); } } class Rectangle { int x, y; // position int w; // width Rectangle (int X, int Y, int W) { x = X; y = Y; w = W; } void show() { fill(100, 50 + float((w - minW))/float((maxW-minW))*200); rect(x - w/2, y - w/2, w, w); } int getW() { return w; } void setW(int W) { w = W; } void wPlusStep() { w += step; } void wMinusStep() { w -= step; } boolean mouseOver() { if(mouseX > x - w/2 && mouseX < x + w/2 && mouseY > y - w/2 && mouseY < y + w/2) { return true; } return false; } }