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影片:
沒有留言:
張貼留言