2015年5月18日 星期一

第十三週

最終版的水果忍者
這是最終版的水果忍者
加上了重力角度
終於可以順利地像老師示範影片中切水果了
---------------------------------------------------------------------------------程式碼如下
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+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(dead==false && dist(X,Y,mouseX,mouseY)<50) {dead=true;
      angle=atan2(mouseY-pmouseY, mouseX-pmouseX);
    }
    if(dead==false && 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];
float fruitX=100, fruitY=400, fruitVX=4, fruitVY=-26;
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();
  }
}


這是水果忍者 雖然整個身體都變成了可以把水果殺死的遊戲
但是概念出來了~~~
還滿有趣的原來切水果是這樣做的!
----------------------------------------------------------------------------------程式碼如下
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.98;
    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];
float fruitX=100, fruitY=400, fruitVX=4, fruitVY=-26;
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();
  }
}

沒有留言:

張貼留言