///////////////////////////////////////
/**************************************
//www.geneatcg.com/
Processing 101 - 05
Wriiten by Gene Kao
Date --- 2013/04/16
**************************************/
///////////////////////////////////////
Pipe[][] grids;
int width = 650;
int height = 450;
int x = 20;
int y = 15;
int gridx = width/x;
int gridy = height/y;
int w = 15;
void setup() {
size(width, height);
smooth();
background(200);
rectMode(CENTER);
frameRate(10);
grids = new Pipe[2*x][2*y];
for (int i = 0; i < 2*x-1; i++) {
for (int j = 0; j < 2*y-1; j++) {
if (i % 2 == 0 || j % 2 ==0) {
PVector pos = new PVector(i*gridx/2+gridx/2, j*gridy/2+gridy/2);
grids[i][j] = new Pipe(pos, i, j, false);
}
else {
PVector o = new PVector(0, 0);
grids[i][j] = new Pipe(o, i, j, false);
}
}
}
rand();
}
void draw() {
background(200);
for (int i = 0; i < 2*x-1; i++) {
for (int j = 0; j < 2*y-1; j++) {
if (i % 2 == 0 || j % 2 ==0) {
if (i % 2 == 0 && j % 2 ==0) fill(255, 0, 0);
else fill(255);
strokeWeight(1);
ellipse(grids[i][j].loc.x, grids[i][j].loc.y, 5, 5);
if (i % 2 == 0 && j % 2 ==0) {
strokeWeight(w);
grids[i][j].testLeftUP();
}
}
}
}
}
void mousePressed() {
startover();
rand();
}
void rand() {
for (int i = 0; i < 2*x-1; i++) {
for (int j = 0; j < 2*y-1; j++) {
if (i % 2 == 0 || j % 2 ==0) {
if (i % 2 == 0 && j % 2 ==0) fill(255, 0, 0);
else fill(255);
//strokeWeight(1);
//ellipse(grids[i][j].loc.x, grids[i][j].loc.y, 5, 5);
if (i % 2 == 0 && j % 2 ==0) {
grids[i][j].randomize();
}
}
}
}
}
void startover() {
for (int i = 0; i < 2*x-1; i++) {
for (int j = 0; j < 2*y-1; j++) {
grids[i][j].initial();
}
}
}
class Pipe {
PVector loc;
int i;
int j;
boolean taken = false;
Pipe(PVector loc, int i, int j, boolean taken) {
this.loc = loc;
this.i = i;
this.j = j;
this.taken = taken;
}
void starter() {
if (i == 0 && j == 0) {
if (random(1)>0.5) {
grids[0][1].taken = true;
}
if (random(1)>0.5) {
grids[1][0].taken = true;
}
}
}
void testLeftUP() {
if ( ( i > 0 && j > 0 ) && (i<2*x-2 && j<2*y-2) ) {
if (grids[i][j-1].taken == true) {
line(loc.x, loc.y, grids[i][j-2].loc.x, grids[i][j-2].loc.y);
}
if (grids[i-1][j].taken == true) {
line(loc.x, loc.y, grids[i-2][j].loc.x, grids[i-2][j].loc.y);
}
}
}
void randomize() {
if ((j>0 && j < 2*y-2) && (i>0 && i < 2*x-2)) {
if (random(1)>0.5) {
grids[i][j+1].taken = true;
}
if (random(1)>0.5) {
grids[i+1][j].taken = true;
}
}
}
void initial() {
grids[i][j].taken = false;
}
}