顯示具有 00160343_江昱德 標籤的文章。 顯示所有文章
顯示具有 00160343_江昱德 標籤的文章。 顯示所有文章

2015年6月29日 星期一

Week 18 期末作業 公園偷情


遊戲介紹:
有一位宅男叫做阿棠,
他因為忌妒情侶,
所以到公園看到情侶如果做出親密的動作,
就決定施暴,
而有一對情侶叫做小盧和小何,
他們在公園裡幽會,
他們該如何躲避阿棠的法眼呢?

看他開始畫面雙手拍一下,
即可進入遊戲,
在遊戲內雙手拍一下可以提升親密值,
親密值集滿即可破關。
遊戲內如果順利通過就會跑出結婚畫面,
遊戲內如果被阿棠發現就會送醫院。


這是遊戲開始畫面








遊戲中







親密的畫面







被阿棠施暴結果






過關的畫面


遊戲影片:



程式碼如下:

PImage img1, img2, img3, img4, Win, Los, star;
int BI=0, s, m, s2, m2, count=0;
import de.voidplus.leapmotion.*;
LeapMotion leap;

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

void setup() {
  size(500, 500, OPENGL);
  img1 = loadImage("img1.jpg");
  img2 = loadImage("img2.jpg");
  img3 = loadImage("img3.jpg");
  img4 = loadImage("img4.jpg");
  Win= loadImage("win.jpg");
  Los= loadImage("Los.jpg");
  star= loadImage("star.jpg");
  s2=second();
  m2=minute(); 
  S=(int)random(3)+2;
  background(255);
  leap = new LeapMotion(this);
  minim = new Minim(this);
  BkSong = minim.loadFile("a.mp3");
  BkSong.loop();
}
int []HandX={0,500};
boolean Clap=false;


