2015年1月18日 星期日

Final_影片及程式碼

影片:




*******************程式碼*******************
ARDUINO:
void setup(){
  Serial.begin(9600);
  pinMode(2,INPUT_PULLUP);
  pinMode(3,INPUT_PULLUP);
  pinMode(4,INPUT_PULLUP);
  pinMode(5,INPUT_PULLUP);
  pinMode(13,OUTPUT);
}
int now2=0,now=0,now3=0,now4=0;
void loop(){
  int pressButtonLeft = digitalRead(2);
  int pressButtonRight = digitalRead(3);
  int restart = digitalRead(5);
  int shoot = digitalRead(4);
  if(now==1 && pressButtonLeft==HIGH){//left
    digitalWrite(13,LOW);
    Serial.write('A');  
    now=0;
  }
  else if(now==0 && pressButtonLeft == LOW){
    digitalWrite(13, HIGH);
    Serial.write('a');
    now=1;
  }
  delay(10);

  if(now2==1 && pressButtonRight ==HIGH){//right
    digitalWrite(13,LOW);
    Serial.write('B');  
    now2=0;
  }
  if(now2==0 && pressButtonRight == LOW){
    digitalWrite(13, HIGH);
    Serial.write('b');
    now2=1;
  }
  delay(10);

  if(now3==1 && shoot ==HIGH){//shot
    digitalWrite(13,LOW);
    Serial.write('C');  
    now3=0;
  }
  if(now3==0 && shoot == LOW){
    digitalWrite(13, HIGH);
    Serial.write('c');
    now3=1;
  }
  delay(10);

  if(now4==1 && restart ==HIGH){//shot
    digitalWrite(13,LOW);
    Serial.write('D');  
    now4=0;
  }
  if(now4==0 && restart == LOW){
    digitalWrite(13, HIGH);
    Serial.write('d');
    now4=1;
  }
  delay(10);

}




PROCESSING:

import processing.serial.*;
import ddf.minim.*;
AudioPlayer player1, player2, player3;
Minim minim;//audio context
Serial myPort;
PImage plane[]=new PImage[3], imgBG, canon, bullet;
int pX[]= {
  0, 0, 0
}
, pY[]= {
  0, 0, 0
}
, cX[]= {
  375
}
, cY[]= {
  500
}
, bX[]= {
  387
}
, bY[]= {
  520
};
float pVX[]= {
  1, 1, 1
}
, pVY[]= {
  1, 1, 1
}
, bVY=2, bLife[]= {
  0
}
, pbX[]= {
  0, 0, 0
}
, pbY[]= {
  0, 0, 0
}
, pbv=1;
int shoot=0, gameover=-10, score=0;
void setup() {
  size(800, 600);
  myPort = new Serial(this, "COM3", 9600);
  imgBG=loadImage("sky.png");
  canon=loadImage("canon.png");
  bullet=loadImage("bullet.png");
  for (int i=0; i<3; i++)  plane[i]=loadImage("plane"+int(random(3))+".png");
  for (int i=0; i<3; i++) {//plane and planeBullet begin
    pX[i]=int(random(30))*25;
    pbX[i]=pX[i]+30;
    pY[i]=int(random(7))*25+25;
    pbY[i]=pY[i]+31;
  }
  minim = new Minim(this);
  player1 = minim.loadFile("BGM.mp3", 2048);
  player2 = minim.loadFile("bomb.mp3", 2048);
  player3 = minim.loadFile("shoot.mp3", 2048);
  player1.play();
}
void draw() {
  background(255);

  if (myPort.available()>0) {
    int a=myPort.read();
    if (a=='b') {
      cX[0]+=50;
      bX[0]+=50;
    }
    if (a=='a') {
      cX[0]-=50;
      bX[0]-=50;
    }
    if (a=='c')shoot++;
    if (a=='d') {
      gameover=-1;
      score=0;
    }
  }
  if (gameover>0) {//Gameover
    fill(255, 0, 0);
    rect(0, 0, 800, 600);
    textSize(100);
    fill(0);
    text("GameOver!", 125, 200);
    textSize(80);
    text("Score = "+score, 125, 300 );
    textSize(40);
    text("click backspace to replay", 125, 400 );
  } else {
    image(imgBG, 0, 50);
    image(bullet, bX[0], bY[0], 40, 40);
    image(canon, cX[0], cY[0], 80, 100);
    fill(0);
    textSize(18);
    text("use <- and -> to control canon location, click Ctrl to shoot.", 5, 20);
    for (int i=0; i<3; i++) {//hit
      if (abs(pX[i]-bX[0])<100 &&abs(pY[i]-bY[0])<15) {
        score+=1;
        pY[i]=-100;
        pbY[i]=-100;
        player2 = minim.loadFile("bomb.mp3", 2048);
        player2.play();
      }
    }
    text("Score = "+score, 5, 40);
    for (int i=0; i<3; i++) {//canon hit
      if (abs(pbX[i]-cX[0])<=20 &&pbY[i]>500 ) gameover++;
    }
    for (int i=0; i<3; i++) {//draw plane and planeBullet
      fill(0);
      ellipse(pbX[i], pbY[i], 10, 10);
      image(plane[i], pX[i], pY[i], 100, 60);
    }
    for (int i=0; i<3; i++) {//plane speed and pBspeed
      if (pX[i]>700) {
        pX[i]=0;
        pbX[i]=30;
        plane[i]=loadImage("plane"+int(random(3))+".png");
        pY[i]=int(random(7))*25+25;
        pVX[i]=1;
      } else if (pbY[i]>600) {
        pbY[i]=pY[i]+31;
        pbv=1;
      } else {
        pX[i]+=pVX[i];
        pbX[i]+=pVX[i]-0.02;
        pVX[i]+=0.05;
        pbY[i]+=pbv;
        pbv+=0.05;
      }
    }
    if (shoot>0) {
      //image(bullet,bX[0],bY[0],40,40);

      for (int j=0; j<1; j++) {//canonBullet speed
        if (bY[j]<30) {
          bX[j]=cX[0]+20;
          bY[j]=500;
          bVY=2;
          shoot=0;
        } else {
          bY[j]-=bVY;
          bVY+=0.5;
        }
      }
    }
  }
}
void keyPressed() {
  if (keyCode==RIGHT && cX[0]<725 && bY[0]<500) cX[0]+=50;
  else if (keyCode==RIGHT && cX[0]<725 ) {
    cX[0]+=50;
    bX[0]+=50;
  }
  if (keyCode==LEFT && cX[0]>0&& bY[0]<500) cX[0]-=50;
  else if (keyCode==LEFT && cX[0]>0) {
    cX[0]-=50;
    bX[0]-=50;
  }
  if (keyCode==CONTROL) {
    shoot++;
    player3 = minim.loadFile("shoot.mp3", 2048);
    player3.play();
  }
  if (keyCode==32) {
    gameover=0;
    score=0;
    for (int i=0; i<3; i++) {
      pbY[i]=0;
      pbX[i]=0;
      pX[i]=0;
      pY[i]=0;
    }
  }
}

沒有留言:

張貼留言