2018年11月1日 星期四

Week08_黃登煜

🔺期中作品
05160080 黃惠嘉
05160213 黃登煜
YouTube連結:
https://www.youtube.com/watch?v=zNcujIiCDS4&feature=youtu.be


說明:RiseUp是一個保護熱氣球的一個遊戲,右鍵按下開始按鈕就可以進入遊戲,利用滑鼠可以反彈敵人(石頭),為了增加難度,高度每超過70m*N敵人會越來越多,使玩家會更有挑戰性,當玩家打倒300個敵人後,會進入Goodjob畫面,如果無法打倒300個敵人,就會進入End的畫面並保留最佳成績,藉由高度越高敵人越多的小遊戲,會讓玩家想一而再的挑戰。


🔺期中作品程式碼
float balloonX=450,balloonY=700;
PImage imgbadsky,imgballoon,imgghost,imgdie;
PImage imgstartsky,imgcloud,imgstartbutton,imgdieballoon;
PImage imgfrisbee,imgriseup,imgsky,imgstone,imgback;
float []cloudX =new float[300];
float []cloudY =new float[300];
float []stoneX = new float[300];
float []stoneY = new float[300];
float []stoneVX = new float[300];
float []stoneVY = new float[300];
boolean []stoneFlying = new boolean[300];
int state=0;
import ddf.minim.*;
Minim minim;
AudioPlayer player1,player2,player3,player4,player5;
void reborn(int i){
  int direction=int(random(3));
  if(direction==0){
    stoneX[i]=0;
    stoneY[i]=random(400);
  }
  else if(direction==1){
    stoneX[i]=random(900);
    stoneY[i]=0;
  }else if(direction==2){
    stoneX[i]=900;
    stoneY[i]=random(400);
  }
  stoneVX[i]=(450-stoneX[i])/120;
  stoneVY[i]=(700-stoneY[i])/120;
  stoneFlying[i]=true;
}
void setup(){
  size(900,900);
  reborn(0);
  imgbadsky=loadImage("badsky.jpg");
  imgballoon=loadImage("balloon.png");
  imgdieballoon=loadImage("dieballoon.png");
  imgdie=loadImage("die.png");
  imgfrisbee=loadImage("frisbee.png");
  imgriseup=loadImage("riseup.png");
  imgsky=loadImage("sky.jpg");
  imgstartsky=loadImage("startsky.jpg");
  imgcloud=loadImage("cloud.png");
  imgstone=loadImage("stone.png");
  imgghost=loadImage("ghost.png");
  imgstartbutton=loadImage("startbutton.png");
  imgback=loadImage("back.png");
  imageMode(CENTER);
  for(int i=0;i<300;i++){
    cloudX[i]=random(0,900);
    cloudY[i]= i*-100;
  }
  minim = new Minim(this);
  player1 = minim.loadFile("GrandFantasia.mp3");
  player2 = minim.loadFile("hit.mp3");
  player3 = minim.loadFile("dieend.mp3");
  player4 = minim.loadFile("HappyBackground.mp3");
  player5 = minim.loadFile("WIN.mp3");
}
void draw(){
  if(state==0){
    Begin();
    player5.pause();
    player4.pause();
    player1.play();
  }else if(state==1){
    Start();
    player1.pause();
    player4.play();
  }else if(state==2){
    End();
    player4.pause();
    player3.play();
  }else if(state==3){
    player4.pause();
    player5.play();
    Goodjob();
  }
}
int i=0;
void Begin(){
  background(255);
  image(imgsky,width/2,height/2,width,height);
  if(900+i>300){
    image(imgballoon,400,900+i,500,500);
    i-=10;
  }
  else  image(imgballoon,400,300,500,500);
  image(imgriseup,450,175,500,500);
  image(imgstartbutton,450,700,200,150);
  if(abs(mouseX- 450)<100 && abs(700-mouseY)<75){
    if(mousePressed && (mouseButton == LEFT)){
      player4.rewind();
      state=1;
    }
  }
}
int z=0,a=500;
void Start(){
  background(255);
  if((a/50-10)<70){
    if(frameCount%60==0){
      for(int i=0;i<300;i++){
        if(stoneFlying[i]==false){
          reborn(i);
          println("("+i);
          break;
        }
      }
    }
  }
  else if((a/50-10)<140){
    if(frameCount%30==0){
      for(int i=0;i<300;i++){
        if(stoneFlying[i]==false){
          reborn(i);
          println("*"+i);
          break;
        }
      }
    }
  }
  else{
    if(frameCount%20==0){
      for(int i=0;i<300;i++){
        if(stoneFlying[i]==false){
          reborn(i);
          println(i);
          break;
        }
      }
    }
  }
  if(z>9){
    background(#81C7FB);
    for(int i=0;i<300;i++){
        image(imgcloud,cloudX[i],cloudY[i]+a,150,100);
   }
   a+=2;
  }
  z+=10;
  image(imgballoon,balloonX,balloonY,300,300);
  image(imgfrisbee,mouseX,mouseY,70,70);
  for(int i=0;i<300;i++){
    if(stoneFlying[i]==false) continue;
    image(imgstone,stoneX[i],stoneY[i],100,100);
    stoneX[i]+=stoneVX[i];
    stoneY[i]+=stoneVY[i];
    if(dist(stoneX[i],stoneY[i],450,700)<150){
      player3.rewind();
      stoneFlying[i]=false;
      state=2;
      break;
    }
    if(dist(mouseX,mouseY,stoneX[i],stoneY[i])<70){
      player2.rewind();
      player2.play();
      float normalX = stoneX[i]-mouseX;
      float normalY = stoneY[i]-mouseY;
      float len =sqrt(normalX*normalX+normalY*normalY);
      normalX/=len;
      normalY/=len;
      float dotlen = stoneVX[i]*normalX+stoneVY[i]*normalY;
      stoneVX[i]=stoneVX[i]+ -2*(dotlen * normalX);
      stoneVY[i]=stoneVY[i]+ -2*(dotlen * normalY);
      float pushLen =(50+35-len);
      stoneY[i]+= normalY*pushLen;
      stoneX[i]+= normalX*pushLen;
      if(i==299) {
        player5.rewind();
        state=3;
      }
    }
  }
  fill(#E68EFF); textSize(80); text((a/50-10)+"m", 30,80);
}
int w=0;
void End(){
  image(imgbadsky,width/2,height/2,width,height);
  image(imgdie,700,600,300,300);
  image(imgghost,500-w,400,300,300);
  image(imgback,800,800,100,100);
  if(dist(mouseX,mouseY,800,800)<50){
    if(mousePressed && (mouseButton == LEFT)){
      player1.rewind();
      state=0;
      a=500;
      w=0;
      i=0;
      reborn(0);
    }
  }
  fill(#AABCEA); textSize(80); text("best score:"+(a/50-10)+"m", 150,400);
  w+=10;
}
void Goodjob(){
  background(255);
  image(imgsky,width/2,height/2,width,height);
  if(900+i>300){
    image(imgballoon,400,900+i,500,500);
    i-=10;
  }
  else  image(imgballoon,400,300,500,500);
  image(imgback,800,800,100,100);
  if(dist(mouseX,mouseY,800,800)<50){
    if(mousePressed && (mouseButton == LEFT)){
      player1.rewind();
      state=0;
    }
  }
  fill(#FF0000); textSize(80); text("Good job~~", 200,650);
}

沒有留言:

張貼留言