int StaA, StaB;
boolean Loser=false;
boolean A=true, change=false;
int S;
boolean Game=false;
void draw() {
  int fps = leap.getFrameRate();
  int i=0, j=0;
  
  for (Hand hand : leap.getHands ()) {
    HandX[j++]=(int)hand.getPosition().x;

  }
  if (abs((int)HandX[0]-(int)HandX[1])<70&&j==2) Game=true;

  if (Game==false) image(star, 0, 0);
  else {

    background(255);
    if (BI==350)A=false;
    else if (BI==0)A=true;

    s = second();  // Values from 0 - 59
    m = minute(); 
    if (m2!=m) s+=60;
    if (s-s2==S) {
      if (change==true)change=false;
      else change=true;
      if (s>=60)s2=s-60;
      else s2=s;
      m2=m;
      S=(int)random(2)+2;
    }

    if (change==true) {
      if (A==true)image(img2, BI++, 300, img1.width*2/3, img1.height*2/3);
      else image(img2, BI--, 300, img1.width*2/3, img1.height*2/3);
    } else { 
      if (A==true)image(img1, BI++, 300, img1.width*2/3, img1.height*2/3);
      else image(img1, BI--, 300, img1.width*2/3, img1.height*2/3);
    }

    if (abs((int)HandX[0]-(int)HandX[1])<70) {
      image(img4, 20, 60, img4.width*3/2, img4.height*3/2);
      if (change==true) Loser=true;
      else if (StaA==0)count+=20;
      StaA=1;
    } else {
      image(img3, 20, 60, img3.width*3/2, img3.height*3/2);
      StaA=0;
    }
    noStroke();
    fill(#FF0000);
    rect(470, 350-count, 20, count);

    if (350-count<=10) image(Win, 0, 0);
    else if (Loser) image(Los, 0, 0);
  }

}

2015年5月25日 星期一

Week 14

1.
float angle=0;
void setup(){
  size(800,600, P3D); 
}
void draw(){
  background(255);
  pushMatrix();
    translate(width/2,height/2);
    rotateZ(angle/180.0);
    rect(0,0,100,100);
  popMatrix(); 
}
void mouseMoved(){
  int x=mouseX-pmouseX;
  int y=mouseY-pmouseY;
  if(x>0)  angle+=1;
  if(x<0)  angle-=1; 
}
void keyPressed(){
  if(key=='l')  angle++;
  if(key=='r')  angle--; 
}


2.
PImage imCar;
float angle=0,dx=0,dy=0,vel=1;
void setup(){
  size(800,600, P3D); 
  imCar=loadImage("car.jpg");
}
void draw(){
  background(255);
    for(int i=-1;i<=8;i++){
      for(int j=-1;j<=6;j++){
         rect(i*100+dx%100,j*100+dy%100,100,100);   
      }
    }
  pushMatrix();
    translate(width/2,height/2);
    rotateZ(angle);
    image(imCar,-100,-50,200,100);
  popMatrix(); 
  dx-=vel*cos(angle);
  dy-=vel*sin(angle);
}
void mouseMoved(){
  int x=mouseX-pmouseX;
  int y=mouseY-pmouseY;
  if(x>0)  angle+=1/40.0;
  if(x<0)  angle-=1/40.0; 
}
void keyPressed(){
  if(key=='l')  angle++;
  if(key=='r')  angle--;
  if(keyCode==UP)  vel*=1.1;
  if(keyCode==DOWN)  vel*=0.9;
  println("vel:"+vel); 
}


2015年5月18日 星期一

Week13

1.
import SimpleOpenNI.*;
SimpleOpenNI openni;
class Fruit{
  float X,Y,VX,VY;
  Fruit(float x,float y,float vx,float vy){
   X=x;Y=y;VX=vx;VY=vy;
  }
  void draw(){
   ellipse(X,Y,50,50);
  }
  void update(){
   X+=VX;Y+=VY;VY+=1.98;
   if(X<-100 || X>740 || Y<-100 || Y>580){
     X=random(640);Y=random(240);VX=random(30)-15;VY=-random(30);
   }
  }
}
Fruit fruit[] = new Fruit[20];
void setup(){
  size(640,480);
  openni = new SimpleOpenNI(this);
  openni.enableDepth();
  openni.enableUser();
  for(int i=0;i<20;i++)
     fruit[i] = new Fruit( random(640),random(240),random(30)-15,-random(30));  
}
void draw(){
   openni.update();
   image(openni.userImage(),0,0);
   for(int i=0;i<20;i++){
     fruit[i].draw();
     fruit[i].update();
   }
}


2.
import SimpleOpenNI.*;
SimpleOpenNI openni;
class Fruit{
  float X,Y,VX,VY;
  boolean dead=false;
  Fruit(float x,float y,float vx,float vy){
   X=x;Y=y;VX=vx;VY=vy; 
  }
  void draw(){
   if(dead) fill(255,0,0);
   else fill(255);
   ellipse(X,Y,50,50); 
  }
  void update(){
   X+=VX;Y+=VY;VY+=1.98;
   if(X<-100 || X>740 || Y<-100 || Y>580){
     X=random(640);Y=random(240);VX=random(30)-15;VY=-random(30);
   } 
   if(dist(X,Y,mouseX,mouseY)<50)dead=true;
  }
}
void mouseMoved(){
   strokeWeight(30);stroke(255,0,0); line(mouseX,mouseY,pmouseX,pmouseY);
   strokeWeight(1);stroke(0); 
}
Fruit fruit[] = new Fruit[20];
void setup(){
  size(640,480);
  openni = new SimpleOpenNI(this);
  openni.enableDepth();
  openni.enableUser();
  for(int i=0;i<20;i++)
     fruit[i] = new Fruit( random(640),random(240),random(30)-15,-random(30));     
}
void draw(){
   openni.update();
   image(openni.userImage(),0,0);
   for(int i=0;i<20;i++){
     fruit[i].draw();
     fruit[i].update();
   } 
}

3.
import SimpleOpenNI.*;
SimpleOpenNI openni;
class Fruit{
  float X,Y,VX,VY;
  boolean dead=false;
  Fruit(float x,float y,float vx,float vy){
   X=x;Y=y;VX=vx;VY=vy; dead=false;
  }
  void draw(){
   if(dead) fill(255,0,0);
   else fill(255);
   ellipse(X,Y,50,50); 
  }
  void update(){
   X+=VX;Y+=VY;VY+=0.68;
   if(X<-100 || X>740 || Y<-100 || Y>580){
     X=random(640);Y=random(240);VX=random(10)-5;VY=-random(10);dead=false;
   } 
   if(dist(X,Y,mouseX,mouseY)<50)dead=true;
   if(X>0 && X<640 && Y>0 && Y<480 && openni.userImage().pixels[int(X)+int(Y)*640]==color(0,0,255))dead=true;
  }
}
void mouseMoved(){
   strokeWeight(30);stroke(255,0,0); line(mouseX,mouseY,pmouseX,pmouseY);
   strokeWeight(1);stroke(0); 
}
Fruit fruit[] = new Fruit[20];
void setup(){
  size(640,480);
  openni = new SimpleOpenNI(this);
  openni.enableDepth();
  openni.enableUser();
  for(int i=0;i<20;i++)
     fruit[i] = new Fruit( random(640),random(240),random(10)-5,-random(10));     
}
void draw(){
   openni.update();
   image(openni.userImage(),0,0);
   for(int i=0;i<20;i++){
     fruit[i].draw();
     fruit[i].update();
   } 
}


4.
import SimpleOpenNI.*;
SimpleOpenNI openni;
class Fruit{
  float X,Y,VX,VY,split=0,angle=0;
  boolean dead=false;
  Fruit(float x,float y,float vx,float vy){
   X=x;Y=y;VX=vx;VY=vy; dead=false;
  }
  void draw(){
   if(dead){ fill(255,0,0);
   arc(X+split,Y,50,50,angle,angle+PI,CHORD);
   arc(X-split,Y,50,50,angle+PI,angle+PI*2,CHORD);
  }
  else {fill(255);ellipse(X,Y,50,50);} 
}
  void update(){
   X+=VX;Y+=VY;VY+=0.68;
   if(X<-100 || X>740 || Y<-100 || Y>580){
     X=random(640);Y=random(240);VX=random(10)-5;VY=-random(10);dead=false;split=0;
   } 
   if(dist(X,Y,mouseX,mouseY)<50){
     dead=true;
     angle=atan2(mouseY-pmouseY,mouseX-pmouseX);
   }
   if(X>0 && X<640 && Y>0 && Y<480 && openni.userImage().pixels[int(X)+int(Y)*640]==color(0,0,255)){
     dead=true;
   }
   if(dead)split+=2;
  }
}
void mouseMoved(){
   strokeWeight(30);stroke(255,0,0); line(mouseX,mouseY,pmouseX,pmouseY);
   strokeWeight(1);stroke(0); 
}
Fruit fruit[] = new Fruit[20];
void setup(){
  size(640,480);
  openni = new SimpleOpenNI(this);
  openni.enableDepth();
  openni.enableUser();
  for(int i=0;i<20;i++)
     fruit[i] = new Fruit( random(640),random(240),random(10)-5,-random(10));     
}
void draw(){
   openni.update();
   image(openni.userImage(),0,0);
   for(int i=0;i<20;i++){
     fruit[i].draw();
     fruit[i].update();
   } 
}



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影片:


2015年3月16日 星期一

Week04作業




1
import de.voidplus.leapmotion.*;
LeapMotion leap;
void setup(){
 size(600,600, P3D);
 leap = new LeapMotion(this); 
}
float groundDir=0;
void draw(){
  background(255);
  for(int i=-10;i<=10;i++){
     for(int j=-10;j<=10;j++){
        pushMatrix();
        translate(300,300);
        rotateX(radians(70));
        rotateZ(radians(groundDir));
        translate(i*30,j*30);
        box(30);
        popMatrix();
     }
  }
  for(Hand hand : leap.getHands()){
    hand.draw();
    float angle = hand.getYaw();
    PVector pos = hand.getPosition();
    translate(pos.x,pos.y,pos.z);
    rotateY(-radians(angle));
    fill(128);stroke(0);box(100);
    groundDir=-angle;  
  }
}


2
import de.voidplus.leapmotion.*;
LeapMotion leap;
void setup(){
 size(600,600, P3D);
 leap = new LeapMotion(this); 
}
float nowX=0,nowY=0,nowA=0;
void draw(){
  nowY+=cos(nowA);nowX+=sin(nowA);
  background(255);
  for(int i=-10;i<=10;i++){
     for(int j=-10;j<=10;j++){
        pushMatrix();
        translate(300,300);
        rotateX(radians(70));
        rotateZ(nowA);
        translate(i*200+nowX,j*200+nowY,0);
        fill(255);box(200);
        popMatrix();
     }
  }
  for(Hand hand : leap.getHands()){
    hand.draw();
    float angle = hand.getYaw();
    PVector pos = hand.getPosition();
    nowA +=radians(-angle/40);  
    translate(pos.x,pos.y,pos.z);
    rotateY(-radians(angle));
    fill(128);stroke(0);box(100);
  }
}


期中作業:
做出一種船在海上行駛躲避障礙物的遊戲,
再加上射擊功能,可以擊破障礙物,
然後以走過的距離來計分。