Processing 101 – 05 waterPipe
Part 5 of 7 of Series Processing 101
/////////////////////////////////////// /************************************** //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; } }