2020年5月29日 星期五

Hello World_Week14

20200529 程設會考練習&簡易版憤怒鳥


今天老師先複習了程設會考的題目 還有考試

再來教了怎麼在P語言裡使用音樂

一開始先打開P語言

之後按下Sketch 再來選擇Import Library 然後點擊Add Library



就會出現底下這個畫面



再來搜尋sound 就會出現以下這些選項

我們要選的是Minim 然後按下Install



下載好之後前面就會出現一個綠色勾勾



再來回到一開始的畫面

先按下File 再點擊Examples



出現底下這個畫面後 

先按下Contributed Libraries前面的+ 再按下Minim前面的+



然後按下Basics前面的+ 再選擇PlayAFile



這樣就會出現一大堆程式碼



這個程式跑起來之後會長這樣



按下鍵盤的任何一個鍵後 音樂就會開始播放

而且白色的線會跟著音樂動 像是聲波的樣子

綠色的線則是跟著音樂播的進度向右移動



再來我們要把上面那一大串的程式簡化

先擷取重要的部分留下來 然後把憤怒鳥的音樂加進去

這樣就可以播放背景音樂了!



import ddf.minim.*;//使用外掛
Minim minim;//物件 minim
AudioPlayer player;//物件 player
void setup()
{
  minim=new Minim(this);
  player=minim.loadFile("song.mp3");//載入song.mp3
  player.play();//播放音樂
}
void draw()
{

}

--------------------------------------------------------------------------------------------------------------------------

再來要把播放音樂的程式加到我們上星期做的憤怒鳥遊戲裡





import ddf.minim.*;//使用外掛
Minim minim;//物件 minim
AudioPlayer player;//物件 player
PImage imgBird;
void setup()
{
  size(500,400);
  imgBird=loadImage("bird.png");
  imageMode(CENTER);//讓滑鼠在圖片中間
  minim=new Minim(this);
  player=minim.loadFile("song.mp3");//載入song.mp3
  player.play();//播放音樂
}
float birdX=100,birdY=300,oldX,oldY,vx=0,vy=0;
//oldX=舊的x坐標 oldY=舊的y坐標
//一開始x方向的速度=0(vx=0) 一開始y方向的速度=0(vy=0)
//if(boolen變數) 成立(true)or不成立(false)
boolean bMoving=false;//一開始bMoving不成立(bird不移動)
void draw()
{
  background(255);//清背景,才不會有殘影
  image(imgBird,birdX,birdY,100,100);//image(照片,x坐標,y坐標,寬,高);
  if(bMoving) line(mouseX,mouseY,oldX,oldY);
  //如果bMoving成立(bird移動) 就從(mouseX,mouseY)畫線到(oldX,oldY)
  birdX+=vx;//x方向的速度=vx
  birdY+=vy;//y方向的速度=vy
  if(birdX>500-50||birdX<50) vx=-vx;//如果撞到牆就反彈
  if(birdY>400-50||birdY<50) vy=-vy;//如果撞到牆就反彈
}
void mouseReleased()//滑鼠放開
{
  bMoving=false;//bMoving不成立(bird不移動)
  vx=(oldX-mouseX)/10;//vx(x方向的速度)=舊的x坐標-滑鼠的x坐標
  vy=(oldY-mouseY)/10;//vy(y方向的速度)=舊的y坐標-滑鼠的y坐標
}
void mousePressed()//滑鼠按下
{
  if(dist(mouseX,mouseY,birdX,birdY)<50)//如果滑鼠有點到bird(距離夠近)
  {
    bMoving=true;//bMoving成立(bird移動)
    oldX=birdX;//舊的x坐標=現在bird的x坐標
    oldY=birdY;//舊的y坐標=現在bird的y坐標
  }
}
void mouseDragged()//滑鼠拖曳
{
  if(bMoving)//如果bMoving成立
  {
    birdX=mouseX;//bird的x坐標=滑鼠的x坐標
    birdY=mouseY;//bird的y坐標=滑鼠的y坐標
  }
}

--------------------------------------------------------------------------------------------------------------------------

再來要把豬加到遊戲裡





import ddf.minim.*;//使用外掛
Minim minim;//物件 minim
AudioPlayer player;//物件 player
PImage imgBird,imgPig;
float []pigX=new float[20];//有20個空格可以放pig的x座標
float []pigY=new float[20];//有20個空格可以放pig的y座標
int pigN=0;//一開始沒有pig
void setup()
{
  size(500,400);
  imgBird=loadImage("bird.png");
  imgPig=loadImage("pig.gif");
  imageMode(CENTER);//讓滑鼠在圖片中間
  minim=new Minim(this);
  player=minim.loadFile("song.mp3");//載入song.mp3
  player.play();//播放音樂
}
float birdX=100,birdY=300,oldX,oldY,vx=0,vy=0;
//oldX=舊的x坐標 oldY=舊的y坐標
//一開始x方向的速度=0(vx=0) 一開始y方向的速度=0(vy=0)
//if(boolen變數) 成立(true)or不成立(false)
boolean bMoving=false;//一開始bMoving不成立(bird不移動)
void draw()
{
  background(255);//清背景,才不會有殘影
  for(int i=0;i<pigN;i++)
  {
    image(imgPig,pigX[i],pigY[i],100,100);//image(照片,x坐標,y坐標,寬,高);
  }
  image(imgBird,birdX,birdY,100,100);//image(照片,x坐標,y坐標,寬,高);
  if(bMoving) line(mouseX,mouseY,oldX,oldY);
  //如果bMoving成立(bird移動) 就從(mouseX,mouseY)畫線到(oldX,oldY)
  birdX+=vx;//x方向的速度=vx
  birdY+=vy;//y方向的速度=vy
  if(birdX>500-50||birdX<50) vx=-vx;//如果撞到牆就反彈
  if(birdY>400-50||birdY<50) vy=-vy;//如果撞到牆就反彈
}
void mouseReleased()//滑鼠放開
{
  bMoving=false;//bMoving不成立(bird不移動)
  vx=(oldX-mouseX)/10;//vx(x方向的速度)=舊的x坐標-滑鼠的x坐標
  vy=(oldY-mouseY)/10;//vy(y方向的速度)=舊的y坐標-滑鼠的y坐標
}
void mousePressed()//滑鼠按下
{
  if(mouseButton==RIGHT)//按下滑鼠右鍵
  {
    pigX[pigN]=mouseX;//pig的x座標=滑鼠的x座標
    pigY[pigN]=mouseY;//pig的y座標=滑鼠的y座標
    pigN++;//多一隻pig
  }
  if(dist(mouseX,mouseY,birdX,birdY)<50)//如果滑鼠有點到bird(距離夠近)
  {
    bMoving=true;//bMoving成立(bird移動)
    oldX=birdX;//舊的x坐標=現在bird的x坐標
    oldY=birdY;//舊的y坐標=現在bird的y坐標
  }
}
void mouseDragged()//滑鼠拖曳
{
  if(bMoving)//如果bMoving成立
  {
    birdX=mouseX;//bird的x坐標=滑鼠的x坐標
    birdY=mouseY;//bird的y坐標=滑鼠的y坐標
  }
}

--------------------------------------------------------------------------------------------------------------------------

心得


因為程設會考快到了,所以老師這次先教了很多程設會考的考古題,到第三節課才開始做憤怒鳥遊戲,看這個遊戲變得愈來愈完整,跟我們玩過的憤怒鳥愈來愈像,真的覺得很有趣!希望這學期結束前可以把這個遊戲完成!

沒有留言:

張貼留言