2014年6月23日 星期一

第十九周作業

這周為期末作業Demo

本組Demo影片成果 :

程式碼 :
import SimpleOpenNI.*;
import ddf.minim.*;
AudioPlayer BGM,SE;
Minim minim;
/*stage setting*/
float bx=200,by=200,bway=1;
float[] boardX = {  10, 100, 200, 300, 400};
float[] boardY= {50, 100, 200, 300, 400};
float[] boardX2 = {  10, 100, 200, 300, 400,400};
float[] boardY2= {400, 300, 200, 250, 350,400};
float[] boardX3 = {  10, 100, bx, 400,400};

float[] boardY3= {400, 300, 200 , 350,400};
PImage imgBG, imgBlend, imgUser,player,star,imgBord,imgDoor;
/*player information*/
float PX=430,PY=340;
float PVY=0,PGY=0,move;
/*stage1=menu 2=gaming1 3=win 4=lose 5=gaming2 6=gaming3*/
int stage=1,start=0;
int music=1;
color c1,c2,c3;
boolean bOnBoard=false;
int playtime=0;
/*menu elements*/
int x=200,y=100;
int way=1;
SimpleOpenNI openni;
void setup() {
  size(640+640, 480);
  imgDoor=loadImage("door.png");
  imgBord=loadImage("bord.jpg");
  imgBG=loadImage("b1.jpg");
  player=loadImage("playerR1.png");
  star = loadImage("star.png");
  imgBlend=createImage(640, 480, ARGB);
  imgBlend.loadPixels();
  star.loadPixels();
  //player.loadPixels();
  imgBlend.updatePixels();
  star.updatePixels();
  openni= new SimpleOpenNI(this);
  openni.enableDepth();
  openni.enableUser();
  /*MUSIC*/
  minim = new Minim(this);
  BGM = minim.loadFile("game.mp3");
  SE = minim.loadFile("SE.mp3");
 
}
void draw() {
  /*menu*/
  if (stage==1){
     if (music==1)
    {
        BGM.close();
        BGM=minim.loadFile("menu.mp3");
       // player.setGain(-20);
        BGM();
    }
    music=2;
 background(0);
 colorMode(HSB, 100);

  fill(18,50,100,50);
  noStroke();
  triangle(x-50, y, 0,480, x, y+50);
 // ellipseMode(CENTER);
  ellipse(x, y, 200, 200);
  textSize(32);
  colorMode(RGB, 100);
  fill(0);
  text("searchlight", 160, 120);
  x+=way;
  y+=way;
  if(x>640||y>480){way=-way;}
  if(x<0||y<0){way=-way;}

 
  }
  /*Gaming*/
  if(stage==2){
    if (music==2)
    {
        BGM.close();
        BGM=minim.loadFile("game.mp3");
       // player.setGain(-20);
        BGM();
    }
    music=3;
    playtime++;
    background(255);
    map();

    bOnBoard=false;
    if(PVY>0) PVY=2;
    PY += PVY;
    openni.update();
    image(imgBlend, 0, 0);
    imgUser = openni.userImage();
    image(imgUser, 640, 0);
    imgBlend.loadPixels();
    imgUser.loadPixels();
    move=random(20)+1;
    image(player,PX,PY);
    for (int i=0;i<640*480;i++) {
      color now=imgUser.pixels[i];
      if (!(red(now)==blue(now) && blue(now)==green(now))) imgBlend.pixels[i]=color(255, 255, 0, 0);
     else  imgBlend.pixels[i] = color(0,0,0);
    }
    for (int i=0;i<5;i++) {
     if( abs(PX - boardX[i]-30)<=50 && abs(PY-boardY[i])<=30){
      bOnBoard=true;
      PY=boardY[i]-30;
      PVY=0;
      }
    }
    c1 = get(int(PX)-31,int(PY));
    c2 = get(int(PX)+31,int(PY));
    if(bOnBoard==false) PVY+=0.98;
    if ( start==1&&c1 ==color(0,0,0) && c2 == color(0,0,0)){
      PY+=60;
    }
    imgBlend.updatePixels();
    println(playtime/30);
    if (PY>=450) {stage=4; music=4;}
   
  }
  if (stage==5)
  {
    playtime++;
    background(255);
    map2();
     bOnBoard=false;
    if(PVY>0) PVY=2;
    PY += PVY;
    openni.update();
    image(imgDoor,400,350,50,50);
    image(imgBlend, 0, 0);
    imgUser = openni.userImage();
    image(imgUser, 640, 0);
    imgBlend.loadPixels();
    imgUser.loadPixels();
    move=random(20)+1;
    image(player,PX,PY);
    for (int i=0;i<640*480;i++) {
      color now=imgUser.pixels[i];
      if (!(red(now)==blue(now) && blue(now)==green(now))) imgBlend.pixels[i]=color(255, 255, 0, 0);
     else  imgBlend.pixels[i] = color(0,0,0);
    }
    for (int i=0;i<5;i++) {
     if( abs(PX - boardX2[i]-30)<=50 && abs(PY-boardY2[i])<=30){
      bOnBoard=true;
      PY=boardY2[i]-30;
      PVY=0;
      }
    }
    c1 = get(int(PX)-31,int(PY));
    c2 = get(int(PX)+31,int(PY));
    if(bOnBoard==false) PVY+=0.98;
    if ( start ==1 && c1 ==color(0,0,0) && c2 == color(0,0,0)){
      PY+=50;
    }
    imgBlend.updatePixels();
    if (PY>480) {stage=4; music=4;}
   
  }
  /*game3*/
  if (stage==6){
    playtime++;
  background(255);
  image(imgBG,0,0);
    image(imgDoor,400,350,50,50);
  float[] boardX3 = {  10, 100, bx, 400,400};
  for (int i=0;i<5;i++) {
     bx+=bway;
     by+=bway;
    if(bx>640||by>480){bway=-bway;}
  if(bx<0||by<0){bway=-bway;}
    image(imgBord,boardX3[i], boardY3[i], 100, 10);
  }
   bOnBoard=false;
    if(PVY>0) PVY=2;
    PY += PVY;
    openni.update();
    image(imgBlend, 0, 0);
    imgUser = openni.userImage();
    image(imgUser, 640, 0);
    imgBlend.loadPixels();
    imgUser.loadPixels();
    move=random(20)+1;
    image(player,PX,PY);

   
  for (int i=0;i<640*480;i++) {
      color now=imgUser.pixels[i];
      if (!(red(now)==blue(now) && blue(now)==green(now))) imgBlend.pixels[i]=color(255, 255, 0, 0);
     else  imgBlend.pixels[i] = color(0,0,0);
    }
    for (int i=0;i<5;i++) {
     if( abs(PX - boardX3[i]-30)<=50 && abs(PY-boardY3[i])<=30){
      bOnBoard=true;
      PY=boardY3[i]-30;
      PVY=0;
      }
    }
    c1 = get(int(PX)-31,int(PY));
    c2 = get(int(PX)+31,int(PY));
    if(bOnBoard==false) PVY+=0.98;
    if ( start ==1 && c1 ==color(0,0,0) && c2 == color(0,0,0)){
      PY+=50;
    }
    imgBlend.updatePixels();
    if (PY>480) {stage=4; music=4;}
 
  }
  /*WIN */
  if (stage==3){
    if (music==3)
    {
        BGM.close();
        BGM=minim.loadFile("WIN.mp3");
       // player.setGain(-20);
        BGM();
    }
    size(640,480);
    background(0);
    imgBG=loadImage("END.jpg");
    image(imgBG,0,0);
    music=1;
    PX=430;
    PY=340;
   
  }
  /*LOSE*/
  if(stage==4) {
    if (music==4)
    {
        BGM.close();
        BGM=minim.loadFile("die.mp3");
       // player.setGain(-20);
        BGM();
    }
    music=1;
    PX=430;
    PY=340;
      background(0);
      imgBG=loadImage("lose.jpg");
      image(imgBG,0,0);
    }
}

