2015年6月29日 星期一

Week 18

期末作品 - 成果圖




import SimpleOpenNI.*;
import ddf.minim.*;

AudioPlayer player;
AudioPlayer gear;
Minim minim;
SimpleOpenNI openni;

PImage imgBG;
PImage imgBlue;
PImage imgStart;
int score=0;

void setup() {
  size(800,600, P3D);
  imgBG = loadImage("15043987.jpg");
  imgStart = loadImage("123.png");
  imgBlue = createImage(640, 480, ARGB);
  openni = new SimpleOpenNI(this);
  openni.enableDepth();
  openni.enableUser();
  openni.enableRGB();
  minim = new Minim(this);
  player = minim.loadFile("sl.mp3");
  player.play();
}

float ballX0=250, ballY0=100, ballZ0=0, ballX2=350, ballY2=200, ballZ2=300;
//float ballX0=400, ballY0=300, ballZ0=0, ballX2=320, ballY2=240, ballZ2=100;
float t=0;

void draw() {
  openni.update();
  image(imgBG, 0, 0, 800, 600);
  image(openni.rgbImage(), 0, 0, 120, 90);//position
  image(openni.userImage(), 0, 90, 120, 90);//position


  PImage imgUser=openni.userImage();
  imgUser.loadPixels();
  imgBlue.loadPixels();

  for (int i=0; i<640*480; i++) {
    if (imgUser.pixels[i]==color(0, 0, 255)) imgBlue.pixels[i] = color(255, 128, 128, 200);
    else imgBlue.pixels[i]=color(128, 128, 128, 0);
  }

   if(state==2){
     image(imgStart, 0, 0, 800, 600);
    if(keyPressed==true){
     state-=2;
    } 
   }
   

   else if (state==0) {

    //copy
    imgBlue.updatePixels();
    //image(imgBlue, 40, 250, 600, 300);//pink people
    image(imgBlue,100, 250, 600, 300);
    pushMatrix();
    noStroke();
    lights();
    float ballX = lerp(ballX0, ballX2, t);
    float ballY = lerp(ballY0, ballY2, t);
    float ballZ = lerp(ballZ0, ballZ2, t);
    translate(150, 270);
    translate(ballX, ballY, -24+ballZ);
    sphere(30);
    popMatrix();
    text("Score:" + score, 350, 100);
    textSize(25); 

    t+=0.01;

    if (state!=1 && t>=1) {
      newBall();
      //score--;
      t=0;
    }

    if (t>=0.99) {
      hit(ballX, ballY);

      println(score);
    }
  } 
   
   else if (state==1) {

    textSize(100); 
    fill(255, 0, 0);
    text("GAME OVER", 100, 100);

    text("SCORE:"+score, 200, 200);
  }
}

void newBall() {
  ballX2 = random(640);
  ballY2 = random(480);
}

int state = 2;

boolean hit(float x, float y) {
  int yy=(int)y*480/270;
  int xx=(int)x*640/500;
  imgBlue.loadPixels();
  gear = minim.loadFile("067.mp3");
  gear.play();
  if (imgBlue.pixels[yy*640+xx]==color(128, 128, 128, 0)) {
    //dead
    state++; 
    t=0;
    //score-=1;
    return true;
  } else {
    score++;
    return false;
  }
}


沒有留言:

張貼留言