https://youtu.be/byMYPmtLIrc
magician's hand
不用筆,只用比,就能寫出字。
2015年5月7日 星期四
2015年5月4日 星期一
2015年4月27日 星期一
期中作業:手指跳舞機
影片位置:(建議將喇叭音量調小再點開)
https://www.youtube.com/watch?v=m1-bHjUTskg
簡介:
設計理念是會有音樂播放,然後會有箭頭落下。依落下的方向用手揮動來代表上下左右。
程式:
//import de.voidplus.leapmotion.*;
import de.voidplus.leapmotion.*;
//LeapMotion leap;
import ddf.minim.*;
PImage img, img1, img2,img3,img4, down, left, right, fly;
PImage img7;
PImage img10;
PImage img11;
PImage img12;
PImage img13;
PImage img14;
PImage img15;
PImage img16;
PImage img17;
PImage img18;
PImage img19;
LeapMotion leap;
AudioPlayer player;
Minim minim;
int [] ran=new int[50];
float [] pointY=new float[50];
//int [] pointY=new int[50];
int h1, t1, t2, start, control, score, health, ground, time;
float speed, centerx, centery;
int n1, n2, n3, n4, n5, nu1, nu2, nu3, nu4, nu5, keys, cx, cy,count;
void setup() {
size(800, 600, P3D);
for (int i=0; i<50; i++) {
pointY[i]=-1;
ran[i]=0;
}
img = loadImage("floor.jpg");
fly = loadImage("fly.png");
img1 = loadImage("tree.jpg");
img2 = loadImage("floor1.jpg");
img3 = loadImage("floor2.jpg");
img4 = loadImage("floor3.jpg");
down = loadImage("down.png");
left = loadImage("left.png");
right = loadImage("right.png");
img7 = loadImage("protect.png");
img10 = loadImage("0.png");
img11 = loadImage("1.png");
img12 = loadImage("2.png");
img13 = loadImage("3.png");
img14 = loadImage("4.png");
img15 = loadImage("5.png");
img16 = loadImage("6.png");
img17 = loadImage("7.png");
img18 = loadImage("8.png");
img19 = loadImage("9.png");
minim = new Minim(this);
player = minim.loadFile("Lala.mp3", 2048);
player.play();
t1=0;
t2=0;
control=0;
start=0;
score=0;
health=10;
h1=0;
n1=0;
n2=0;
n3=0;
n4=0;
n5=0;
nu1=10;
nu2=100;
nu3=1000;
nu4=10000;
nu5=100000;
keys=0;
ground=0;
time=1;
speed=1.5;
leap = new LeapMotion(this);
leap = new LeapMotion(this).withGestures();
centerx=400;
centery=300;
count=0;
}
void draw() {
if (health==0)ground=1;
if (ground!=0)background(img2);
//image(img1, 0, 510, 800, 100);
if (ground==0) {
int fps = leap.getFrameRate();
for (Hand hand : leap.getHands ()) {
//hand.draw();
int hand_id = hand.getId();
PVector hand_position = hand.getPosition();
int n=hand.countFingers();
if (keys==0)
if (hand_position.x>=300&&hand_position.x<=500&&hand_position.y>=225&&hand_position.y<=375)
{
keys=1;
}
if (hand_position.x>=300&&hand_position.x<=500&&hand_position.y<=375)
{
centerx=hand_position.x;
centery=hand_position.y;
image(fly, centerx, centery, 60, 60);
background(img3);
} else background(img4);
if (keys==1)
{
if (hand_position.y>=375) {
control=1;
keys=0;
}
if (hand_position.x<=300) {
control=2;
keys=0;
}
if (hand_position.x>=500) {
control=3;
keys=0;
}
}
println("x:" + hand_position.x + " Y:" + hand_position.y + " + " + control);
}
for (int i=1; i<=health; i++) {
image(img7, 790-i*50, 10, 50, 50);
}
if (control>=1&&control<=3) {
for (int i=0; i<50; i++)
{
if (control==1)
if (pointY[i]>=470&&pointY[i]<=570&&ran[i]==1) {
ran[i]=0;
score+=speed*10;
h1=1;
control=0;
}
if (control==2)
if (pointY[i]>=470&&pointY[i]<=570&&ran[i]==2) {
ran[i]=0;
score+=speed*10;
h1=1;
control=0;
}
if (control==3)
if (pointY[i]>=470&&pointY[i]<=570&&ran[i]==3) {
ran[i]=0;
score+=speed*10;
h1=1;
control=0;
}
}
if (h1==0)health--;
control=0;
h1=0;
}
t1=0;
for (int i=0; i<50; i++)
if (pointY[i]<=100&&pointY[i]>=0)t1=1;
if (t1==1)t2=1;
else t2=0;
if (t2==0)
{
if(start==50)start=0;
ran[start]=int(random(1, 5));
pointY[start]=0;
start++;
}
for (int i=0; i<50; i++)
{
if (ran[i]==1)image(down, 350, pointY[i], 80, 80);
if (ran[i]==2)image(left, 200, pointY[i], 80, 80);
if (ran[i]==3)image(right, 500, pointY[i], 80, 80);
}
for (int i=0; i<50; i++)
if (ran[i]>=1&&ran[i]<=5)pointY[i]+=speed;
}
if(score>=9999)background(img);
for (int i=0; i<50; i++)
if (ran[i]>=1&&ran[i]<=3&&pointY[i]==600) {
ran[i]=0;
health--;
}
n1=score%nu1;
n2=score%nu2/10;
n3=score%nu3/100;
n4=score%nu4/1000;
if (n1==0)image(img10, 140, 10, 40, 40);
if (n1==1)image(img11, 140, 10, 40, 40);
if (n1==2)image(img12, 140, 10, 40, 40);
if (n1==3)image(img13, 140, 10, 40, 40);
if (n1==4)image(img14, 140, 10, 40, 40);
if (n1==5)image(img15, 140, 10, 40, 40);
if (n1==6)image(img16, 140, 10, 40, 40);
if (n1==7)image(img17, 140, 10, 40, 40);
if (n1==8)image(img18, 140, 10, 40, 40);
if (n1==9)image(img19, 140, 10, 40, 40);
if (n2==0)image(img10, 100, 10, 40, 40);
if (n2==1)image(img11, 100, 10, 40, 40);
if (n2==2)image(img12, 100, 10, 40, 40);
if (n2==3)image(img13, 100, 10, 40, 40);
if (n2==4)image(img14, 100, 10, 40, 40);
if (n2==5)image(img15, 100, 10, 40, 40);
if (n2==6)image(img16, 100, 10, 40, 40);
if (n2==7)image(img17, 100, 10, 40, 40);
if (n2==8)image(img18, 100, 10, 40, 40);
if (n2==9)image(img19, 100, 10, 40, 40);
if (n3==0)image(img10, 60, 10, 40, 40);
if (n3==1)image(img11, 60, 10, 40, 40);
if (n3==2)image(img12, 60, 10, 40, 40);
if (n3==3)image(img13, 60, 10, 40, 40);
if (n3==4)image(img14, 60, 10, 40, 40);
if (n3==5)image(img15, 60, 10, 40, 40);
if (n3==6)image(img16, 60, 10, 40, 40);
if (n3==7)image(img17, 60, 10, 40, 40);
if (n3==8)image(img18, 60, 10, 40, 40);
if (n3==9)image(img19, 60, 10, 40, 40);
if (n4==0)image(img10, 20, 10, 40, 40);
if (n4==1)image(img11, 20, 10, 40, 40);
if (n4==2)image(img12, 20, 10, 40, 40);
if (n4==3)image(img13, 20, 10, 40, 40);
if (n4==4)image(img14, 20, 10, 40, 40);
if (n4==5)image(img15, 20, 10, 40, 40);
if (n4==6)image(img16, 20, 10, 40, 40);
if (n4==7)image(img17, 20, 10, 40, 40);
if (n4==8)image(img18, 20, 10, 40, 40);
if (n4==9)image(img19, 20, 10, 40, 40);
//println(speed);
time++;
if (time%500==0)speed+=0.5;
//println("x:" + hand_position.x + " Y:" + hand_position.y);
}
//490 560
//void keyPressed() {
/*if (key=='s') control=1;
if (key=='a') control=2;
if (key=='d') control=3;
*/
// if (key=='s') keys=0;
// else keys=1;
//}
/*
void leapOnSwipeGesture(SwipeGesture g, int state) {
int id = g.getId();
Finger finger = g.getFinger();
PVector position = g.getPosition();
PVector position_start = g.getStartPosition();
PVector direction = g.getDirection();
float aspeed = g.getSpeed();
long duration = g.getDuration();
float duration_seconds = g.getDurationInSeconds();
switch(state) {
case 1: // Start
break;
case 2: // Update
break;
case 3: // Stop
println("SwipeGesture: "+id);
// if (keys==0){
if (position.y-position_start.y<position.x-position_start.x) {
if (position.x>position_start.x) {
control = 3;
println("right");
} else if (position.x<position_start.x)
{
control = 1;
println("left");
}
} else if (position.y>position_start.y) {
control = 2;
println("down");
}
// }
}
}
*/
https://www.youtube.com/watch?v=m1-bHjUTskg
簡介:
設計理念是會有音樂播放,然後會有箭頭落下。依落下的方向用手揮動來代表上下左右。
程式:
//import de.voidplus.leapmotion.*;
import de.voidplus.leapmotion.*;
//LeapMotion leap;
import ddf.minim.*;
PImage img, img1, img2,img3,img4, down, left, right, fly;
PImage img7;
PImage img10;
PImage img11;
PImage img12;
PImage img13;
PImage img14;
PImage img15;
PImage img16;
PImage img17;
PImage img18;
PImage img19;
LeapMotion leap;
AudioPlayer player;
Minim minim;
int [] ran=new int[50];
float [] pointY=new float[50];
//int [] pointY=new int[50];
int h1, t1, t2, start, control, score, health, ground, time;
float speed, centerx, centery;
int n1, n2, n3, n4, n5, nu1, nu2, nu3, nu4, nu5, keys, cx, cy,count;
void setup() {
size(800, 600, P3D);
for (int i=0; i<50; i++) {
pointY[i]=-1;
ran[i]=0;
}
img = loadImage("floor.jpg");
fly = loadImage("fly.png");
img1 = loadImage("tree.jpg");
img2 = loadImage("floor1.jpg");
img3 = loadImage("floor2.jpg");
img4 = loadImage("floor3.jpg");
down = loadImage("down.png");
left = loadImage("left.png");
right = loadImage("right.png");
img7 = loadImage("protect.png");
img10 = loadImage("0.png");
img11 = loadImage("1.png");
img12 = loadImage("2.png");
img13 = loadImage("3.png");
img14 = loadImage("4.png");
img15 = loadImage("5.png");
img16 = loadImage("6.png");
img17 = loadImage("7.png");
img18 = loadImage("8.png");
img19 = loadImage("9.png");
minim = new Minim(this);
player = minim.loadFile("Lala.mp3", 2048);
player.play();
t1=0;
t2=0;
control=0;
start=0;
score=0;
health=10;
h1=0;
n1=0;
n2=0;
n3=0;
n4=0;
n5=0;
nu1=10;
nu2=100;
nu3=1000;
nu4=10000;
nu5=100000;
keys=0;
ground=0;
time=1;
speed=1.5;
leap = new LeapMotion(this);
leap = new LeapMotion(this).withGestures();
centerx=400;
centery=300;
count=0;
}
void draw() {
if (health==0)ground=1;
if (ground!=0)background(img2);
//image(img1, 0, 510, 800, 100);
if (ground==0) {
int fps = leap.getFrameRate();
for (Hand hand : leap.getHands ()) {
//hand.draw();
int hand_id = hand.getId();
PVector hand_position = hand.getPosition();
int n=hand.countFingers();
if (keys==0)
if (hand_position.x>=300&&hand_position.x<=500&&hand_position.y>=225&&hand_position.y<=375)
{
keys=1;
}
if (hand_position.x>=300&&hand_position.x<=500&&hand_position.y<=375)
{
centerx=hand_position.x;
centery=hand_position.y;
image(fly, centerx, centery, 60, 60);
background(img3);
} else background(img4);
if (keys==1)
{
if (hand_position.y>=375) {
control=1;
keys=0;
}
if (hand_position.x<=300) {
control=2;
keys=0;
}
if (hand_position.x>=500) {
control=3;
keys=0;
}
}
println("x:" + hand_position.x + " Y:" + hand_position.y + " + " + control);
}
for (int i=1; i<=health; i++) {
image(img7, 790-i*50, 10, 50, 50);
}
if (control>=1&&control<=3) {
for (int i=0; i<50; i++)
{
if (control==1)
if (pointY[i]>=470&&pointY[i]<=570&&ran[i]==1) {
ran[i]=0;
score+=speed*10;
h1=1;
control=0;
}
if (control==2)
if (pointY[i]>=470&&pointY[i]<=570&&ran[i]==2) {
ran[i]=0;
score+=speed*10;
h1=1;
control=0;
}
if (control==3)
if (pointY[i]>=470&&pointY[i]<=570&&ran[i]==3) {
ran[i]=0;
score+=speed*10;
h1=1;
control=0;
}
}
if (h1==0)health--;
control=0;
h1=0;
}
t1=0;
for (int i=0; i<50; i++)
if (pointY[i]<=100&&pointY[i]>=0)t1=1;
if (t1==1)t2=1;
else t2=0;
if (t2==0)
{
if(start==50)start=0;
ran[start]=int(random(1, 5));
pointY[start]=0;
start++;
}
for (int i=0; i<50; i++)
{
if (ran[i]==1)image(down, 350, pointY[i], 80, 80);
if (ran[i]==2)image(left, 200, pointY[i], 80, 80);
if (ran[i]==3)image(right, 500, pointY[i], 80, 80);
}
for (int i=0; i<50; i++)
if (ran[i]>=1&&ran[i]<=5)pointY[i]+=speed;
}
if(score>=9999)background(img);
for (int i=0; i<50; i++)
if (ran[i]>=1&&ran[i]<=3&&pointY[i]==600) {
ran[i]=0;
health--;
}
n1=score%nu1;
n2=score%nu2/10;
n3=score%nu3/100;
n4=score%nu4/1000;
if (n1==0)image(img10, 140, 10, 40, 40);
if (n1==1)image(img11, 140, 10, 40, 40);
if (n1==2)image(img12, 140, 10, 40, 40);
if (n1==3)image(img13, 140, 10, 40, 40);
if (n1==4)image(img14, 140, 10, 40, 40);
if (n1==5)image(img15, 140, 10, 40, 40);
if (n1==6)image(img16, 140, 10, 40, 40);
if (n1==7)image(img17, 140, 10, 40, 40);
if (n1==8)image(img18, 140, 10, 40, 40);
if (n1==9)image(img19, 140, 10, 40, 40);
if (n2==0)image(img10, 100, 10, 40, 40);
if (n2==1)image(img11, 100, 10, 40, 40);
if (n2==2)image(img12, 100, 10, 40, 40);
if (n2==3)image(img13, 100, 10, 40, 40);
if (n2==4)image(img14, 100, 10, 40, 40);
if (n2==5)image(img15, 100, 10, 40, 40);
if (n2==6)image(img16, 100, 10, 40, 40);
if (n2==7)image(img17, 100, 10, 40, 40);
if (n2==8)image(img18, 100, 10, 40, 40);
if (n2==9)image(img19, 100, 10, 40, 40);
if (n3==0)image(img10, 60, 10, 40, 40);
if (n3==1)image(img11, 60, 10, 40, 40);
if (n3==2)image(img12, 60, 10, 40, 40);
if (n3==3)image(img13, 60, 10, 40, 40);
if (n3==4)image(img14, 60, 10, 40, 40);
if (n3==5)image(img15, 60, 10, 40, 40);
if (n3==6)image(img16, 60, 10, 40, 40);
if (n3==7)image(img17, 60, 10, 40, 40);
if (n3==8)image(img18, 60, 10, 40, 40);
if (n3==9)image(img19, 60, 10, 40, 40);
if (n4==0)image(img10, 20, 10, 40, 40);
if (n4==1)image(img11, 20, 10, 40, 40);
if (n4==2)image(img12, 20, 10, 40, 40);
if (n4==3)image(img13, 20, 10, 40, 40);
if (n4==4)image(img14, 20, 10, 40, 40);
if (n4==5)image(img15, 20, 10, 40, 40);
if (n4==6)image(img16, 20, 10, 40, 40);
if (n4==7)image(img17, 20, 10, 40, 40);
if (n4==8)image(img18, 20, 10, 40, 40);
if (n4==9)image(img19, 20, 10, 40, 40);
//println(speed);
time++;
if (time%500==0)speed+=0.5;
//println("x:" + hand_position.x + " Y:" + hand_position.y);
}
//490 560
//void keyPressed() {
/*if (key=='s') control=1;
if (key=='a') control=2;
if (key=='d') control=3;
*/
// if (key=='s') keys=0;
// else keys=1;
//}
/*
void leapOnSwipeGesture(SwipeGesture g, int state) {
int id = g.getId();
Finger finger = g.getFinger();
PVector position = g.getPosition();
PVector position_start = g.getStartPosition();
PVector direction = g.getDirection();
float aspeed = g.getSpeed();
long duration = g.getDuration();
float duration_seconds = g.getDurationInSeconds();
switch(state) {
case 1: // Start
break;
case 2: // Update
break;
case 3: // Stop
println("SwipeGesture: "+id);
// if (keys==0){
if (position.y-position_start.y<position.x-position_start.x) {
if (position.x>position_start.x) {
control = 3;
println("right");
} else if (position.x<position_start.x)
{
control = 1;
println("left");
}
} else if (position.y>position_start.y) {
control = 2;
println("down");
}
// }
}
}
*/
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;
}
}
}
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影片:
Week10,期中作業
勇闖迷宮
原本過著平靜生活的小精靈,某天,被捲入時空裂縫中,玩家試著操控小精靈,帶領他朝著黃色光點回到原本的世界吧!
紅點為小精靈,被粉紅色漩渦捲入迷宮,從粉紅色漩渦開始前進吧!
觸發到陷阱!操縱小精靈靈活地閃避吧!
滾石迎面而來,玩家該怎麼做呢?
回家的路就在眼前,最後的地雷陣考驗運氣以及實力。
恭喜!小精靈回到原本平靜的生活囉!
訂閱:
文章 (Atom)