void keyPressed()
{
    if (keyCode==RIGHT) {
      start=1;
      player=loadImage("playerR1.png");
      PX+=move;
    }
    if (keyCode==LEFT) {
      start=1;
      player=loadImage("playerL1.png");
      PX-=move;
    }
    if (bOnBoard && keyCode==UP){
    PVY=-16;
    if (stage==2 &&PX <10 ){ stage=5; PX = 20; PY= 360;}
    if( stage==5 &&abs(PX - boardX2[5]-30)<=50 && abs(PY-boardY2[5])<=30){
      stage=6;
      PX = 20;
      PY= 360;
    }
     if( stage==6 && abs(PX - boardX3[4]-30)<=50 && abs(PY-boardY3[4])<=30){
      stage=3;
      music=3;
      PX =430;
      PY= 340;
    }
    }
    if (stage==1 && key=='s'){stage=2;}
    if (stage==4 && key=='r') {
    stage=1;
    playtime=0;
    imgBG=loadImage("b1.jpg");
  }
  if (stage==3 && key=='r') {
    stage=1;
    playtime=0;
    imgBG=loadImage("b1.jpg");
  }
}

void map()
{
   image(imgBG,0,0);
   for (int i=0;i<5;i++) {
    fill(255,0,0);
    rect(10,10,10,50);
    ellipse(20,25,15,15);
    image(imgBord,boardX[i], boardY[i], 100, 10);
 
    }
 
}
void map2()
{
 
   image(imgBG,0,0);
   for (int i=0;i<6;i++) {
    image(imgBord,boardX2[i], boardY2[i], 100, 10);
   }
}

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

void BGM()
{
 BGM.loop();
}
void SE()
{
  SE.play();
}

沒有留言:

張貼留言