顯示具有 期中作業 標籤的文章。 顯示所有文章
顯示具有 期中作業 標籤的文章。 顯示所有文章

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");
 }
 //  }
 }
 }
 */

期中影片












期中影片展示


點一下滑鼠開始遊戲


一開始速度為快速,速度會慢慢減速,而紅點的攻擊會隨機變大變小


分數在左下角,當紅點跑出外框會讓分數上升

期中作業_小畫筆


開始畫面,手指比1,即開始

遊戲畫面,只要到達右上角,即結束
game over,血條歸零,即結束!!!!!

通關完成畫面!!!!!!!


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


Week10,期中作業

勇闖迷宮




        原本過著平靜生活的小精靈,某天,被捲入時空裂縫中,玩家試著操控小精靈,帶領他朝著黃色光點回到原本的世界吧!


紅點為小精靈,被粉紅色漩渦捲入迷宮,從粉紅色漩渦開始前進吧!


觸發到陷阱!操縱小精靈靈活地閃避吧!


滾石迎面而來,玩家該怎麼做呢?


回家的路就在眼前,最後的地雷陣考驗運氣以及實力。


恭喜!小精靈回到原本平靜的生活囉!