*******************程式碼*******************
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;
}
}
}
沒有留言:
張貼留言