/** a color gradient sliding puzzle by Guru */ int[][] field; int state = 0; PFont font; void setup() { size(300,300); field = new int[4][4]; shuffle(); font = loadFont("MarkerFelt-Thin-48.vlw"); } void draw() { background(0); if (state == 0) { for( int i = 0; i < 4; i++ ) { for( int j=0; j < 4; j++) { if (field[i][j] >= 0) { fill( 0, 255 - field[i][j] * 8, 0 ); rect( width/4 * i, height/4 * j, width/4, height/4); } } } } else { fill(0,255,0); textFont( font, 48 ); text("You Won!", 70,150); textFont( font, 16 ); text("(Press any key to restart the game)", 50, 190); } } void mousePressed() { if ( state == 0 ) { int i = round( mouseX / (width/4)); int j = round( mouseY / (height/4)); move(i,j); if (check()) { state = 1; } } } void keyPressed() { if (state == 1 ) { shuffle(); state = 0; } } void move(int i, int j ) { if ( field[i][j] != -1 ) { for( int a = 0; a < 4; a++ ) { if ( field[a][j] == -1 ) { if ( a < i ) { for ( int t = a; t < i; t++) { field[t][j] = field[t+1][j]; } } else { for ( int t = a; t > i; t--) { field[t][j] = field[t-1][j]; } } field[i][j] = -1; return; } } for( int a = 0; a < 4; a++ ) { if ( field[i][a] == -1 ) { if ( a < j ) { for ( int t = a; t < j; t++) { field[i][t] = field[i][t+1]; } } else { for ( int t = a; t > j; t--) { field[i][t] = field[i][t-1]; } } field[i][j] = -1; return; } } } } boolean check() { int c =0; for( int j = 0; j < 4; j++ ) { for( int i=0; i < 4; i++) { println( "" + c + " " + field[i][j] ); if (c != field[i][j]) return false; c++; if (c == 15) c = -1; } } return true; } void shuffle() { int c = 0; for( int j = 0; j < 4; j++ ) { for( int i=0; i < 4; i++) { field[i][j] = c; c++; } } field[3][3] = -1; int x = 3; int y = 3; for(int i =0; i < 25; i++) { x = int(random(4)); move( x, y ); y = int(random(4)); move( x, y ); } }