2018年1月22日 星期一

Week 19 : 普通的ㄒㄆ的普通的筆記_ 期末展示



主題:小精靈
組員:04160152 謝佩軒 04160551 劉宛俞
說明:利用方向鍵控是小精靈移動,吃掉白點點,吃掉全部的白點點遊戲就獲勝。同時還要躲避鬼怪,如果被鬼怪碰到的話遊戲就結束了。

Youtube 影片


遊戲畫面


Processing 

import processing.serial.*;
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;} 

}


沒有留言:

張貼留言