完成期末作品
kinect設定
由左右肩來控制橫桿左右
遊戲畫面
利用手舉起及放下控制橫桿左右來打磚塊 (豬)
若全打完可以進入下一關
每加一關豬便多一行
右下角有計分
程式碼
float x = 300;
float y = 300;
float dx = 3;
float dy = -5;
int t;
int count=0;
int points=0; //得分
PImage pig; //豬頭的圖
PImage ball; //龍珠的圖
PImage ban; //金箍棒的圖
PImage back; //背景圖
float heightbounce=600;
// beginners level
boolean[][] inside=new boolean[1][11];
void setup() {
size(600,600);
frameRate(60);
smooth();
pig=loadImage("C://Users//S405-16//Desktop//pig.png"); //讀入豬頭圖
ban=loadImage("C://Users//S405-16//Desktop//ban.png"); //讀入金箍棒圖
ball=loadImage("C://Users//S405-16//Desktop///ball.png"); //讀入龍珠圖
back=loadImage("C://Users//S405-16//Desktop//back.jpg"); //讀入背景圖
}
void draw()
{
// t=0 to start new level
if(t==0)
{
background(back);
stroke(255);
image(pig, 0, 0,10,10); //顯示豬
// Display Level the first 2 seconds
if (count<120)
{
fill(255);
textAlign(CENTER);
text("LEVEL " + inside.length, 300, 500);
}
//draw moving point
strokeWeight(10); //球的大小
point(x,y);
strokeWeight(1); //打擊框框大小
randomSeed(1);
// box to be destroied
for (int j=0;j<inside.length;j++)
{
for (int k=0;k<inside[0].length;k++)
{
// distance between circles and moving point
float dx2=50+50*k-x;
float dy2=50+50*j-y;
float dis2=sqrt(pow(dx2,2)+pow(dy2,2));
// draw circle if outside
if (dis2>=25. && inside[j][k]==false)
{
//fill(0,255-k*10,200,150);
fill(255,random(255));
image(pig,25+50*k,50+50*j,50,50); //被打的豬豬豬豬
}
// check if moving point are inside circle and from which direction it comes
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++;
}
}
}
// bounce ball at y position of mouse
heightbounce=mouseY;
//Bar to bounce ball on
float barsize=75;
strokeWeight(3);
// line(mouseX-barsize,heightbounce,mouseX+barsize,heightbounce);
image(ban,mouseX-barsize,heightbounce-50,150,100);
strokeWeight(1);
// 打到邊界的話
if (x>=width || x<=0)
{
dx*=-1;
}
if (y<=0)
{
dy*=-1;
}
// change direction if moving point hits bar depending on where the point came from
if (y>=heightbounce && y<heightbounce+10)
{
//left part - left left - get more horisontal
if (x>(mouseX-barsize) && x< (mouseX-(1./3)*barsize) && dx>0 && dy>0)
{
dy*=-0.95;
dx*=-1.05;
}
//left part - right left - get more horisontal
else if (x>(mouseX-barsize) && x< (mouseX-(1./3)*barsize) && dx<0 && dy>0)
{
dy*=-0.95;
dx*=1.05;
}
//right part - left right - get more horisontal
else if (x>(mouseX+(1./3)*barsize) && x< (mouseX+barsize) && dx>0 && dy>0)
{
dy*=-0.95;
dx*=1.05;
}
//right part - right right - get more horisontal
else if (x>(mouseX+(1./3)*barsize) && x< (mouseX+barsize) && dx<0 && dy>0)
{
dy*=-0.95;
dx*=-1.05;
}
//middle part - just bounce - get more vertical
else if (x>(mouseX-(1./3)*barsize) && x< (mouseX+(1./3)*barsize) && dy>0) {
dy*=-1.05;
dx*=0.95;
}
}
//Print points
textAlign(RIGHT);
fill(255);
text(points, 550, 550);
//GAME OVER
if (y>height)
{
t=1;
fill(255);
textAlign(CENTER);
text("GAME OVER", 300, 300);
text("CLICK TO RESTART GAME", 300, 400);
text("PRESS SPACE TO RESTART LEVEL", 300, 500);
}
//Finished
if (checkinside()) {
t=2;
fill(255);
textAlign(CENTER);
text("FINISHED", 300, 300);
text("CLICK FOR NEXT LEVEL", 300, 400);
}
// incrementing moving point
x=x+dx;
y=y+dy;
count++;
}
// end of t=0
// if game over
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];
}
}
}
// if level compleated
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];
}
}
}
// Return true when all values are true - no false values left in array
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;
}
影片
電腦畫面 https://www.youtube.com/watch?v=rg3m9ZVuqzY&feature=youtu.be
同學1試玩 https://www.youtube.com/watch?v=x8u6bxpVkCc&feature=youtu.be
同學2試玩 https://www.youtube.com/watch?v=t4aSWVDEAsg


沒有留言:
張貼留言