改良打磚塊遊戲
利用手的左右來控制金箍棒的左右
以此進行遊戲
磚塊是豬的圖案
橫槓是金箍棒的圖案
第一關只有一排豬
全打完會進入下一關
每進入新的關卡增加一排豬
若球掉了則Game over
以此進行遊戲
磚塊是豬的圖案
橫槓是金箍棒的圖案
第一關只有一排豬
全打完會進入下一關
每進入新的關卡增加一排豬
若球掉了則Game over
程式碼
import de.voidplus.leapmotion.*; //leapmotion
LeapMotion leap; //leapmotion
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()
{
noStroke();
leap = new LeapMotion(this);
size(600, 600); //視窗尺寸
frameRate(60);
smooth();
m = new Minim(this);
player=m.loadFile("C://Users//USER//Desktop//leap motion//music.mp3");
player.play();
pig=loadImage("C://Users//USER//Desktop//leap motion//pig.png"); //讀入豬頭圖
ban=loadImage("C://Users//USER//Desktop//leap motion//ban.png"); //讀入金箍棒圖
back=loadImage("C://Users//USER//Desktop//leap motion//back.jpg"); //讀入背景圖
heart=loadImage("C://Users//USER//Desktop//leap motion//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);
/*
sensorValue = serial.read();
println(sensorValue);
}*/
for(Hand hand : leap.getHands())
{
hand.draw();
int hand_id = hand.getId();
PVector hand_position = hand.getPosition();
println("pos_x"+hand_position.x);
image(ban, (hand_position.x)-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>((hand_position.x)-barsize) && x< ((hand_position.x)-(1./3)*barsize) && dx>0 && dy>0)
{
dy*=-0.95;
dx*=-1.05;
}
else if (x>((hand_position.x)-barsize) && x< ((hand_position.x)-(1./3)*barsize) && dx<0 && dy>0)
{
dy*=-0.95;
dx*=1.05;
}
else if (x>((hand_position.x)+(1./3)*barsize) && x< ((hand_position.x)+barsize) && dx>0 && dy>0)
{
dy*=-0.95;
dx*=1.05;
}
else if (x>((hand_position.x)+(1./3)*barsize) && x< ((hand_position.x)+barsize) && dx<0 && dy>0)
{
dy*=-0.95;
dx*=-1.05;
}
else if (x>((hand_position.x)-(1./3)*barsize) && x< ((hand_position.x)+(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;
}
沒有留言:
張貼留言