寫完程式碼並可以成功結合Arduino
Processing的程式碼:
import processing.serial.*;
Serial serial;
int sensorValue;
//音樂
import ddf.minim.*;
Minim m;
AudioPlayer player;
float x = 300;
float y = 300;
float dx = 3;
float dy = -5;
int t;
int bloom=3;
int n=0;
int count=0;
int points=0; //得分
PImage pig; //豬頭的圖
PImage ban; //金箍棒的圖
PImage back; //背景圖
PImage heart; //生命值
float heightbounce=450;
//層級
boolean[][] inside=new boolean[1][11];
void setup()
{
serial=new Serial(this, "COM4", 9600); //連結arduino
size(600, 600); //視窗尺寸
frameRate(60);
smooth();
m = new Minim(this);
player=m.loadFile("music.mp3");
player.play();
pig=loadImage("pig.png"); //讀入豬頭圖
ban=loadImage("ban.png"); //讀入金箍棒圖
back=loadImage("back.jpg"); //讀入背景圖
heart=loadImage("heart.png"); //讀入愛心
}
void draw()
{
if (t==0) //新級別
{
background(back); //背景
stroke(0);
if (count<120) //前兩秒顯示第幾關
{
fill(0); //填入黑色
textAlign(CENTER);
text("LEVEL " + inside.length, 300, 400); //顯示第幾關
}
strokeWeight(10); //球的大小
point(x, y); //顯示球球
strokeWeight(1); //打擊框框大小
randomSeed(1); //隨機
//打豬頭
for (int j=0;j<inside.length;j++)
{
for (int k=0;k<inside[0].length;k++)
{
//豬頭及球的距離
float dx2=50+50*k-x;
float dy2=50+50*j-y;
float dis2=sqrt(pow(dx2, 2)+pow(dy2, 2));
if (dis2>=25. && inside[j][k]==false) //畫豬
{
image(pig, 25+50*k, 50+50*j, 50, 50); //被打的豬豬豬豬
}
//關於反彈
else if (dx2<=(dis2*cos(PI/4))&& dy2<=-(dis2*sin(PI/4)) && inside[j][k]==false)
{
dy*=-1;
inside[j][k]=true;
points++;
}
else if (dx2<=(dis2*cos(PI/4)) && dy2>=(dis2*sin(PI/4)) && inside[j][k]==false)
{
dy*=-1;
inside[j][k]=true;
points++;
}
else if (dy2<=(dis2*sin(PI/4)) && dx2<=-(dis2*cos(PI/4)) && inside[j][k]==false)
{
dx*=-1;
inside[j][k]=true;
points++;
}
else if (dy2<=(dis2*sin(PI/4)) && dx2>=(dis2*cos(PI/4)) && inside[j][k]==false)
{
dx*=-1;
inside[j][k]=true;
points++;
}
}
}
float barsize=50;
strokeWeight(3);
if (serial.available()>0)
{
sensorValue = serial.read();
println(sensorValue);
}
image(ban, (sensorValue*4)-barsize, heightbounce-50, 150, 100);
//image(ban, mouseX-barsize, heightbounce-50, 150, 100);
strokeWeight(1);
// 打到邊界的話
if (x>=width || x<=0)
{
dx*=-1;
}
if (y<=0)
{
dy*=-1;
}
// 設定方位
if (y>=heightbounce && y<heightbounce+10)
{
if (x>((sensorValue*4)-barsize) && x< ((sensorValue*4)-(1./3)*barsize) && dx>0 && dy>0)
{
dy*=-0.95;
dx*=-1.05;
}
else if (x>((sensorValue*4)-barsize) && x< ((sensorValue*4)-(1./3)*barsize) && dx<0 && dy>0)
{
dy*=-0.95;
dx*=1.05;
}
else if (x>((sensorValue*4)+(1./3)*barsize) && x< ((sensorValue*4)+barsize) && dx>0 && dy>0)
{
dy*=-0.95;
dx*=1.05;
}
else if (x>((sensorValue*4)+(1./3)*barsize) && x< ((sensorValue*4)+barsize) && dx<0 && dy>0)
{
dy*=-0.95;
dx*=-1.05;
}
else if (x>((sensorValue*4)-(1./3)*barsize) && x< ((sensorValue*4)+(1./3)*barsize) && dy>0) {
dy*=-1.05;
dx*=0.95;
}
}
//顯示分數
textAlign(RIGHT);
fill(0);
text(points, 300, 350);
//遊戲結束
if (y>height)
{
if (bloom>1) //生命值
{
t=1;
fill(0);
textAlign(CENTER);
text("CLICK TO RESTART GAME", 300, 400);
text("PRESS SPACE TO RESTART LEVEL", 300, 500);
bloom--;
}
else
{
text("GAME OVER", 300, 300);
}
}
//完成關卡
if (checkinside()) {
t=2;
fill(0);
textAlign(CENTER);
text("FINISHED", 300, 300);
text("CLICK FOR NEXT LEVEL", 300, 400);
}
x=x+dx;
y=y+dy;
count++;
}
//遊戲結束
else if (t==1)
{
x = 300;
y = 300;
dx = 3;
dy = -5;
count=0;
points=0;
if (mousePressed==true)
{
t=0;
inside=new boolean[inside.length][inside[0].length];
}
if (keyPressed)
{
if (key == ' ')
{
t=0;
inside=new boolean[1][11];
}
}
}
//關卡完成
else
{
x = 300;
y = 300;
dx = 3;
dy = -5;
count=0;
if (mousePressed==true)
{
t=0;
inside=new boolean[inside.length+1][inside[0].length];
}
}
//生命值
if (bloom==3)
{
image(heart, 10, 500, 50, 50);
image(heart, 70, 500, 50, 50);
}
else if (bloom==2)
{
image(heart, 10, 500, 50, 50);
}
else if (bloom==1)
{
}
}
boolean checkinside()
{
for (int j=0;j<inside.length;j++)
{
for (int k=0;k<inside[0].length;k++)
{
if (inside[j][k] == false)
{
return false;
}
}
}
return true;
}
Arduino的程式碼:
int potPin = 0; // 可變電阻接在 pin 0 上
void setup()
{
Serial.begin(9600);
}
void loop()
{
int sensorValue = analogRead(potPin);
Serial.write(sensorValue/4);
delay(100);
}
沒有留言:
張貼留言