// snow // // Scott "Jerry" Lawrence // http://www.cis.rit.edu/~jerry/Software/p5 // // based on koenie's "sand" CA // // 2003-10-27 int[][] world; void setup() { size(200, 200); world = new int[width][height]; for( int i=0 ; i> 16) & 0x000000ff; int g = (p >> 8 ) & 0x000000ff; int b = (p ) & 0x000000ff; // darken them r = constrain( r-2, 0, 255 ); g = constrain( g-2, 0, 255 ); b = constrain( b-2, 0, 255 ); // reinstall them world[i][j] = (r<<16) + (g<<8) + b; } } // draw the screen for (int i = 0; i < width; i++) for (int j = 0; j < height; j++) { pixels[j*width+i] = world[i][j]; } for (int i = 0; i < width; i++) { for (int j = height-2; j >= 0; j--) { if( world[i][j] != 0 ) { if( !drop_south( i, j ) ) { if( random(100) > 50.0 ) { if ( !drop_southeast( i, j )) drop_southwest( i, j ); } else { if ( !drop_southwest( i, j )) drop_southeast( i, j ); } } } } } if( !online() && keyPressed && key == 'G' ) saveFrame(); } boolean drop_south( int i, int j ) { if( world[i][j+1] == 0 ) { world[i][j+1] = world[i][j]; world[i][j] = 0; return true; } return false; } boolean drop_southeast( int i, int j ) { if( i < 1 ) return false; if( world[i-1][j+1] == 0 ) { world[i-1][j+1] = world[i][j]; world[i][j] = 0; return true; } return false; } boolean drop_southwest( int i, int j ) { if( i > width-2 ) return false; if( world[i+1][j+1] == 0) { world[i+1][j+1] = world[i][j]; world[i][j] = 0; return true; } return false; } int randomColor( ) { int r = ( 200 + (int) random( 55 ) ) & 0x000000ff; int g = ( 200 + (int) random( 55 ) ) & 0x000000ff; int b = ( 200 + (int) random( 55 ) ) & 0x000000ff; return( (r<<16) + (g<<8) + b ); }