2015年5月18日 星期一

第十三週


題目:水果忍者



第一階段:先做出一堆會自由跑來跑去的球(水果)
以下是程式碼:

------------------------------------------------------------------------

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();
  }
}



================================================================




第二階段:是做出一個隨著滑鼠移動的紅線,紅線碰到球體(水果)後球體會從白變紅
以下是程式碼:

------------------------------------------------------------------------

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); dead=false;
    }
     if( dist(X, Y, mouseX, mouseY)<50) dead=true;
  }
}
void mouseMoved(){
  strokeWeight(20);
  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();
  }
}



==============================================================




第三階段:用身體碰觸就能使球體發生碰撞事件
以下是程式碼:

------------------------------------------------------------------------

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+=1.98;
    if(X<-100 || X>740 || Y<-100 || Y>580){
      X=random(640); Y=random(240); VX=random(30)-15; VY=-random(30); 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(20);
  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();
  }
}



==============================================================



































第四階段:用滑鼠畫線,被切到的球就會分裂了
以下是程式碼:

------------------------------------------------------------------------

import SimpleOpenNI.*;
SimpleOpenNI openni;
PImage imgUser;
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*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(20);
  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)-15, -random(10));
}

void draw(){
  openni.update();
  image(openni.userImage(),0,0);
  for(int i=0; i<20; i++){
    fruit[i].draw();
    fruit[i].update();
  }
}

沒有留言:

張貼留言