2014年4月28日 星期一

Week 10 期中作品展示


改良打磚塊遊戲
利用手的左右來控制金箍棒的左右
以此進行遊戲
磚塊是豬的圖案
橫槓是金箍棒的圖案
第一關只有一排豬
全打完會進入下一關
每進入新的關卡增加一排豬
若球掉了則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; }

沒有留言:

張貼留言