Processing :
import ddf.minim.*;
Minim minim;
AudioPlayer player;
import processing.serial.*;
Serial myPort1;
Serial myPort2;
PImage imgA, imgB, imgBG ,imgOPBG;
PImage imgBomb, imgRock, imgBombBG;
int [][]grid=new int[100][100];
int state=0;
int remainTime=0;
void setup(){
size(800, 640);
minim = new Minim(this);
player = minim.loadFile("sd.mp3");
player.loop();
myPort1 = new Serial(this,"COM5",9600);
myPort2 = new Serial(this,"COM4",9600);
imgBG = loadImage("bg.jpg");
imgA = loadImage("player22.png");
imgB = loadImage("player1.png");
imgBomb = loadImage("bomb.png");
imgRock = loadImage("rock.png");
imgBombBG = loadImage("bombbg.jpg");
imgOPBG = loadImage("OPBG.jpg");
grid[0][0]=3; grid[9][7]=4;
grid[1][0]=3; grid[9][6]=4;
grid[0][1]=3; grid[8][7]=4;
for(int i=0;i<35;i++){
int a=int(random(10)), b=int(random(10));
while(grid[a][b]!=0){
a=int(random(10)); b=int(random(10));
}
grid[a][b]=2;
if(a==bombA[i] && b==bombB[i] || a==bombA[i]+1 && b==bombB[i] || a==bombA[i]-1 && b==bombB[i] || a==bombA[i] && b==bombB[i]+1 || a==bombA[i] && b==bombB[i]-1){
grid[a][b]=0;
}
}
grid[0][0]=0; grid[9][7]=0;
grid[1][0]=0; grid[9][6]=0;
grid[0][1]=0; grid[8][7]=0;
delay(100);
}
boolean boom=false;
int userA=9, userB=7;
int userC=0, userD=0;
int bombN=0;
int []bombA=new int[100];
int []bombB=new int[100];
int []bombS=new int[100];
int []bombT=new int[100];
//int Button=0;
//int XL, XR, YU, YD, Button;
int XXL, XXR, YYU, YYD;
void draw(){
println(frameRate);
getData();//put data in XX,YY,Button
if(state==0){
drawOP();
if(keyCode== ENTER) state=1;
}else if(state==1){
drawPlayer();
}
}
void drawPlayer(){
noStroke();
image(imgBG,0,0,width,height);
image(imgA,userA*80-20,userB*80-10,120,100);
image(imgB,userC*80-5,userD*80-5,90,90);
for(int i=0;i<bombN;i++){
int a=bombA[i] , b=bombB[i];
if(bombT[i]>0){
grid[a][b]=1;
image(imgBomb,bombA[i]*80+5, bombB[i]*80, 80, 80);
bombT[i]--;
if(bombT[i]==0) bombT[i]=-13;
}
if(bombT[i]<0){
for(int k=-bombS[i];k<=bombS[i];k++){
image(imgBombBG,(bombA[i]+k)*80, (bombB[i])*80, 80, 80);
image(imgBombBG,(bombA[i])*80, (bombB[i]+k)*80, 80, 80);
grid[a][b]=0;
if(grid[a+1][b]!=0){grid[a+1][b]=0;}
if(a-1>=0){if(grid[a-1][b]!=0)grid[a-1][b]=0;}
if(grid[a][b+1]!=0){grid[a][b+1]=0;}
if(b-1>=0){if(grid[a][b-1]!=0)grid[a][b-1]=0;}
if(userA==bombA[i] && userB==bombB[i] || userA==bombA[i]+1 && userB==bombB[i] || userA==bombA[i]-1 && userB==bombB[i] || userA==bombA[i] && userB==bombB[i]+1 || userA==bombA[i] && userB==bombB[i]-1)
{boom=true;}
if(userC==bombA[i] && userD==bombB[i] || userC==bombA[i]+1 && userD==bombB[i] || userC==bombA[i]-1 && userD==bombB[i] || userC==bombA[i] && userD==bombB[i]+1 || userC==bombA[i] && userD==bombB[i]-1)
{boom=true;}
if(userA==bombA[i] && userB==bombB[i] || userA==bombA[i]+1 && userB==bombB[i] || userA==bombA[i]-1 && userB==bombB[i] || userA==bombA[i] && userB==bombB[i]+1 || userA==bombA[i] && userB==bombB[i]-1){ userA=-3; userB=-3;}
if(userC==bombA[i] && userD==bombB[i] || userC==bombA[i]+1 && userD==bombB[i] || userC==bombA[i]-1 && userD==bombB[i] || userC==bombA[i] && userD==bombB[i]+1 || userC==bombA[i] && userD==bombB[i]-1){ userC=-3; userD=-3;}
}
bombT[i]++;
}
}
for(int x=0;x<10;x++){
for(int y=0;y<8;y++){
if(grid[x][y]==2) image(imgRock,x*80, y*80, 80, 80);
}
}
if(boom){
textSize(100);
fill(#FF4800); text("GameOver", 150,200);
}
}
void drawOP(){
image(imgOPBG,0,0,width,height);
fill(#FF0000);
textSize(50); text("PRESS ENTER TO START",120,450);
}
byte [] data1 = new byte[3];
byte [] data2 = new byte[3];
byte oldButton1=1, oldButton2=1;
void getData(){
if(myPort1.available()>0)
{
myPort1.readBytes(data1);
if(data1[0]<30){
if(userA-1>=0 && grid[userA-1][userB]==0)
userA--;
}
if(data1[0]>100){
if(userA+1<=9 && grid[userA+1][userB]==0)
userA++;
}
if(data1[1]<30){
if(userB-1>=0 && grid[userA][userB-1]==0)
userB--;
}
if(data1[1]>100){
if(userB+1<=7 && grid[userA][userB+1]==0)
userB++;
}
if(data1[2]==0 && oldButton1==1 ){
putBomb1();
}
oldButton1=data1[2];
}
if(myPort2.available()>0)
{
println(data1);
myPort2.readBytes(data2);
if(data2[0]<30){
if(userC-1>=0 && grid[userC-1][userD]==0)
userC--;
}
if(data2[0]>100){
if(userC+1<=9 && grid[userC+1][userD]==0)
userC++;
}
if(data2[1]<30){
if(userD-1>=0 && grid[userC][userD-1]==0)
userD--;
}
if(data2[1]>100){
if(userD+1<=7 && grid[userC][userD+1]==0)
userD++;
}
if(data2[2]==0 && oldButton2==1){
putBomb2();
}
oldButton2=data2[2];
}
}
void putBomb1(){
bombA[bombN]=userA; bombB[bombN]=userB;
bombS[bombN]=1; bombT[bombN]=25;
bombN++;
}
void putBomb2(){
bombA[bombN]=userC; bombB[bombN]=userD;
bombS[bombN]=1; bombT[bombN]=25;
bombN++;
}
Arduino :
Minim minim;
AudioPlayer player;
import processing.serial.*;
Serial myPort1;
Serial myPort2;
PImage imgA, imgB, imgBG ,imgOPBG;
PImage imgBomb, imgRock, imgBombBG;
int [][]grid=new int[100][100];
int state=0;
int remainTime=0;
void setup(){
size(800, 640);
minim = new Minim(this);
player = minim.loadFile("sd.mp3");
player.loop();
myPort1 = new Serial(this,"COM5",9600);
myPort2 = new Serial(this,"COM4",9600);
imgBG = loadImage("bg.jpg");
imgA = loadImage("player22.png");
imgB = loadImage("player1.png");
imgBomb = loadImage("bomb.png");
imgRock = loadImage("rock.png");
imgBombBG = loadImage("bombbg.jpg");
imgOPBG = loadImage("OPBG.jpg");
grid[0][0]=3; grid[9][7]=4;
grid[1][0]=3; grid[9][6]=4;
grid[0][1]=3; grid[8][7]=4;
for(int i=0;i<35;i++){
int a=int(random(10)), b=int(random(10));
while(grid[a][b]!=0){
a=int(random(10)); b=int(random(10));
}
grid[a][b]=2;
if(a==bombA[i] && b==bombB[i] || a==bombA[i]+1 && b==bombB[i] || a==bombA[i]-1 && b==bombB[i] || a==bombA[i] && b==bombB[i]+1 || a==bombA[i] && b==bombB[i]-1){
grid[a][b]=0;
}
}
grid[0][0]=0; grid[9][7]=0;
grid[1][0]=0; grid[9][6]=0;
grid[0][1]=0; grid[8][7]=0;
delay(100);
}
boolean boom=false;
int userA=9, userB=7;
int userC=0, userD=0;
int bombN=0;
int []bombA=new int[100];
int []bombB=new int[100];
int []bombS=new int[100];
int []bombT=new int[100];
//int Button=0;
//int XL, XR, YU, YD, Button;
int XXL, XXR, YYU, YYD;
void draw(){
println(frameRate);
getData();//put data in XX,YY,Button
if(state==0){
drawOP();
if(keyCode== ENTER) state=1;
}else if(state==1){
drawPlayer();
}
}
void drawPlayer(){
noStroke();
image(imgBG,0,0,width,height);
image(imgA,userA*80-20,userB*80-10,120,100);
image(imgB,userC*80-5,userD*80-5,90,90);
for(int i=0;i<bombN;i++){
int a=bombA[i] , b=bombB[i];
if(bombT[i]>0){
grid[a][b]=1;
image(imgBomb,bombA[i]*80+5, bombB[i]*80, 80, 80);
bombT[i]--;
if(bombT[i]==0) bombT[i]=-13;
}
if(bombT[i]<0){
for(int k=-bombS[i];k<=bombS[i];k++){
image(imgBombBG,(bombA[i]+k)*80, (bombB[i])*80, 80, 80);
image(imgBombBG,(bombA[i])*80, (bombB[i]+k)*80, 80, 80);
grid[a][b]=0;
if(grid[a+1][b]!=0){grid[a+1][b]=0;}
if(a-1>=0){if(grid[a-1][b]!=0)grid[a-1][b]=0;}
if(grid[a][b+1]!=0){grid[a][b+1]=0;}
if(b-1>=0){if(grid[a][b-1]!=0)grid[a][b-1]=0;}
if(userA==bombA[i] && userB==bombB[i] || userA==bombA[i]+1 && userB==bombB[i] || userA==bombA[i]-1 && userB==bombB[i] || userA==bombA[i] && userB==bombB[i]+1 || userA==bombA[i] && userB==bombB[i]-1)
{boom=true;}
if(userC==bombA[i] && userD==bombB[i] || userC==bombA[i]+1 && userD==bombB[i] || userC==bombA[i]-1 && userD==bombB[i] || userC==bombA[i] && userD==bombB[i]+1 || userC==bombA[i] && userD==bombB[i]-1)
{boom=true;}
if(userA==bombA[i] && userB==bombB[i] || userA==bombA[i]+1 && userB==bombB[i] || userA==bombA[i]-1 && userB==bombB[i] || userA==bombA[i] && userB==bombB[i]+1 || userA==bombA[i] && userB==bombB[i]-1){ userA=-3; userB=-3;}
if(userC==bombA[i] && userD==bombB[i] || userC==bombA[i]+1 && userD==bombB[i] || userC==bombA[i]-1 && userD==bombB[i] || userC==bombA[i] && userD==bombB[i]+1 || userC==bombA[i] && userD==bombB[i]-1){ userC=-3; userD=-3;}
}
bombT[i]++;
}
}
for(int x=0;x<10;x++){
for(int y=0;y<8;y++){
if(grid[x][y]==2) image(imgRock,x*80, y*80, 80, 80);
}
}
if(boom){
textSize(100);
fill(#FF4800); text("GameOver", 150,200);
}
}
void drawOP(){
image(imgOPBG,0,0,width,height);
fill(#FF0000);
textSize(50); text("PRESS ENTER TO START",120,450);
}
byte [] data1 = new byte[3];
byte [] data2 = new byte[3];
byte oldButton1=1, oldButton2=1;
void getData(){
if(myPort1.available()>0)
{
myPort1.readBytes(data1);
if(data1[0]<30){
if(userA-1>=0 && grid[userA-1][userB]==0)
userA--;
}
if(data1[0]>100){
if(userA+1<=9 && grid[userA+1][userB]==0)
userA++;
}
if(data1[1]<30){
if(userB-1>=0 && grid[userA][userB-1]==0)
userB--;
}
if(data1[1]>100){
if(userB+1<=7 && grid[userA][userB+1]==0)
userB++;
}
if(data1[2]==0 && oldButton1==1 ){
putBomb1();
}
oldButton1=data1[2];
}
if(myPort2.available()>0)
{
println(data1);
myPort2.readBytes(data2);
if(data2[0]<30){
if(userC-1>=0 && grid[userC-1][userD]==0)
userC--;
}
if(data2[0]>100){
if(userC+1<=9 && grid[userC+1][userD]==0)
userC++;
}
if(data2[1]<30){
if(userD-1>=0 && grid[userC][userD-1]==0)
userD--;
}
if(data2[1]>100){
if(userD+1<=7 && grid[userC][userD+1]==0)
userD++;
}
if(data2[2]==0 && oldButton2==1){
putBomb2();
}
oldButton2=data2[2];
}
}
void putBomb1(){
bombA[bombN]=userA; bombB[bombN]=userB;
bombS[bombN]=1; bombT[bombN]=25;
bombN++;
}
void putBomb2(){
bombA[bombN]=userC; bombB[bombN]=userD;
bombS[bombN]=1; bombT[bombN]=25;
bombN++;
}
Arduino :
void setup()
{
Serial.begin(9600); // 設置串口波特率
pinMode(2, INPUT_PULLUP);
//digitalWrite(2,HIGH);
}
byte data[3];
void loop()
{
int valX = analogRead(A0);
int valY = analogRead(A1);// 在針腳2讀取的邏輯狀態的值
int valButton = digitalRead(2);// 向串口發送數據,以逗號分隔
data[0]=valX/8;
data[1]=valY/8;
data[2]=valButton;
Serial.write(data, 3);
delay(50);// 下一次測量之前稍微延遲
}
{
Serial.begin(9600); // 設置串口波特率
pinMode(2, INPUT_PULLUP);
//digitalWrite(2,HIGH);
}
byte data[3];
void loop()
{
int valX = analogRead(A0);
int valY = analogRead(A1);// 在針腳2讀取的邏輯狀態的值
int valButton = digitalRead(2);// 向串口發送數據,以逗號分隔
data[0]=valX/8;
data[1]=valY/8;
data[2]=valButton;
Serial.write(data, 3);
delay(50);// 下一次測量之前稍微延遲
}
沒有留言:
張貼留言