2018年12月27日 星期四

Week16 期末作品

01.arduino



02.processing

import ddf.minim.*;
import ddf.minim.analysis.*;
import ddf.minim.effects.*;
import ddf.minim.signals.*;
import ddf.minim.spi.*;
import ddf.minim.ugens.*;
import processing.serial.*;
Serial myPort;

float[] zombieX=new float[8];
float[] zombieY=new float[8];
PImage imgZombie,imgBG,img,imgBG2;
int state=0;
int remainTime=0;
int score1=0;
int score2=0;

import ddf.minim.*;
Minim minim;
AudioPlayer player;

void reborn(int i){
  zombieX[i]=int (random(3))*135;
  zombieY[i]=10;
}

void setup(){
  size(400,600);
  myPort = new Serial(this,"COM7",9600);
  imgBG= loadImage("BG.jpg");
  img= loadImage("shot.jpg");
  imgBG2= loadImage("BG2.png");
  minim = new Minim(this);
  player = minim.loadFile("456.mp3");
  player.play();
  
  imgZombie=loadImage("zombie2.png");
  for(int i=0;i<8;i++){
    reborn(i);
    zombieY[i]=325-i*50;
  }
}
int old1=0, old2=0, old3=0;
int Button1=0,Button2=0,Button3=0;
void draw(){
  if(state==0){
    drawOP();
  }else if(state==1){
    drawPlayer();
  }else if(state==2){
    drawED();
  }
  getData();
}
byte [] data=new byte[3];
void getData(){
 if(myPort.available()>0){
  myPort.readBytes(data);
  old1=Button1;
  old2=Button2;
  old3=Button3;
  Button1=data[0];
  Button2=data[1];
  Button3=data[2];
  println(data);
  int press= -1;
  if(data[0]==1 && old1==0) press=1;
  else if(data[1]==1 && old2==0)press=2;
  else if(data[2]==1 && old3==0)press=3;
  
  if( press==1 && zombieX[0]==0) killOneZombie();
  else if( press==2 && zombieX[0]==135) killOneZombie();
  else if( press==3 && zombieX[0]==270) killOneZombie();
  else if(press!= -1 ) bad();
  
 }
}
void killOneZombie(){
  for(int i=0;i<8-1;i++){
    zombieX[i]=zombieX[i+1];
  }
  reborn(7);
  score1+=200;
  minim = new Minim(this);
  player = minim.loadFile("bang.wav");
  player.play();
}

void bad(){
 background(255,0,0); 
 score2+=100;
}

void keyPressed(){
  if(key=='1' && zombieX[0]==0) killOneZombie();
  else if(key=='2' && zombieX[0]==135) killOneZombie();
  else if(key=='3' && zombieX[0]==270) killOneZombie();
  else if(key=='z' && state==0) {state=1;remainTime=30*60;}
  else bad();
}

void drawOP(){
  image(imgBG2,0,0,width,height);
  fill(#FFFFFF);
  textSize(30); text("Press z to Play",95,335);
  textSize(26); text("Happy Halloween!",90,395);
}

void drawPlayer(){
  image(imgBG,0,0,width,height);
  image(img,0,480,400,120);
  for(int i=7;i>=0;i--){
    image(imgZombie, zombieX[i],zombieY[i]);
  }  
  fill(#FC0317); textSize(40); text((remainTime+59)/60,5,40);
  remainTime--;
  if(remainTime<=0) state=2;
}

void drawED(){
  image(imgBG,0,0,width,height);
  fill(#FC0317); text("    Game End\nPlus Score:"+score1,55,200);
  fill(#FC0317); text(" Minus Score:-"+score2,10,320);
  fill(#FC0317); text("Score:"+(score1-score2),140,445);
}


03.成品

沒有留言:

張貼留言