主題:小精靈
組員:04160152 謝佩軒 04160551 劉宛俞
說明:利用方向鍵控是小精靈移動,吃掉白點點,吃掉全部的白點點遊戲就獲勝。同時還要躲避鬼怪,如果被鬼怪碰到的話遊戲就結束了。
Youtube 影片
遊戲畫面
Processing
Serial myPort;
int [][]map={ {9,9,9,9,9,9,9,9,9 ,9,9,9,9,9,9,9,9,9,9 ,9,9,9,9,9,9,9,9,9,9},//9,10,10
{9,5,5,5,5,5,5,5,5 ,9,5,5,5,5,5,5,5,5,5 ,9,5,5,5,5,5,5,5,5,9},
{9,5,0,1,1,1,1,1,1 ,9,5,1,1,1,1,1,1,1,1 ,9,5,1,1,1,1,1,1,1,9},
{9,5,1,9,9,9,9,5,1 ,9,9,5,1,0,0,0,0,1,9 ,9,5,1,9,9,9,9,5,1,9},
{9,5,1,9,5,5,5,5,1 ,5,5,5,1,0,0,0,0,1,5 ,5,5,1,5,5,5,9,5,1,9}, //5
{9,5,1,9,5,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,9,5,1,9},
{9,5,1,9,5,1,1,1,9 ,5,1,9,9,9,9,9,9,9,5 ,1,9,5,1,1,1,9,5,1,9},
{9,5,1,9,9,9,5,1,9 ,5,1,9,9,9,9,9,9,9,5 ,1,9,5,1,9,9,9,5,1,9},
{9,5,1,5,5,5,5,1,5 ,5,1,5,5,5,5,5,5,5,0 ,1,5,5,1,5,5,5,5,1,9},
{9,5,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,9}, //10
{9,9,9,9,9,9,9,9,9 ,9,9,9,9,9,9,9,9,9,9 ,9,9,9,9,9,9,9,9,9,9} };
/// 9=wall , 5= no pass , 0=pacman , 1=food
import ddf.minim.*;
Minim minim;
AudioPlayer music;
AudioPlayer game;
AudioPlayer end;
AudioPlayer over;
PImage imgUP, imgDOWN, imgLEFT , imgRIGHT;
PImage imgMG, imgMP, imgMR , imgMY;
int dir=0,dx=0,dy=0;
void setup(){
size(870,330);
background(0);
imgUP=loadImage("up.JPG");
imgDOWN=loadImage("down.JPG");
imgRIGHT=loadImage("right.JPG");
imgLEFT=loadImage("left.JPG");
imgMG=loadImage("mos_green.png");
imgMR=loadImage("mos_red.png");
myPort = new Serial(this, "COM3", 115200);
minim = new Minim(this);
music = minim.loadFile("Intro.mp3",1024);//new SoundFile(this, "Intro.mp3");
game = minim.loadFile("PacMan.mp3",1024);
end = minim.loadFile("End.mp3",1024);
over = minim.loadFile("gameover.mp3",1024);
music.play();
game.pause();
end.pause();
over.pause();
}
float open=1, angle=0;
int now=0;
int pacX=2, pacY=2, pacVX=50 , pacVY=120;
int mX=14,mY=3,MX=16,MY=3;
int food=0, eatfood=0;
int time=0 , time0=0;
int state=0;
void draw(){
if(state==0){ ///homepage
///========pacman=========
background(0);
fill(255,255,0);
noStroke(); arc(pacVX,pacVY,70,70,0+angle+open,PI*2+angle-open);
pacVX+=1;
if(pacVX>=940) {pacVX=-70;}
now++;
open=abs ((now%60)/60.0-0.5);
///=======how to play button=========
fill(255);
textSize(28);
text("How To Play",350,220);
if(mousePressed && mouseX>350 && mouseX<520 && mouseY>200 && mouseY<225){
state=3;
}
///=======play game button=========
fill(255);
textSize(28);
text("Play Game",360,275);
if(mousePressed && mouseX>360 && mouseX<500 && mouseY>255 && mouseY<280){
state=1;
}
}///State_0, homepage
///========game Start=========
if(state==1){
music.pause();
game.play();
//------------around_wall---------
background(0);
for(int i=0;i<11;i++){
for(int j=0;j<29;j++){
if(map[i][j]==9) {fill(0,0,255); noStroke(); rect(j*30,i*30,30,30);}
}
}
//------------pacman---------
fill(255,255,0);
noStroke(); arc(pacX*30,pacY*30,30,30,0+angle+open,PI*2+angle-open);
now++;
open=abs ((now%60)/60.0-0.5);
//-----------monster----------
image(imgMG,mX*30-15,mY*30-15,40,40);
float a, b,c,d;
a=mX-pacX; b=mY-pacY;
c=abs(mX-pacX); d=abs(mY-pacY);
if(a>0 && c>d && map[mY][mX-1]<=1) mX--; //mos to left
else if(a<=0 && c>d && map[mY][mX+1]<=1) mX++; //mos to right
else if(b>0 && c<d && map[mY-1][mX]<=1) mY--; //mos to up
else if(b<=0 && c<d && map[mY+1][mX]<=1) mY++; //mos to down
//-----------Game over----------
if(mX==pacX && mY==pacY)
{state=4;}
///========pacman move=========
if(dx>0) dx-=3;
if(dx<0) dx+=3;
if(dy>0) dy-=3;
if(dy<0) dy+=3;
if(dx==0 && dy==0 && dir==1 && pacY-1<11 && map[pacY-1][pacX]<=1) {pacY--; angle=radians(270);dy=-30;} //up
if(dx==0 && dy==0 && dir==2 && pacY+1>1 && map[pacY+1][pacX]<=1) {pacY++;angle=radians(90);dy=30;}//down
if(dx==0 && dy==0 && dir==3 && pacX-1>1 && map[pacY][pacX-1]<=1) {pacX--;angle=radians(180);dx=-30;}//left
if(dx==0 && dy==0 && dir==4 && pacX+1<29 && map[pacY][pacX+1]<=1) {pacX++;angle=0;dx=30;}//right
if(map[pacY][pacX]==1) {map[pacY][pacX]=0; eatfood++;}
//-----------food----------
for(int i=0;i<11;i++){
for(int j=0;j<29;j++){
if(map[i][j]==1) {fill(255); noStroke(); ellipse(j*30,i*30, 10, 10);}
}
} ///eatfood=103
if(eatfood>=103) {state=2;}
}///state_1 game;
///========game End(state 2)=========
if(state==2){
game.pause();
end.play();
fill(255,0,0);
textSize(100);
///text("TIME:"+time, 250, 180);
text("WIN!!",330,180);
}
///========Game Over(state 4)=========
if(state==4){
game.pause();
over.play();
fill(255,0,0);
textSize(100);
///text("TIME:"+time, 250, 180);
text("GameOver!!",150,180);
}
///========how to Play(state 3)=========
if(state==3){
background(0);
fill(255); textSize(24);
text("Use the keybroad to control pacman move", 80, 80);
image(imgUP,400,120,60,60);
image(imgDOWN,400,190,60,60);
image(imgLEFT,330,190,60,60);
image(imgRIGHT,470,190,60,60);
fill(255,255,0); textSize(20);
text("Back", 800, 300);
if(mousePressed && mouseX>800 && mouseX<850 && mouseY>280 && mouseY<305){
state=0;
}
}/// state 3 how to play
}
void keyPressed(){
if(keyCode==UP) {dir=1;}
if(keyCode==DOWN) {dir=2;}
if(keyCode==LEFT) {dir=3;}
if(keyCode==RIGHT) {dir=4;}
}
沒有留言:
張貼留言