//Project4
//Muskan Srivastava
//11.6.04

//press 'z' to shuffle
//click to move images

boolean drawn = false;
int s = 20;
int x1,y1,x2,y2;
boolean pressed = false;

PImage[] imgs = new PImage[32];
PImage[] rand = new PImage[32];
PImage[] toDraw = new PImage[32];
int[] xA = new int[32];
int curDrag = -1;
int[] yA = new int[32];
int[] layer = new int[32];
int curLayer = 0;
int xnum = 8;
int ynum = 4;
boolean scrambled = false;
int offsetX = 0;
int offsetY = 0;


color clickColor;
int brushSize = 10;


void setup() {
  reset();
  size(600, 300);
  noStroke();
  load_ordered("sqr","jpg");
  randomize();
}

void reset() {
  int r = 0, t=0;
  for(int i = 0; i < imgs.length; i++, t++) {
    if((i)%8 == 0 && i > 0) {
        r++; 
        t=0;
    }
    layer[i] = 0;
    xA[i] = t * 75;
    println(r * 75);
    yA[i] = r * 75;
  }
  curLayer = 0;
  drawn = false;
}

void load_ordered(String name, String ext)
{
  for (int i = 0; i < 32; i++) {
    imgs[i] = loadImage(name + str(i+1) + "." + ext);
  }
}

void draw() {
  //if(!pressed && !drawn) {
  background(0);
  boolean drew[] = new boolean[32];
  int temp = 0;
  if(scrambled)
    toDraw = rand;
  else
    toDraw = imgs;
  while(temp <= curLayer) {
    for(int i = 0; i < imgs.length; i++ ) {
      if(layer[i] == temp) {
        image(toDraw[i], xA[i], yA[i]);
        drew[i] = true;
      }
    }
    temp++;
  }
  drawn = true;
 // }
}

void keyReleased()
{
  if (key == 'z' || key == 'Z') {
    scrambled = (scrambled == true) ? false : true;
    drawn = false;
    reset();
  }
}

void display_grid(PImage[] a, int across, int down)
{
  int c = 0;
  for (int y = 0; y < down; y++) {
    for (int x = 0; x < across; x++) {
        image(a[c], x*75, y*75);
        xA[c] = x*75;
        yA[c] = y*75;
      c++;
    }
  }
}

void randomize()
{
  int[] used = new int[imgs.length];
  for (int c = 0; c < imgs.length; c++) {
    int r = get_rand_index(used);
    rand[c] = imgs[r];
  }
}

int get_rand_index(int[] a)
{
  int r = int(random(a.length));
  if (in_array(r, a)) {
    r = get_rand_index(a);
  }
  return r;
}

boolean in_array(int c, int[] a)
{
  boolean yes = false;
  for (int i = 0; i < a.length; i++) {
    if (a[i] == c) {
      yes = true;
      print("yes");
      break;
    }
  }
  return yes;
}

void mousePressed() {
  {
    //clickColor = get(mouseX, mouseY);
  }
  if (!pressed) {
    pressed = true;
    x1 = int(mouseX-s/2);
    y1 = int(mouseY-s/2);
    x2 = s;
    y2 = s;
  }
}

void mouseReleased()
{
  pressed = false;
  curDrag = -1;
  draw();
}

void mouseDragged() {
  print(curDrag);
  int dragged; 
  int temp = -1;
  if(curDrag < 0) {
    for(int i = 0; i<imgs.length; i++) {
      if(mouseX < xA[i]+75 && mouseX > xA[i]) {
        if(mouseY < yA[i]+75 && mouseY > yA[i]) {
           
           if(layer[i] > temp) {
             curDrag = i;
             temp = layer[i];
             offsetX = (mouseX) - xA[i];
             offsetY = (mouseY) - yA[i];
             layer[i] = ++curLayer;
           }
        }
      }     
    }
  } else {
      int i = curDrag;
      //copy(xA[i], yA[i], 75, 75, int(xA[i]+mouseX%75), int(yA[i]+mouseY%75), 75, 75);
      xA[i] = mouseX - offsetX;
      yA[i] = mouseY - offsetY;
      image(toDraw[i], xA[i], yA[i]);
      curDrag = i;
  }
}

void keyPressed() {
  //if(key == '+') {
   // brushSize++;
  }


Project 4: Context
Extend an idea you've explored previously in your life, but adapt it to the context of an interactive system which requires the viewer to engage with the material.