2015年4月27日 星期一

Week 10 期中作品

import de.voidplus.leapmotion.*;
LeapMotion leap;

import ddf.minim.*;
Minim minim;
AudioPlayer BkSong;

color [][]RectColor= {
  {
    #FF0000, #FF0000, #FF0000, #FF0000
  }
  ,
  {
    #FF5000, #FF5000, #FF5000, #FF5000
  }
  ,
  {
    #FFFF00, #FFFF00, #FFFF00, #FFFF00
  }
  ,
  {
    #00FF00, #00FF00, #00FF00, #00FF00
  }
  ,
  {
    255, 255, 255, 255
  }
  ,
  {
    #0000FF, #0000FF, #0000FF, #0000FF
  }
};

//move
int PreX=100, PreY=100,i;
boolean FirstMove=true, Counting=false;
int YSeatA,YSeatB,XSeatA,XSeatB;

int check;
boolean []CT= {
  true, true, true, true
};
int T=0;

boolean star[]= {
  false, false, false, false
};

int UDLR=8;

void setup() {
  size(600, 600);
  frameRate(12);
  minim = new Minim(this);
  BkSong = minim.loadFile("a.mp3");
  BkSong.loop();
  leap = new LeapMotion(this);

}
int Case ;
int []SitA= {
  2, 4, 0, 5
};
int []SitB= {
  0, 1, 2, 3
};
int FingerX, FingerY;
void draw() {

  background(0);

  if (leap==null)return;
  for (Hand hand : leap.getHands()) {
    // FINGERS
    for (Finger finger : hand.getFingers()) {
      FingerX=(int)finger.getPosition().x;
      FingerY=(int)finger.getPosition().y;
    }
  }


  turnUDLR();  
  turn();
  drawObj();
  butt();
  DoUDLR();

  fill(#00CEFF);
  ellipse(FingerX, FingerY,10, 10);


}

void turnUDLR(){
  switch (UDLR){
 
    case 0: // UpR
      int L[]={RectColor[SitA[3]][0],RectColor[SitA[3]][1]};
      for (int i=3; i>0; i--)for(int j=0;j<2;j++)RectColor[SitA[i]][j]=RectColor[SitA[i-1]][j];
      for(int i=0;i<2;i++)RectColor[SitA[0]][i]=L[i];
      break;
   
   case 1: // DowR
      int L2[]={RectColor[SitA[3]][2],RectColor[SitA[3]][3]};
      for (int i=3; i>0; i--)for(int j=2;j<4;j++)RectColor[SitA[i]][j]=RectColor[SitA[i-1]][j];
      for(int i=0;i<2;i++)RectColor[SitA[0]][i+2]=L2[i];
      break;
 
 
    case 2: // UpL
      int []F={RectColor[SitA[0]][0],RectColor[SitA[0]][1]};
      for (int i=0; i<3; i++)for(int j=0;j<2;j++)RectColor[SitA[i]][j]=RectColor[SitA[i+1]][j];
      for(int i=0;i<2;i++)RectColor[SitA[3]][i]=F[i];
      break;
   
     case 3: // DownL
      int []F2={RectColor[SitA[0]][2],RectColor[SitA[0]][3]};
      for (int i=0; i<3; i++)for(int j=2;j<4;j++)RectColor[SitA[i]][j]=RectColor[SitA[i+1]][j];
      for(int i=0;i<2;i++)RectColor[SitA[3]][i+2]=F2[i];
      break;
   
     case 4: // LD
      int []L3={RectColor[SitB[3]][0],RectColor[SitB[3]][2]};
      for (int i=3; i>0; i--)for(int j=0;j<4;j+=2)RectColor[SitB[i]][j]=RectColor[SitB[i-1]][j];
      for(int i=0;i<2;i++)RectColor[SitB[0]][i*2]=L3[i];
      break;
   
     case 5: // RD
      int []L4={RectColor[SitB[3]][1],RectColor[SitB[3]][3]};
      for (int i=3; i>0; i--)for(int j=1;j<4;j+=2)RectColor[SitB[i]][j]=RectColor[SitB[i-1]][j];
      for(int i=0;i<2;i++)RectColor[SitB[0]][i*2+1]=L4[i];
      break;
   
     case 6: // LU
      int []F3={RectColor[SitB[0]][0],RectColor[SitB[0]][2]};
      for (int i=0; i<3; i++)for(int j=0;j<4;j+=2)RectColor[SitB[i]][j]=RectColor[SitB[i+1]][j];
      for(int i=0;i<2;i++)RectColor[SitB[3]][i*2]=F3[i];
      break;
   
    case 7: // RU
      int []F4={RectColor[SitB[0]][1],RectColor[SitB[0]][3]};
      for (int i=0; i<3; i++)for(int j=1;j<4;j+=2)RectColor[SitB[i]][j]=RectColor[SitB[i+1]][j];
      for(int i=0;i<2;i++)RectColor[SitB[3]][i*2+1]=F4[i];
      break;

  }

  UDLR=8;

}

void DoUDLR(){
  if (FingerX>100&&FingerX<200&&FingerY>100&&FingerY<200) {
    YSeatA=FingerY/50; YSeatB=PreY/50;XSeatA=FingerX/50; XSeatB=PreX/50;
    if (FirstMove==true) {
      PreX=FingerX; PreY=FingerY;FirstMove=false;
    }
    else {
      if (FingerX-PreX>30&&YSeatA==YSeatB) {
        if (FingerY>=100&&FingerY<150)UDLR=0;// println("UpR");
        else if (FingerY>=150&&FingerY<200)UDLR=1; //println("DowR");
      }
      else if (FingerX-PreX<-30&&YSeatA==YSeatB) {
        if (FingerY>=100&&FingerY<150) UDLR=2;//println("UpL");
        else if (FingerY>=150&&FingerY<200) UDLR=3;//println("DowL");
      }
      if (FingerY-PreY>30&&XSeatA==XSeatB) {
        if (FingerX>=100&&FingerX<150) UDLR=4;//println("LD");
        else if (FingerX>=150&&FingerX<200) UDLR=5;//println("RD");
      }
      else if (FingerY-PreY<-30&&XSeatA==XSeatB) {
        if (FingerX>=100&&FingerX<150) UDLR=6;//println("LU");
        else if (FingerX>=150&&FingerX<200) UDLR=7;//println("RU");
      }
      PreX=FingerX;
      PreY=FingerY;
      FirstMove=false;
    }
  }
  else FirstMove=true;

}


void turn(){
    switch (Case) {
  case 1://
    int []F={RectColor[SitA[0]][0],RectColor[SitA[0]][1],RectColor[SitA[0]][2],RectColor[SitA[0]][3]};
    for (int i=0; i<3; i++)for(int j=0;j<4;j++)RectColor[SitA[i]][j]=RectColor[SitA[i+1]][j];
    for(int i=0;i<4;i++)RectColor[SitA[3]][i]=F[i];
    break;
  case 2:
    int L[]={RectColor[SitA[3]][0],RectColor[SitA[3]][1],RectColor[SitA[3]][2],RectColor[SitA[3]][3]};
    for (int i=3; i>0; i--)for(int j=0;j<4;j++)RectColor[SitA[i]][j]=RectColor[SitA[i-1]][j];
    for(int i=0;i<4;i++)RectColor[SitA[0]][i]=L[i];
    break;
  case 3:
    int []F2={RectColor[SitB[0]][0],RectColor[SitB[0]][1],RectColor[SitB[0]][2],RectColor[SitB[0]][3]};
    for (int i=0; i<3; i++)for(int j=0;j<4;j++)RectColor[SitB[i]][j]=RectColor[SitB[i+1]][j];
    for(int i=0;i<4;i++)RectColor[SitB[3]][i]=F2[i];
    break;
  case 4:
    int []L2={RectColor[SitB[3]][0],RectColor[SitB[3]][1],RectColor[SitB[3]][2],RectColor[SitB[3]][3]};
    for (int i=3; i>0; i--)for(int j=0;j<4;j++)RectColor[SitB[i]][j]=RectColor[SitB[i-1]][j];
    for(int i=0;i<4;i++)RectColor[SitB[0]][i]=L2[i];
    break;
  }

}

void drawObj(){
  stroke(0);
  // front
  fill(RectColor[0][0]);
  rect(100, 100, 50, 50);
  fill(RectColor[0][1]);
  rect(150, 100, 50, 50);
  fill(RectColor[0][2]);
  rect(100, 150, 50, 50);
  fill(RectColor[0][3]);
  rect(150, 150, 50, 50);

  //up
  fill(RectColor[3][0]);
  quad(150, 50, 200, 50, 175, 75, 125, 75);
  fill(RectColor[3][1]);
  quad(200, 50, 250, 50, 225, 75, 175, 75);
  fill(RectColor[3][2]);
  quad(125, 75, 175, 75, 150, 100, 100, 100);
  fill(RectColor[3][3]);
  quad(175, 75, 225, 75, 200, 100, 150, 100);

  //next
  fill(RectColor[5][0]);
  quad(200, 100, 225, 75, 225, 125, 200, 150);
  fill(RectColor[5][1]);
  quad(225, 75, 250, 50, 250, 100, 225, 125);
  fill(RectColor[5][2]);
  quad(200, 150, 225, 125, 225, 175, 200, 200);
  fill(RectColor[5][3]);
  quad(225, 125, 250, 100, 250, 150, 225, 175);

  //face 0
  fill(RectColor[0][0]);
  rect(50, 300, 50, 50);
  fill(RectColor[0][1]);
  rect(100, 300, 50, 50);
  fill(RectColor[0][2]);
  rect(50, 350, 50, 50);
  fill(RectColor[0][3]);
  rect(100, 350, 50, 50);

  //face 1
  fill(RectColor[1][0]);
  rect(250, 300, 50, 50);
  fill(RectColor[1][1]);
  rect(300, 300, 50, 50);
  fill(RectColor[1][2]);
  rect(250, 350, 50, 50);
  fill(RectColor[1][3]);
  rect(300, 350, 50, 50);

  //face 2
  fill(RectColor[2][0]);
  rect(450, 300, 50, 50);
  fill(RectColor[2][1]);
  rect(500, 300, 50, 50);
  fill(RectColor[2][2]);
  rect(450, 350, 50, 50);
  fill(RectColor[2][3]);
  rect(500, 350, 50, 50);

  //face 3
  fill(RectColor[3][0]);
  rect(50, 450, 50, 50);
  fill(RectColor[3][1]);
  rect(100, 450, 50, 50);
  fill(RectColor[3][2]);
  rect(50, 500, 50, 50);
  fill(RectColor[3][3]);
  rect(100, 500, 50, 50);

  //face 4
  fill(RectColor[4][0]);
  rect(250, 450, 50, 50);
  fill(RectColor[4][1]);
  rect(300, 450, 50, 50);
  fill(RectColor[4][2]);
  rect(250, 500, 50, 50);
  fill(RectColor[4][3]);
  rect(300, 500, 50, 50);

  //face 5
  fill(RectColor[5][0]);
  rect(450, 450, 50, 50);
  fill(RectColor[5][1]);
  rect(500, 450, 50, 50);
  fill(RectColor[5][2]);
  rect(450, 500, 50, 50);
  fill(RectColor[5][3]);
  rect(500, 500, 50, 50);

  //+
  fill(#9800FF);
  noStroke();
  rect(400, 100, 20, 60);
  rect(380, 120, 60, 20);
  fill(#FF0000);
  ellipse(350, 130, 30, 30);
  ellipse(470, 130, 30, 30);
  ellipse(410, 70, 30, 30);
  ellipse(410, 190, 30, 30);

}


void butt(){
    //button 1
  if (dist(FingerX, FingerY, 350, 130)<=30) {
    Case=5;
    if (CT[0]==true) {
      check=second();
      CT[0]=false;
      star[0]=true;
    } else if (star[0]==true) {
      T=second()>check? second()-check : second()+check-1;
      if (T%2==0) {
        Case=1;
        check=second();
      }
    }
    for (int i=0; i<4; i++) {
      if (i==0)continue;
      CT[i]=true;
      star[i]=false;
    }
  }

  //button 2
  if (dist(FingerX, FingerY, 470, 130)<=30) {
    Case=5;
    if (CT[1]==true) {
      check=second();
      CT[1]=false;
      star[1]=true;
    } else if (star[1]==true) {
      T=second()>check? second()-check : second()+check-1;
      if (T%2==0) {
        Case=2;
        check=second();
      }
    }
    for (int i=0; i<4; i++) {
      if (i==1)continue;
      CT[i]=true;
      star[i]=false;
    }
  }

  //button 3
  if (dist(FingerX, FingerY, 410, 70)<=30) {
    Case=5;
    if (CT[2]==true) {
      check=second();
      CT[2]=false;
      star[2]=true;
    } else if (star[2]==true) {
      T=second()>check? second()-check : second()+check-1;
      if (T%2==0) {
        Case=3;
        check=second();
      }
    }
    for (int i=0; i<4; i++) {
      if (i==2)continue;
      CT[i]=true;
      star[i]=false;
    }
  }

  //button 4
  if (dist(FingerX, FingerY, 410, 190)<=30) {
    Case=5;
    if (CT[3]==true) {
      check=second();
      CT[3]=false;
      star[3]=true;
    } else if (star[3]==true) {
      T=second()>check? second()-check : second()+check-1;
      if (T%2==0) {
        Case=4;
        check=second();
      }
    }
    for (int i=0; i<4; i++) {
      if (i==3)continue;
      CT[i]=true;
      star[i]=false;
    }
  }
}


DEMO影片:


沒有留言:

張貼留言