2014年4月21日 星期一

第十週作業

1. 期中作品展示

2. 修正Bug與美化

3. 修正後程式碼如下 :

import ddf.minim.*;
import de.voidplus.leapmotion.*;
import java.util.Map;
AudioPlayer player,SE;
Minim minim;
LeapMotion leap;
PImage bar;
int music=1;
int stage=1;
float X=400,Y=250;
float move=1;
float moveX=random(-1,1),moveY=random(-1,1);
int n=0;
int point1=0;
int point2=0;
int ballX,ballY;
float fingerX,fingerY;
int getPoint=0;
void setup()
{
  size(800, 500, P3D);
  leap=new LeapMotion(this);
  imageMode(CENTER);
  bar = loadImage("bar.jpg");
  minim = new Minim(this);
  player = minim.loadFile("ST2.mp3");
  SE = minim.loadFile("SE.mp3");
}

void draw()
{
  if (stage==1)
  {
    if (music==1)
    {
        player.close();
        player=minim.loadFile("ST1.mp3");
       // player.setGain(-20);
        player();
    }
    music=2;
    background(0);
    fill(255);
    textSize(40);
    text("LEAP HOCKEY",275,200);
    textSize(20);
    text("Accel World",325,220);
    textSize(40);
    text("Press 's' To Start",250,350);
 
  }

  if (stage==2)
  {
    if(music==2)
      {
        player.close();
        player=minim.loadFile("ST2.mp3");
       // player.setGain(-20);
        player();
      }
   music=3;
   background(255);
   stroke(255,0,0);
   fill(255);
   ellipse(400,250,150,150);
   line(400,0,400,500);
 
   for(Hand hand : leap.getHands())
   {
        n=hand.countFingers();
     for(Finger finger : hand.getFingers())
     {
       PVector finger_position   = finger.getPosition();
       //finger.draw();
      // if (n<=2 && finger_position.x>0 && finger_position.x<200 || finger_position.x> 600)
        if (finger_position.x<400)
        {
          //ellipse(50,finger_position.y,25,25);
          image(bar,50,finger_position.y,25,60);
        }
        else
        {
          image(bar,750,finger_position.y,25,60);
        }
     
        fingerX = finger_position.x;
        fingerY = finger_position.y;
     }
   }
 
   X=X+moveX;
   Y=Y+moveY;
   stroke(255,255,255);
   fill(0,255,255);
   ellipse( X , Y, 55, 55);
   if (X<=0&&getPoint==0)
    {
      moveX=0;
      moveY=0;
      // moveX=-moveX;
      //moveX+=move;
      point2++;
      getPoint++;
    }
    else if (Y<=0)
    {
      SE.close();
      SE = minim.loadFile("SE.mp3");
      SE.play();
      moveY=-moveY;
      moveY+=move;
      if(moveX>0)moveX+=move;
      if(moveX<0)moveX-=move;
    }
    else if ( dist(50,fingerY,X,Y)<80)
    {
      moveX = - moveX;
      if(moveX>0)moveX+=move;
      if(moveX<0)moveX-=move;
      if(moveY>0)moveY+=move;
      if(moveY<0)moveY-=move;
    }
    else if ( dist(750,fingerY,X,Y)<80)
    {
      moveX = - moveX;
      if(moveX>0)moveX+=move;
      if(moveX<0)moveX-=move;
      if(moveY>0)moveY+=move;
      if(moveY<0)moveY-=move;
    }
    else if (X>=800&&getPoint==0)
    {
      moveX=0;
      moveY=0;
     // moveX=-moveX;
     // moveX-=move;
      point1++;
      getPoint++;
    }
    else if (Y>=500)
    {
      SE.close();
      SE = minim.loadFile("SE.mp3");
      SE.play();
      moveY=-moveY;
      moveY-=move;
      if(moveX>0)moveX+=move;
      if(moveX<0)moveX-=move;
    }
    fill(255,0,0);
    textSize(13);
    text("player1 point:"+point1,0,20);
    text("player2 point:"+point2,700,20);
    if(point1>=3||point2>=3) stage=3;
  }
  if (stage==3)
  {
      if(music==3)
      {
        player.close();
        player=minim.loadFile("ST3.mp3");
       // player.setGain(-20);
        player();
      }
      music=1;
      background(0);
      textSize(32);
      if(point1>=3) text("P1 Win!",300,250);
      else if(point2>=3) text("P2 Win!",300,250);
      fill(255,0,0);
      text("Go Back To Menu, Press 'a' ",200,350);
   }
}
void leapOnCircleGesture(CircleGesture g, int state){
  int       id               = g.getId();

  switch(state){
    case 1: // Start
      break;
    case 2: // Update
      break;
    case 3: // Stop
       // stage=1;
      println("CircleGesture: "+id);
   
      break;
}
}
void keyReleased() {
  if (key=='s'&& stage==1)
  {
    stage=2;
  }
  if (key=='a')
  {
    X=0;
    Y=0;
    moveX=0;
    moveY=0;
    point1=0;
    point2=0;
    stage=1;
  }
  if(key=='r'&& stage==2)
    {
      X=400;
      Y=250;
      getPoint=0;
      moveX=random(-1,1);
      moveY=random(-1,1);
    }
    if (key=='n' && stage==2) stage=3;
}

void stop()
{
  player.close();
  minim.stop();
  super.stop();
}

void player()
{
  player.loop();
}

4. 作品Demo影片

沒有留言:

張貼留言