2. 當周進度 : 改良程式 設計標題畫面 添加音樂等等
進度如下圖
這是標題畫面
目前遊戲完成度
程式碼如下 :
import SimpleOpenNI.*;
import ddf.minim.*;
AudioPlayer BGM,SE;
Minim minim;
/*stage setting*/
float bx=200,by=200,bway=1;
float[] boardX = { 10, 100, 200, 300, 400};
float[] boardY= {50, 100, 200, 300, 400};
float[] boardX2 = { 10, 100, 200, 300, 400,400};
float[] boardY2= {400, 300, 200, 250, 350,400};
float[] boardX3 = { 10, 100, bx, 400,400};
float[] boardY3= {400, 300, 200 , 350,400};
PImage imgBG, imgBlend, imgUser,player,star,imgBord,imgDoor;
/*player information*/
float PX=430,PY=340;
float PVY=0,PGY=0,move;
/*stage1=menu 2=gaming1 3=win 4=lose 5=gaming2 6=gaming3*/
int stage=1,start=0;
int music=1;
color c1,c2,c3;
boolean bOnBoard=false;
int playtime=0;
/*menu elements*/
int x=200,y=100;
int way=1;
SimpleOpenNI openni;
void setup() {
size(640+640, 480);
imgDoor=loadImage("door.png");
imgBord=loadImage("bord.jpg");
imgBG=loadImage("b1.jpg");
player=loadImage("playerR1.png");
star = loadImage("star.png");
imgBlend=createImage(640, 480, ARGB);
imgBlend.loadPixels();
star.loadPixels();
//player.loadPixels();
imgBlend.updatePixels();
star.updatePixels();
openni= new SimpleOpenNI(this);
openni.enableDepth();
openni.enableUser();
/*MUSIC*/
minim = new Minim(this);
BGM = minim.loadFile("game.mp3");
SE = minim.loadFile("SE.mp3");
}
void draw() {
/*menu*/
if (stage==1){
if (music==1)
{
BGM.close();
BGM=minim.loadFile("menu.mp3");
// player.setGain(-20);
BGM();
}
music=2;
background(0);
colorMode(HSB, 100);
fill(18,50,100,50);
noStroke();
triangle(x-50, y, 0,480, x, y+50);
// ellipseMode(CENTER);
ellipse(x, y, 200, 200);
textSize(32);
colorMode(RGB, 100);
fill(0);
text("searchlight", 160, 120);
x+=way;
y+=way;
if(x>640||y>480){way=-way;}
if(x<0||y<0){way=-way;}
}
/*Gaming*/
if(stage==2){
if (music==2)
{
BGM.close();
BGM=minim.loadFile("game.mp3");
// player.setGain(-20);
BGM();
}
music=3;
playtime++;
background(255);
map();
bOnBoard=false;
if(PVY>0) PVY=2;
PY += PVY;
openni.update();
image(imgBlend, 0, 0);
imgUser = openni.userImage();
image(imgUser, 640, 0);
imgBlend.loadPixels();
imgUser.loadPixels();
move=random(20)+1;
image(player,PX,PY);
for (int i=0;i<640*480;i++) {
color now=imgUser.pixels[i];
if (!(red(now)==blue(now) && blue(now)==green(now))) imgBlend.pixels[i]=color(255, 255, 0, 0);
else imgBlend.pixels[i] = color(0,0,0);
}
for (int i=0;i<5;i++) {
if( abs(PX - boardX[i]-30)<=50 && abs(PY-boardY[i])<=30){
bOnBoard=true;
PY=boardY[i]-30;
PVY=0;
}
}
c1 = get(int(PX)-31,int(PY));
c2 = get(int(PX)+31,int(PY));
if(bOnBoard==false) PVY+=0.98;
if ( start==1&&c1 ==color(0,0,0) && c2 == color(0,0,0)){
PY+=60;
}
imgBlend.updatePixels();
println(playtime/30);
if (PY>=450) {stage=4; music=4;}
}
if (stage==5)
{
playtime++;
background(255);
map2();
bOnBoard=false;
if(PVY>0) PVY=2;
PY += PVY;
openni.update();
image(imgDoor,400,350,50,50);
image(imgBlend, 0, 0);
imgUser = openni.userImage();
image(imgUser, 640, 0);
imgBlend.loadPixels();
imgUser.loadPixels();
move=random(20)+1;
image(player,PX,PY);
for (int i=0;i<640*480;i++) {
color now=imgUser.pixels[i];
if (!(red(now)==blue(now) && blue(now)==green(now))) imgBlend.pixels[i]=color(255, 255, 0, 0);
else imgBlend.pixels[i] = color(0,0,0);
}
for (int i=0;i<5;i++) {
if( abs(PX - boardX2[i]-30)<=50 && abs(PY-boardY2[i])<=30){
bOnBoard=true;
PY=boardY2[i]-30;
PVY=0;
}
}
c1 = get(int(PX)-31,int(PY));
c2 = get(int(PX)+31,int(PY));
if(bOnBoard==false) PVY+=0.98;
if ( start ==1 && c1 ==color(0,0,0) && c2 == color(0,0,0)){
PY+=50;
}
imgBlend.updatePixels();
if (PY>480) {stage=4; music=4;}
}
/*game3*/
if (stage==6){
playtime++;
background(255);
image(imgBG,0,0);
image(imgDoor,400,350,50,50);
float[] boardX3 = { 10, 100, bx, 400,400};
for (int i=0;i<5;i++) {
bx+=bway;
by+=bway;
if(bx>640||by>480){bway=-bway;}
if(bx<0||by<0){bway=-bway;}
image(imgBord,boardX3[i], boardY3[i], 100, 10);
}
bOnBoard=false;
if(PVY>0) PVY=2;
PY += PVY;
openni.update();
image(imgBlend, 0, 0);
imgUser = openni.userImage();
image(imgUser, 640, 0);
imgBlend.loadPixels();
imgUser.loadPixels();
move=random(20)+1;
image(player,PX,PY);
for (int i=0;i<640*480;i++) {
color now=imgUser.pixels[i];
if (!(red(now)==blue(now) && blue(now)==green(now))) imgBlend.pixels[i]=color(255, 255, 0, 0);
else imgBlend.pixels[i] = color(0,0,0);
}
for (int i=0;i<5;i++) {
if( abs(PX - boardX3[i]-30)<=50 && abs(PY-boardY3[i])<=30){
bOnBoard=true;
PY=boardY3[i]-30;
PVY=0;
}
}
c1 = get(int(PX)-31,int(PY));
c2 = get(int(PX)+31,int(PY));
if(bOnBoard==false) PVY+=0.98;
if ( start ==1 && c1 ==color(0,0,0) && c2 == color(0,0,0)){
PY+=50;
}
imgBlend.updatePixels();
if (PY>480) {stage=4; music=4;}
}
/*WIN */
if (stage==3){
if (music==3)
{
BGM.close();
BGM=minim.loadFile("WIN.mp3");
// player.setGain(-20);
BGM();
}
size(640,480);
background(0);
imgBG=loadImage("END.jpg");
image(imgBG,0,0);
music=1;
PX=430;
PY=340;
}
/*LOSE*/
if(stage==4) {
if (music==4)
{
BGM.close();
BGM=minim.loadFile("die.mp3");
// player.setGain(-20);
BGM();
}
music=1;
PX=430;
PY=340;
background(0);
imgBG=loadImage("lose.jpg");
image(imgBG,0,0);
}
}
void keyPressed()
{
if (keyCode==RIGHT) {
start=1;
player=loadImage("playerR1.png");
PX+=move;
}
if (keyCode==LEFT) {
start=1;
player=loadImage("playerL1.png");
PX-=move;
}
if (bOnBoard && keyCode==UP){
PVY=-16;
if (stage==2 &&PX <10 ){ stage=5; PX = 20; PY= 360;}
if( stage==5 &&abs(PX - boardX2[5]-30)<=50 && abs(PY-boardY2[5])<=30){
stage=6;
PX = 20;
PY= 360;
}
if( stage==6 && abs(PX - boardX3[4]-30)<=50 && abs(PY-boardY3[4])<=30){
stage=3;
music=3;
PX =430;
PY= 340;
}
}
if (stage==1 && key=='s'){stage=2;}
if (stage==4 && key=='r') {
stage=1;
playtime=0;
imgBG=loadImage("b1.jpg");
}
if (stage==3 && key=='r') {
stage=1;
playtime=0;
imgBG=loadImage("b1.jpg");
}
}
void map()
{
image(imgBG,0,0);
for (int i=0;i<5;i++) {
fill(255,0,0);
rect(10,10,10,50);
ellipse(20,25,15,15);
image(imgBord,boardX[i], boardY[i], 100, 10);
}
}
void map2()
{
image(imgBG,0,0);
for (int i=0;i<6;i++) {
image(imgBord,boardX2[i], boardY2[i], 100, 10);
}
}
void stop()
{
BGM.close();
minim.stop();
super.stop();
}
void BGM()
{
BGM.loop();
}
void SE()
{
SE.play();
}

沒有留言:
張貼留言