20200529 程設會考練習&簡易版憤怒鳥
今天老師先複習了程設會考的題目 還有考試
再來教了怎麼在P語言裡使用音樂
一開始先打開P語言
之後按下Sketch 再來選擇Import Library 然後點擊Add Library
就會出現底下這個畫面
再來搜尋sound 就會出現以下這些選項
我們要選的是Minim 然後按下Install
下載好之後前面就會出現一個綠色勾勾
再來回到一開始的畫面
先按下File 再點擊Examples
出現底下這個畫面後
先按下Contributed Libraries前面的+ 再按下Minim前面的+
然後按下Basics前面的+ 再選擇PlayAFile
這樣就會出現一大堆程式碼
這個程式跑起來之後會長這樣
按下鍵盤的任何一個鍵後 音樂就會開始播放
而且白色的線會跟著音樂動 像是聲波的樣子
綠色的線則是跟著音樂播的進度向右移動
再來我們要把上面那一大串的程式簡化
先擷取重要的部分留下來 然後把憤怒鳥的音樂加進去
這樣就可以播放背景音樂了!
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坐標
}
}
--------------------------------------------------------------------------------------------------------------------------
心得
因為程設會考快到了,所以老師這次先教了很多程設會考的考古題,到第三節課才開始做憤怒鳥遊戲,看這個遊戲變得愈來愈完整,跟我們玩過的憤怒鳥愈來愈像,真的覺得很有趣!希望這學期結束前可以把這個遊戲完成!

















沒有留言:
張貼留言